* Clean translation of glu.h

git-svn-id: trunk@20294 -
This commit is contained in:
michael 2012-02-09 22:15:03 +00:00
parent 8efbcbaabb
commit f106f0e30c

View File

@ -1,70 +1,34 @@
{
Adaption of the delphi3d.net OpenGL units to FreePascal
Sebastian Guenther (sg@freepascal.org) in 2002
These units are free to use
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
* Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice including the dates of first publication and
* either this permission notice or a reference to
* http://oss.sgi.com/projects/FreeB/
* shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of Silicon Graphics, Inc.
* shall not be used in advertising or otherwise to promote the sale, use or
* other dealings in this Software without prior written authorization from
* Silicon Graphics, Inc.
}
{*++ BUILD Version: 0004 // Increment this if a change has global effects
Copyright (c) 1985-95, Microsoft Corporation
Module Name:
glu.h
Abstract:
Procedure declarations, constant definitions and macros for the OpenGL
Utility Library.
--*}
{*
** Copyright 1991-1993, Silicon Graphics, Inc.
** All Rights Reserved.
**
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
** the contents of this file may not be disclosed to third parties, copied or
** duplicated in any form, in whole or in part, without the prior written
** permission of Silicon Graphics, Inc.
**
** RESTRICTED RIGHTS LEGEND:
** Use, duplication or disclosure by the Government is subject to restrictions
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
** rights reserved under the Copyright Laws of the United States.
*}
{*
** Return the error string associated with a particular error code.
** This will return 0 for an invalid error code.
**
** The generic function prototype that can be compiled for ANSI or Unicode
** is defined as follows:
**
** LPCTSTR APIENTRY gluErrorStringWIN (GLenum errCode);
*}
{******************************************************************************}
{ Converted to Delphi by Tom Nuydens (tom@delphi3d.net) }
{ For the latest updates, visit Delphi3D: http://www.delphi3d.net }
{******************************************************************************}
{******************************************************************************}
{ }
{ WARNING: CALLBACKS TYPES IN THIS UNIT (TCALLBACK) ARE SOMETIMES CDECL AND }
{ SOMETIMES STDCALL, DEPENDING ON THE EXACT DLL USED. THE MOST COMMON ONE SEEMS}
{ TO USE STDCALL. THIS IS VERIFIED TO BE THE CASE FOR THE TESSELATOR ROUTINES }
{ BUT PROBABLY ALSO APPLIES TO THE OTHER CALLBACKS IN THIS UNIT }
{ FOR UP TO DATE INFO SEE http://wiki.freepascal.org/OpenGL }
{ }
{******************************************************************************}
{$MACRO ON}
{$MODE Delphi}
{$MODE OBJFPC}
{$IFDEF Windows}
{$DEFINE extdecl := stdcall}
{$ELSE}
@ -76,10 +40,21 @@ Abstract:
{$DEFINE GLU_UNIT}
{$ENDIF}
unit GLu;
unit glu;
interface
{
Automatically converted by H2Pas 1.0.0 from out.h
The following command line parameters were used:
-P
-D
-l
glu.dll
out
-o
glu.pp
}
uses
SysUtils,
{$IFDEF Windows}
@ -91,253 +66,75 @@ uses
{$ENDIF}
GL;
type
TViewPortArray = array [0..3] of GLint;
T16dArray = array [0..15] of GLdouble;
TCallBack = procedure;
T3dArray = array [0..2] of GLdouble;
T4pArray = array [0..3] of Pointer;
T4fArray = array [0..3] of GLfloat;
PPointer = ^Pointer;
Const
{$IFDEF Windows}
GLU_Lib = 'glu32.dll';
{$ELSE}
{$ifdef darwin}
GLU_LIB = '/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib';
{$else}
{$IFDEF haiku}
GLU_LIB = 'libGLU.so';
{$ELSE}
{$ifndef MorphOS}
GLU_LIB = 'libGLU.so.1';
{$endif}
{$ENDIF}
{$ENDIF}
{$endif}
type
GLUnurbs = record end; PGLUnurbs = ^GLUnurbs;
GLUquadric = record end; PGLUquadric = ^GLUquadric;
GLUtesselator = record end; PGLUtesselator = ^GLUtesselator;
// backwards compatibility:
GLUnurbsObj = GLUnurbs; PGLUnurbsObj = PGLUnurbs;
GLUquadricObj = GLUquadric; PGLUquadricObj = PGLUquadric;
GLUtesselatorObj = GLUtesselator; PGLUtesselatorObj = PGLUtesselator;
GLUtriangulatorObj = GLUtesselator; PGLUtriangulatorObj = PGLUtesselator;
TGLUnurbs = GLUnurbs;
TGLUquadric = GLUquadric;
TGLUtesselator = GLUtesselator;
TGLUnurbsObj = GLUnurbsObj;
TGLUquadricObj = GLUquadricObj;
TGLUtesselatorObj = GLUtesselatorObj;
TGLUtriangulatorObj = GLUtriangulatorObj;
{$IFDEF MORPHOS}
{ MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
{ systems, so its headers are included here. }
{$INCLUDE tinyglh.inc}
{$ELSE MORPHOS}
var
gluErrorString: function(errCode: GLenum): PChar; extdecl;
gluErrorUnicodeStringEXT: function(errCode: GLenum): PWideChar; extdecl;
gluGetString: function(name: GLenum): PChar; extdecl;
gluOrtho2D: procedure(left,right, bottom, top: GLdouble); extdecl;
gluPerspective: procedure(fovy, aspect, zNear, zFar: GLdouble); extdecl;
gluPickMatrix: procedure(x, y, width, height: GLdouble; var viewport: TViewPortArray); extdecl;
gluLookAt: procedure(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz: GLdouble); extdecl;
gluProject: function(objx, objy, objz: GLdouble; var modelMatrix, projMatrix: T16dArray; var viewport: TViewPortArray; winx, winy, winz: PGLdouble): Integer; extdecl;
gluUnProject: function(winx, winy, winz: GLdouble; var modelMatrix, projMatrix: T16dArray; var viewport: TViewPortArray; objx, objy, objz: PGLdouble): Integer; extdecl;
gluScaleImage: function(format: GLenum; widthin, heightin: GLint; typein: GLenum; const datain: Pointer; widthout, heightout: GLint; typeout: GLenum; dataout: Pointer): Integer; extdecl;
gluBuild1DMipmaps: function(target: GLenum; components, width: GLint; format, atype: GLenum; const data: Pointer): Integer; extdecl;
gluBuild2DMipmaps: function(target: GLenum; components, width, height: GLint; format, atype: GLenum; const data: Pointer): Integer; extdecl;
var
gluNewQuadric: function: PGLUquadric; extdecl;
gluDeleteQuadric: procedure(state: PGLUquadric); extdecl;
gluQuadricNormals: procedure(quadObject: PGLUquadric; normals: GLenum); extdecl;
gluQuadricTexture: procedure(quadObject: PGLUquadric; textureCoords: GLboolean); extdecl;
gluQuadricOrientation: procedure(quadObject: PGLUquadric; orientation: GLenum); extdecl;
gluQuadricDrawStyle: procedure(quadObject: PGLUquadric; drawStyle: GLenum); extdecl;
gluCylinder: procedure(qobj: PGLUquadric; baseRadius, topRadius, height: GLdouble; slices, stacks: GLint); extdecl;
gluDisk: procedure(qobj: PGLUquadric; innerRadius, outerRadius: GLdouble; slices, loops: GLint); extdecl;
gluPartialDisk: procedure(qobj: PGLUquadric; innerRadius, outerRadius: GLdouble; slices, loops: GLint; startAngle, sweepAngle: GLdouble); extdecl;
gluSphere: procedure(qobj: PGLuquadric; radius: GLdouble; slices, stacks: GLint); extdecl;
gluQuadricCallback: procedure(qobj: PGLUquadric; which: GLenum; fn: TCallBack); extdecl;
gluNewTess: function: PGLUtesselator; extdecl;
gluDeleteTess: procedure(tess: PGLUtesselator); extdecl;
gluTessBeginPolygon: procedure(tess: PGLUtesselator; polygon_data: Pointer); extdecl;
gluTessBeginContour: procedure(tess: PGLUtesselator); extdecl;
gluTessVertex: procedure(tess: PGLUtesselator; var coords: T3dArray; data: Pointer); extdecl;
gluTessEndContour: procedure(tess: PGLUtesselator); extdecl;
gluTessEndPolygon: procedure(tess: PGLUtesselator); extdecl;
gluTessProperty: procedure(tess: PGLUtesselator; which: GLenum; value: GLdouble); extdecl;
gluTessNormal: procedure(tess: PGLUtesselator; x, y, z: GLdouble); extdecl;
gluTessCallback: procedure(tess: PGLUtesselator; which: GLenum;fn: TCallBack); extdecl;
gluGetTessProperty: procedure(tess: PGLUtesselator; which: GLenum; value: PGLdouble); extdecl;
gluNewNurbsRenderer: function: PGLUnurbs; extdecl;
gluDeleteNurbsRenderer: procedure(nobj: PGLUnurbs); extdecl;
gluBeginSurface: procedure(nobj: PGLUnurbs); extdecl;
gluBeginCurve: procedure(nobj: PGLUnurbs); extdecl;
gluEndCurve: procedure(nobj: PGLUnurbs); extdecl;
gluEndSurface: procedure(nobj: PGLUnurbs); extdecl;
gluBeginTrim: procedure(nobj: PGLUnurbs); extdecl;
gluEndTrim: procedure(nobj: PGLUnurbs); extdecl;
gluPwlCurve: procedure(nobj: PGLUnurbs; count: GLint; aarray: PGLfloat; stride: GLint; atype: GLenum); extdecl;
gluNurbsCurve: procedure(nobj: PGLUnurbs; nknots: GLint; knot: PGLfloat; stride: GLint; ctlarray: PGLfloat; order: GLint; atype: GLenum); extdecl;
gluNurbsSurface: procedure(nobj: PGLUnurbs; sknot_count: GLint; sknot: PGLfloat; tknot_count: GLint; tknot: PGLfloat; s_stride, t_stride: GLint; ctlarray: PGLfloat; sorder, torder: GLint; atype: GLenum); extdecl;
gluLoadSamplingMatrices: procedure(nobj: PGLUnurbs; var modelMatrix, projMatrix: T16dArray; var viewport: TViewPortArray); extdecl;
gluNurbsProperty: procedure(nobj: PGLUnurbs; aproperty: GLenum; value: GLfloat); extdecl;
gluGetNurbsProperty: procedure(nobj: PGLUnurbs; aproperty: GLenum; value: PGLfloat); extdecl;
gluNurbsCallback: procedure(nobj: PGLUnurbs; which: GLenum; fn: TCallBack); extdecl;
{$ENDIF MORPHOS}
(**** Callback function prototypes ****)
type
// gluQuadricCallback
GLUquadricErrorProc = procedure(p: GLenum); extdecl;
// gluTessCallback
GLUtessBeginProc = procedure(p: GLenum); extdecl;
GLUtessEdgeFlagProc = procedure(p: GLboolean); extdecl;
GLUtessVertexProc = procedure(p: Pointer); extdecl;
GLUtessEndProc = procedure; extdecl;
GLUtessErrorProc = procedure(p: GLenum); extdecl;
GLUtessCombineProc = procedure(var p1: T3dArray; p2: T4pArray; p3: T4fArray; p4: PPointer); extdecl;
GLUtessBeginDataProc = procedure(p1: GLenum; p2: Pointer); extdecl;
GLUtessEdgeFlagDataProc = procedure(p1: GLboolean; p2: Pointer); extdecl;
GLUtessVertexDataProc = procedure(p1, p2: Pointer); extdecl;
GLUtessEndDataProc = procedure(p: Pointer); extdecl;
GLUtessErrorDataProc = procedure(p1: GLenum; p2: Pointer); extdecl;
GLUtessCombineDataProc = procedure(var p1: T3dArray; var p2: T4pArray; var p3: T4fArray;
p4: PPointer; p5: Pointer); extdecl;
// gluNurbsCallback
GLUnurbsErrorProc = procedure(p: GLenum); extdecl;
//*** Generic constants ****/
const
// Version
GLU_EXT_object_space_tess = 1;
GLU_EXT_nurbs_tessellator = 1;
{ Boolean }
GLU_FALSE = 0;
GLU_TRUE = 1;
{ Version }
GLU_VERSION_1_1 = 1;
GLU_VERSION_1_2 = 1;
// Errors: (return value 0 = no error)
GLU_VERSION_1_3 = 1;
{ StringName }
GLU_VERSION = 100800;
GLU_EXTENSIONS = 100801;
{ ErrorCode }
GLU_INVALID_ENUM = 100900;
GLU_INVALID_VALUE = 100901;
GLU_OUT_OF_MEMORY = 100902;
GLU_INCOMPATIBLE_GL_VERSION = 100903;
// StringName
GLU_VERSION = 100800;
GLU_EXTENSIONS = 100801;
// Boolean
GLU_TRUE = GL_TRUE;
GLU_FALSE = GL_FALSE;
//*** Quadric constants ****/
// QuadricNormal
GLU_SMOOTH = 100000;
GLU_FLAT = 100001;
GLU_NONE = 100002;
// QuadricDrawStyle
GLU_POINT = 100010;
GLU_LINE = 100011;
GLU_FILL = 100012;
GLU_SILHOUETTE = 100013;
// QuadricOrientation
GLU_OUTSIDE = 100020;
GLU_INSIDE = 100021;
// Callback types:
// GLU_ERROR = 100103;
//*** Tesselation constants ****/
GLU_TESS_MAX_COORD = 1.0e150;
// TessProperty
GLU_TESS_WINDING_RULE = 100140;
GLU_TESS_BOUNDARY_ONLY = 100141;
GLU_TESS_TOLERANCE = 100142;
// TessWinding
GLU_TESS_WINDING_ODD = 100130;
GLU_TESS_WINDING_NONZERO = 100131;
GLU_TESS_WINDING_POSITIVE = 100132;
GLU_TESS_WINDING_NEGATIVE = 100133;
GLU_TESS_WINDING_ABS_GEQ_TWO = 100134;
// TessCallback
GLU_TESS_BEGIN = 100100; // void (CALLBACK*)(GLenum type)
GLU_TESS_VERTEX = 100101; // void (CALLBACK*)(void *data)
GLU_TESS_END = 100102; // void (CALLBACK*)(void)
GLU_TESS_ERROR = 100103; // void (CALLBACK*)(GLenum errno)
GLU_TESS_EDGE_FLAG = 100104; // void (CALLBACK*)(GLboolean boundaryEdge)
GLU_TESS_COMBINE = 100105; { void (CALLBACK*)(GLdouble coords[3],
void *data[4],
GLfloat weight[4],
void **dataOut) }
GLU_TESS_BEGIN_DATA = 100106; { void (CALLBACK*)(GLenum type,
void *polygon_data) }
GLU_TESS_VERTEX_DATA = 100107; { void (CALLBACK*)(void *data,
void *polygon_data) }
GLU_TESS_END_DATA = 100108; // void (CALLBACK*)(void *polygon_data)
GLU_TESS_ERROR_DATA = 100109; { void (CALLBACK*)(GLenum errno,
void *polygon_data) }
GLU_TESS_EDGE_FLAG_DATA = 100110; { void (CALLBACK*)(GLboolean boundaryEdge,
void *polygon_data) }
GLU_TESS_COMBINE_DATA = 100111; { void (CALLBACK*)(GLdouble coords[3],
void *data[4],
GLfloat weight[4],
void **dataOut,
void *polygon_data) }
// TessError
GLU_TESS_ERROR1 = 100151;
GLU_TESS_ERROR2 = 100152;
GLU_TESS_ERROR3 = 100153;
GLU_TESS_ERROR4 = 100154;
GLU_TESS_ERROR5 = 100155;
GLU_TESS_ERROR6 = 100156;
GLU_TESS_ERROR7 = 100157;
GLU_TESS_ERROR8 = 100158;
GLU_TESS_MISSING_BEGIN_POLYGON = GLU_TESS_ERROR1;
GLU_TESS_MISSING_BEGIN_CONTOUR = GLU_TESS_ERROR2;
GLU_TESS_MISSING_END_POLYGON = GLU_TESS_ERROR3;
GLU_TESS_MISSING_END_CONTOUR = GLU_TESS_ERROR4;
GLU_TESS_COORD_TOO_LARGE = GLU_TESS_ERROR5;
GLU_TESS_NEED_COMBINE_CALLBACK = GLU_TESS_ERROR6;
//*** NURBS constants ****/
// NurbsProperty
GLU_AUTO_LOAD_MATRIX = 100200;
GLU_CULLING = 100201;
GLU_SAMPLING_TOLERANCE = 100203;
GLU_DISPLAY_MODE = 100204;
GLU_PARAMETRIC_TOLERANCE = 100202;
GLU_SAMPLING_METHOD = 100205;
GLU_U_STEP = 100206;
GLU_V_STEP = 100207;
// NurbsSampling
GLU_PATH_LENGTH = 100215;
GLU_PARAMETRIC_ERROR = 100216;
GLU_DOMAIN_DISTANCE = 100217;
// NurbsTrim
GLU_MAP1_TRIM_2 = 100210;
GLU_MAP1_TRIM_3 = 100211;
// NurbsDisplay
// GLU_FILL = 100012;
GLU_INVALID_OPERATION = 100904;
{ NurbsDisplay }
{ GLU_FILL }
GLU_OUTLINE_POLYGON = 100240;
GLU_OUTLINE_PATCH = 100241;
// NurbsCallback
// GLU_ERROR = 100103;
// NurbsErrors
{ NurbsCallback }
GLU_NURBS_ERROR = 100103;
GLU_ERROR = 100103;
GLU_NURBS_BEGIN = 100164;
GLU_NURBS_BEGIN_EXT = 100164;
GLU_NURBS_VERTEX = 100165;
GLU_NURBS_VERTEX_EXT = 100165;
GLU_NURBS_NORMAL = 100166;
GLU_NURBS_NORMAL_EXT = 100166;
GLU_NURBS_COLOR = 100167;
GLU_NURBS_COLOR_EXT = 100167;
GLU_NURBS_TEXTURE_COORD = 100168;
GLU_NURBS_TEX_COORD_EXT = 100168;
GLU_NURBS_END = 100169;
GLU_NURBS_END_EXT = 100169;
GLU_NURBS_BEGIN_DATA = 100170;
GLU_NURBS_BEGIN_DATA_EXT = 100170;
GLU_NURBS_VERTEX_DATA = 100171;
GLU_NURBS_VERTEX_DATA_EXT = 100171;
GLU_NURBS_NORMAL_DATA = 100172;
GLU_NURBS_NORMAL_DATA_EXT = 100172;
GLU_NURBS_COLOR_DATA = 100173;
GLU_NURBS_COLOR_DATA_EXT = 100173;
GLU_NURBS_TEXTURE_COORD_DATA = 100174;
GLU_NURBS_TEX_COORD_DATA_EXT = 100174;
GLU_NURBS_END_DATA = 100175;
GLU_NURBS_END_DATA_EXT = 100175;
{ NurbsError }
GLU_NURBS_ERROR1 = 100251;
GLU_NURBS_ERROR2 = 100252;
GLU_NURBS_ERROR3 = 100253;
@ -375,34 +172,235 @@ const
GLU_NURBS_ERROR35 = 100285;
GLU_NURBS_ERROR36 = 100286;
GLU_NURBS_ERROR37 = 100287;
//*** Backwards compatibility for old tesselator ****/
var
gluBeginPolygon: procedure(tess: PGLUtesselator); extdecl;
gluNextContour: procedure(tess: PGLUtesselator; atype: GLenum); extdecl;
gluEndPolygon: procedure(tess: PGLUtesselator); extdecl;
const
// Contours types -- obsolete!
{ NurbsProperty }
GLU_AUTO_LOAD_MATRIX = 100200;
GLU_CULLING = 100201;
GLU_SAMPLING_TOLERANCE = 100203;
GLU_DISPLAY_MODE = 100204;
GLU_PARAMETRIC_TOLERANCE = 100202;
GLU_SAMPLING_METHOD = 100205;
GLU_U_STEP = 100206;
GLU_V_STEP = 100207;
GLU_NURBS_MODE = 100160;
GLU_NURBS_MODE_EXT = 100160;
GLU_NURBS_TESSELLATOR = 100161;
GLU_NURBS_TESSELLATOR_EXT = 100161;
GLU_NURBS_RENDERER = 100162;
GLU_NURBS_RENDERER_EXT = 100162;
{ NurbsSampling }
GLU_OBJECT_PARAMETRIC_ERROR = 100208;
GLU_OBJECT_PARAMETRIC_ERROR_EXT = 100208;
GLU_OBJECT_PATH_LENGTH = 100209;
GLU_OBJECT_PATH_LENGTH_EXT = 100209;
GLU_PATH_LENGTH = 100215;
GLU_PARAMETRIC_ERROR = 100216;
GLU_DOMAIN_DISTANCE = 100217;
{ NurbsTrim }
GLU_MAP1_TRIM_2 = 100210;
GLU_MAP1_TRIM_3 = 100211;
{ QuadricDrawStyle }
GLU_POINT = 100010;
GLU_LINE = 100011;
GLU_FILL = 100012;
GLU_SILHOUETTE = 100013;
{ QuadricCallback }
{ GLU_ERROR }
{ QuadricNormal }
GLU_SMOOTH = 100000;
GLU_FLAT = 100001;
GLU_NONE = 100002;
{ QuadricOrientation }
GLU_OUTSIDE = 100020;
GLU_INSIDE = 100021;
{ TessCallback }
GLU_TESS_BEGIN = 100100;
GLU_BEGIN = 100100;
GLU_TESS_VERTEX = 100101;
GLU_VERTEX = 100101;
GLU_TESS_END = 100102;
GLU_END = 100102;
GLU_TESS_ERROR = 100103;
GLU_TESS_EDGE_FLAG = 100104;
GLU_EDGE_FLAG = 100104;
GLU_TESS_COMBINE = 100105;
GLU_TESS_BEGIN_DATA = 100106;
GLU_TESS_VERTEX_DATA = 100107;
GLU_TESS_END_DATA = 100108;
GLU_TESS_ERROR_DATA = 100109;
GLU_TESS_EDGE_FLAG_DATA = 100110;
GLU_TESS_COMBINE_DATA = 100111;
{ TessContour }
GLU_CW = 100120;
GLU_CCW = 100121;
GLU_INTERIOR = 100122;
GLU_EXTERIOR = 100123;
GLU_UNKNOWN = 100124;
{ TessProperty }
GLU_TESS_WINDING_RULE = 100140;
GLU_TESS_BOUNDARY_ONLY = 100141;
GLU_TESS_TOLERANCE = 100142;
{ TessError }
GLU_TESS_ERROR1 = 100151;
GLU_TESS_ERROR2 = 100152;
GLU_TESS_ERROR3 = 100153;
GLU_TESS_ERROR4 = 100154;
GLU_TESS_ERROR5 = 100155;
GLU_TESS_ERROR6 = 100156;
GLU_TESS_ERROR7 = 100157;
GLU_TESS_ERROR8 = 100158;
GLU_TESS_MISSING_BEGIN_POLYGON = 100151;
GLU_TESS_MISSING_BEGIN_CONTOUR = 100152;
GLU_TESS_MISSING_END_POLYGON = 100153;
GLU_TESS_MISSING_END_CONTOUR = 100154;
GLU_TESS_COORD_TOO_LARGE = 100155;
GLU_TESS_NEED_COMBINE_CALLBACK = 100156;
{ TessWinding }
GLU_TESS_WINDING_ODD = 100130;
GLU_TESS_WINDING_NONZERO = 100131;
GLU_TESS_WINDING_POSITIVE = 100132;
GLU_TESS_WINDING_NEGATIVE = 100133;
GLU_TESS_WINDING_ABS_GEQ_TWO = 100134;
const
GLU_TESS_MAX_COORD = 1.0e150;
// Names without "TESS_" prefix
GLU_BEGIN = GLU_TESS_BEGIN;
GLU_VERTEX = GLU_TESS_VERTEX;
GLU_END = GLU_TESS_END;
GLU_ERROR = GLU_TESS_ERROR;
GLU_EDGE_FLAG = GLU_TESS_EDGE_FLAG;
{*********************************************************** }
procedure LoadGLu(const dll: String);
procedure FreeGLu;
{$IFDEF FPC}
{$PACKRECORDS C}
{$ENDIF}
Type
GLUnurbs = record end;
GLUquadric = record end;
GLUtesselator = record end;
PGLdouble = ^GLdouble;
PGLfloat = ^GLfloat;
PGLint = ^GLint;
PGLubyte = ^GLubyte;
PGLUnurbs = ^GLUnurbs;
PGLUquadric = ^GLUquadric;
PGLUtesselator = ^GLUtesselator;
GLUnurbsObj = GLUnurbs;
GLUquadricObj = GLUquadric;
GLUtesselatorObj = GLUtesselator;
GLUtriangulatorObj = GLUtesselator;
_GLUfuncptr = procedure ;extdecl;
{$IFDEF MORPHOS}
{ MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
{ systems, so its headers are included here. }
{$INCLUDE tinyglh.inc}
{$ELSE MORPHOS}
var
gluBeginCurve : procedure(nurb:PGLUnurbs);extdecl;
gluBeginPolygon : procedure(tess:PGLUtesselator);extdecl;
gluBeginSurface : procedure(nurb:PGLUnurbs);extdecl;
gluBeginTrim : procedure(nurb:PGLUnurbs);extdecl;
gluBuild1DMipmapLevels : function(target:GLenum; internalFormat:GLint; width:GLsizei; format:GLenum; _type:GLenum;
level:GLint; base:GLint; max:GLint; data:pointer):GLint;extdecl;
gluBuild1DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; format:GLenum; _type:GLenum;
data:pointer):GLint;extdecl;
gluBuild2DMipmapLevels : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; format:GLenum;
_type:GLenum; level:GLint; base:GLint; max:GLint; data:pointer):GLint;extdecl;
gluBuild2DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; format:GLenum;
_type:GLenum; data:pointer):GLint;extdecl;
gluBuild3DMipmapLevels : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; depth:GLsizei;
format:GLenum; _type:GLenum; level:GLint; base:GLint; max:GLint;
data:pointer):GLint;extdecl;
gluBuild3DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; depth:GLsizei;
format:GLenum; _type:GLenum; data:pointer):GLint;extdecl;
gluCheckExtension : function(extName:PGLubyte; extString:PGLubyte):GLboolean;extdecl;
gluCylinder : procedure(quad:PGLUquadric; base:GLdouble; top:GLdouble; height:GLdouble; slices:GLint;
stacks:GLint);extdecl;
gluDeleteNurbsRenderer : procedure(nurb:PGLUnurbs);extdecl;
gluDeleteQuadric : procedure(quad:PGLUquadric);extdecl;
gluDeleteTess : procedure(tess:PGLUtesselator);extdecl;
gluDisk : procedure(quad:PGLUquadric; inner:GLdouble; outer:GLdouble; slices:GLint; loops:GLint);extdecl;
gluEndCurve : procedure(nurb:PGLUnurbs);extdecl;
gluEndPolygon : procedure(tess:PGLUtesselator);extdecl;
gluEndSurface : procedure(nurb:PGLUnurbs);extdecl;
gluEndTrim : procedure(nurb:PGLUnurbs);extdecl;
gluErrorString : function(error:GLenum): PGLubyte;extdecl;
gluGetNurbsProperty : procedure(nurb:PGLUnurbs; _property:GLenum; data:PGLfloat);extdecl;
gluGetString : function(name:GLenum):PGLubyte;extdecl;
gluGetTessProperty : procedure(tess:PGLUtesselator; which:GLenum; data:PGLdouble);extdecl;
gluLoadSamplingMatrices : procedure(nurb:PGLUnurbs; model:PGLfloat; perspective:PGLfloat; view:PGLint);extdecl;
gluLookAt : procedure(eyeX:GLdouble; eyeY:GLdouble; eyeZ:GLdouble; centerX:GLdouble; centerY:GLdouble;
centerZ:GLdouble; upX:GLdouble; upY:GLdouble; upZ:GLdouble);extdecl;
gluNewNurbsRenderer : function:PGLUnurbs;extdecl;
gluNewQuadric : function:PGLUquadric;extdecl;
gluNewTess : function:PGLUtesselator;extdecl;
gluNextContour : procedure(tess:PGLUtesselator; _type:GLenum);extdecl;
gluNurbsCallback : procedure(nurb:PGLUnurbs; which:GLenum; CallBackFunc:_GLUfuncptr);extdecl;
gluNurbsCallbackData : procedure(nurb:PGLUnurbs; userData:PGLvoid);extdecl;
gluNurbsCallbackDataEXT : procedure(nurb:PGLUnurbs; userData:PGLvoid);extdecl;
gluNurbsCurve : procedure(nurb:PGLUnurbs; knotCount:GLint; knots:PGLfloat; stride:GLint; control:PGLfloat;
order:GLint; _type:GLenum);extdecl;
gluNurbsProperty : procedure(nurb:PGLUnurbs; _property:GLenum; value:GLfloat);extdecl;
gluNurbsSurface : procedure(nurb:PGLUnurbs; sKnotCount:GLint; sKnots:PGLfloat; tKnotCount:GLint; tKnots:PGLfloat;
sStride:GLint; tStride:GLint; control:PGLfloat; sOrder:GLint; tOrder:GLint;
_type:GLenum);extdecl;
gluOrtho2D : procedure(left:GLdouble; right:GLdouble; bottom:GLdouble; top:GLdouble);extdecl;
gluPartialDisk : procedure(quad:PGLUquadric; inner:GLdouble; outer:GLdouble; slices:GLint; loops:GLint;
start:GLdouble; sweep:GLdouble);extdecl;
gluPerspective : procedure(fovy:GLdouble; aspect:GLdouble; zNear:GLdouble; zFar:GLdouble);extdecl;
gluPickMatrix : procedure(x:GLdouble; y:GLdouble; delX:GLdouble; delY:GLdouble; viewport:PGLint);extdecl;
gluProject : function(objX:GLdouble; objY:GLdouble; objZ:GLdouble; model:PGLdouble; proj:PGLdouble;
view:PGLint; winX:PGLdouble; winY:PGLdouble; winZ:PGLdouble):GLint;extdecl;
gluPwlCurve : procedure(nurb:PGLUnurbs; count:GLint; data:PGLfloat; stride:GLint; _type:GLenum);extdecl;
gluQuadricCallback : procedure(quad:PGLUquadric; which:GLenum; CallBackFunc:_GLUfuncptr);extdecl;
gluQuadricDrawStyle : procedure(quad:PGLUquadric; draw:GLenum);extdecl;
gluQuadricNormals : procedure(quad:PGLUquadric; normal:GLenum);extdecl;
gluQuadricOrientation : procedure(quad:PGLUquadric; orientation:GLenum);extdecl;
gluQuadricTexture : procedure(quad:PGLUquadric; texture:GLboolean);extdecl;
gluScaleImage : function(format:GLenum; wIn:GLsizei; hIn:GLsizei; typeIn:GLenum; dataIn:pointer;
wOut:GLsizei; hOut:GLsizei; typeOut:GLenum; dataOut:PGLvoid):GLint;extdecl;
gluSphere : procedure(quad:PGLUquadric; radius:GLdouble; slices:GLint; stacks:GLint);extdecl;
gluTessBeginContour : procedure(tess:PGLUtesselator);extdecl;
gluTessBeginPolygon : procedure(tess:PGLUtesselator; data:PGLvoid);extdecl;
gluTessCallback : procedure(tess:PGLUtesselator; which:GLenum; CallBackFunc:_GLUfuncptr);extdecl;
gluTessEndContour : procedure(tess:PGLUtesselator);extdecl;
gluTessEndPolygon : procedure(tess:PGLUtesselator);extdecl;
gluTessNormal : procedure(tess:PGLUtesselator; valueX:GLdouble; valueY:GLdouble; valueZ:GLdouble);extdecl;
gluTessProperty : procedure(tess:PGLUtesselator; which:GLenum; data:GLdouble);extdecl;
gluTessVertex : procedure(tess:PGLUtesselator; location:PGLdouble; data:PGLvoid);extdecl;
gluUnProject : function(winX:GLdouble; winY:GLdouble; winZ:GLdouble; model:PGLdouble; proj:PGLdouble;
view:PGLint; objX:PGLdouble; objY:PGLdouble; objZ:PGLdouble):GLint;extdecl;
gluUnProject4 : function(winX:GLdouble; winY:GLdouble; winZ:GLdouble; clipW:GLdouble; model:PGLdouble;
proj:PGLdouble; view:PGLint; nearVal:GLdouble; farVal:GLdouble; objX:PGLdouble;
objY:PGLdouble; objZ:PGLdouble; objW:PGLdouble):GLint;extdecl;
{$endif}
implementation
{$IFDEF MORPHOS}
{ MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
@ -410,178 +408,155 @@ implementation
{$INCLUDE tinygl.inc}
{$ELSE MORPHOS}
uses
dynlibs;
var
hDLL: TLibHandle;
hlib : tlibhandle;
{$ENDIF MORPHOS}
procedure FreeGLu;
procedure Freeglu;
begin
{$IFDEF MORPHOS}
// MorphOS's GL will closed down by TinyGL unit, nothing is needed here.
{$ELSE MORPHOS}
@gluErrorString := nil;
@gluErrorUnicodeStringEXT := nil;
@gluGetString := nil;
@gluOrtho2D := nil;
@gluPerspective := nil;
@gluPickMatrix := nil;
@gluLookAt := nil;
@gluProject := nil;
@gluUnProject := nil;
@gluScaleImage := nil;
@gluBuild1DMipmaps := nil;
@gluBuild2DMipmaps := nil;
@gluNewQuadric := nil;
@gluDeleteQuadric := nil;
@gluQuadricNormals := nil;
@gluQuadricTexture := nil;
@gluQuadricOrientation := nil;
@gluQuadricDrawStyle := nil;
@gluCylinder := nil;
@gluDisk := nil;
@gluPartialDisk := nil;
@gluSphere := nil;
@gluQuadricCallback := nil;
@gluNewTess := nil;
@gluDeleteTess := nil;
@gluTessBeginPolygon := nil;
@gluTessBeginContour := nil;
@gluTessVertex := nil;
@gluTessEndContour := nil;
@gluTessEndPolygon := nil;
@gluTessProperty := nil;
@gluTessNormal := nil;
@gluTessCallback := nil;
@gluGetTessProperty := nil;
@gluNewNurbsRenderer := nil;
@gluDeleteNurbsRenderer := nil;
@gluBeginSurface := nil;
@gluBeginCurve := nil;
@gluEndCurve := nil;
@gluEndSurface := nil;
@gluBeginTrim := nil;
@gluEndTrim := nil;
@gluPwlCurve := nil;
@gluNurbsCurve := nil;
@gluNurbsSurface := nil;
@gluLoadSamplingMatrices := nil;
@gluNurbsProperty := nil;
@gluGetNurbsProperty := nil;
@gluNurbsCallback := nil;
@gluBeginPolygon := nil;
@gluNextContour := nil;
@gluEndPolygon := nil;
if (hDLL <> 0) then
FreeLibrary(hDLL);
{$IFNDEF MORPHOS}
if (hlib <> 0) then
FreeLibrary(hlib);
gluBeginCurve:=nil;
gluBeginPolygon:=nil;
gluBeginSurface:=nil;
gluBeginTrim:=nil;
gluBuild1DMipmapLevels:=nil;
gluBuild1DMipmaps:=nil;
gluBuild2DMipmapLevels:=nil;
gluBuild2DMipmaps:=nil;
gluBuild3DMipmapLevels:=nil;
gluBuild3DMipmaps:=nil;
gluCheckExtension:=nil;
gluCylinder:=nil;
gluDeleteNurbsRenderer:=nil;
gluDeleteQuadric:=nil;
gluDeleteTess:=nil;
gluDisk:=nil;
gluEndCurve:=nil;
gluEndPolygon:=nil;
gluEndSurface:=nil;
gluEndTrim:=nil;
gluErrorString:=nil;
gluGetNurbsProperty:=nil;
gluGetString:=nil;
gluGetTessProperty:=nil;
gluLoadSamplingMatrices:=nil;
gluLookAt:=nil;
gluNewNurbsRenderer:=nil;
gluNewQuadric:=nil;
gluNewTess:=nil;
gluNextContour:=nil;
gluNurbsCallback:=nil;
gluNurbsCallbackData:=nil;
gluNurbsCallbackDataEXT:=nil;
gluNurbsCurve:=nil;
gluNurbsProperty:=nil;
gluNurbsSurface:=nil;
gluOrtho2D:=nil;
gluPartialDisk:=nil;
gluPerspective:=nil;
gluPickMatrix:=nil;
gluProject:=nil;
gluPwlCurve:=nil;
gluQuadricCallback:=nil;
gluQuadricDrawStyle:=nil;
gluQuadricNormals:=nil;
gluQuadricOrientation:=nil;
gluQuadricTexture:=nil;
gluScaleImage:=nil;
gluSphere:=nil;
gluTessBeginContour:=nil;
gluTessBeginPolygon:=nil;
gluTessCallback:=nil;
gluTessEndContour:=nil;
gluTessEndPolygon:=nil;
gluTessNormal:=nil;
gluTessProperty:=nil;
gluTessVertex:=nil;
gluUnProject:=nil;
gluUnProject4:=nil;
{$ENDIF MORPHOS}
end;
procedure LoadGLu(const dll: String);
{$IFDEF MORPHOS}
procedure Loadglu(lib : pchar);
begin
// MorphOS's GL has own initialization in TinyGL unit, nothing is needed here.
end;
{$ELSE MORPHOS}
var
MethodName: string = '';
{$IFDNDEF MORPHOS}
Freeglu;
hlib:=LoadLibrary(lib);
if hlib=0 then
raise Exception.Create(format('Could not load library: %s',[lib]));
function GetGLuProcAddress(Lib: PtrInt; ProcName: PChar): Pointer;
begin
MethodName:=ProcName;
Result:=GetProcAddress(Lib, ProcName);
end;
begin
FreeGLu;
hDLL := LoadLibrary(PChar(dll));
if hDLL = 0 then raise Exception.Create('Could not load GLu from ' + dll);
try
@gluErrorString := GetGLuProcAddress(hDLL, 'gluErrorString');
@gluErrorUnicodeStringEXT := GetGLuProcAddress(hDLL, 'gluErrorUnicodeStringEXT');
@gluGetString := GetGLuProcAddress(hDLL, 'gluGetString');
@gluOrtho2D := GetGLuProcAddress(hDLL, 'gluOrtho2D');
@gluPerspective := GetGLuProcAddress(hDLL, 'gluPerspective');
@gluPickMatrix := GetGLuProcAddress(hDLL, 'gluPickMatrix');
@gluLookAt := GetGLuProcAddress(hDLL, 'gluLookAt');
@gluProject := GetGLuProcAddress(hDLL, 'gluProject');
@gluUnProject := GetGLuProcAddress(hDLL, 'gluUnProject');
@gluScaleImage := GetGLuProcAddress(hDLL, 'gluScaleImage');
@gluBuild1DMipmaps := GetGLuProcAddress(hDLL, 'gluBuild1DMipmaps');
@gluBuild2DMipmaps := GetGLuProcAddress(hDLL, 'gluBuild2DMipmaps');
@gluNewQuadric := GetGLuProcAddress(hDLL, 'gluNewQuadric');
@gluDeleteQuadric := GetGLuProcAddress(hDLL, 'gluDeleteQuadric');
@gluQuadricNormals := GetGLuProcAddress(hDLL, 'gluQuadricNormals');
@gluQuadricTexture := GetGLuProcAddress(hDLL, 'gluQuadricTexture');
@gluQuadricOrientation := GetGLuProcAddress(hDLL, 'gluQuadricOrientation');
@gluQuadricDrawStyle := GetGLuProcAddress(hDLL, 'gluQuadricDrawStyle');
@gluCylinder := GetGLuProcAddress(hDLL, 'gluCylinder');
@gluDisk := GetGLuProcAddress(hDLL, 'gluDisk');
@gluPartialDisk := GetGLuProcAddress(hDLL, 'gluPartialDisk');
@gluSphere := GetGLuProcAddress(hDLL, 'gluSphere');
@gluQuadricCallback := GetGLuProcAddress(hDLL, 'gluQuadricCallback');
@gluNewTess := GetGLuProcAddress(hDLL, 'gluNewTess');
@gluDeleteTess := GetGLuProcAddress(hDLL, 'gluDeleteTess');
@gluTessBeginPolygon := GetGLuProcAddress(hDLL, 'gluTessBeginPolygon');
@gluTessBeginContour := GetGLuProcAddress(hDLL, 'gluTessBeginContour');
@gluTessVertex := GetGLuProcAddress(hDLL, 'gluTessVertex');
@gluTessEndContour := GetGLuProcAddress(hDLL, 'gluTessEndContour');
@gluTessEndPolygon := GetGLuProcAddress(hDLL, 'gluTessEndPolygon');
@gluTessProperty := GetGLuProcAddress(hDLL, 'gluTessProperty');
@gluTessNormal := GetGLuProcAddress(hDLL, 'gluTessNormal');
@gluTessCallback := GetGLuProcAddress(hDLL, 'gluTessCallback');
@gluGetTessProperty := GetGLuProcAddress(hDLL, 'gluGetTessProperty');
@gluNewNurbsRenderer := GetGLuProcAddress(hDLL, 'gluNewNurbsRenderer');
@gluDeleteNurbsRenderer := GetGLuProcAddress(hDLL, 'gluDeleteNurbsRenderer');
@gluBeginSurface := GetGLuProcAddress(hDLL, 'gluBeginSurface');
@gluBeginCurve := GetGLuProcAddress(hDLL, 'gluBeginCurve');
@gluEndCurve := GetGLuProcAddress(hDLL, 'gluEndCurve');
@gluEndSurface := GetGLuProcAddress(hDLL, 'gluEndSurface');
@gluBeginTrim := GetGLuProcAddress(hDLL, 'gluBeginTrim');
@gluEndTrim := GetGLuProcAddress(hDLL, 'gluEndTrim');
@gluPwlCurve := GetGLuProcAddress(hDLL, 'gluPwlCurve');
@gluNurbsCurve := GetGLuProcAddress(hDLL, 'gluNurbsCurve');
@gluNurbsSurface := GetGLuProcAddress(hDLL, 'gluNurbsSurface');
@gluLoadSamplingMatrices := GetGLuProcAddress(hDLL, 'gluLoadSamplingMatrices');
@gluNurbsProperty := GetGLuProcAddress(hDLL, 'gluNurbsProperty');
@gluGetNurbsProperty := GetGLuProcAddress(hDLL, 'gluGetNurbsProperty');
@gluNurbsCallback := GetGLuProcAddress(hDLL, 'gluNurbsCallback');
@gluBeginPolygon := GetGLuProcAddress(hDLL, 'gluBeginPolygon');
@gluNextContour := GetGLuProcAddress(hDLL, 'gluNextContour');
@gluEndPolygon := GetGLuProcAddress(hDLL, 'gluEndPolygon');
except
raise Exception.Create('Could not load ' + MethodName + ' from ' + dll);
end;
end;
pointer(gluBeginCurve):=GetProcAddress(hlib,'gluBeginCurve');
pointer(gluBeginPolygon):=GetProcAddress(hlib,'gluBeginPolygon');
pointer(gluBeginSurface):=GetProcAddress(hlib,'gluBeginSurface');
pointer(gluBeginTrim):=GetProcAddress(hlib,'gluBeginTrim');
pointer(gluBuild1DMipmapLevels):=GetProcAddress(hlib,'gluBuild1DMipmapLevels');
pointer(gluBuild1DMipmaps):=GetProcAddress(hlib,'gluBuild1DMipmaps');
pointer(gluBuild2DMipmapLevels):=GetProcAddress(hlib,'gluBuild2DMipmapLevels');
pointer(gluBuild2DMipmaps):=GetProcAddress(hlib,'gluBuild2DMipmaps');
pointer(gluBuild3DMipmapLevels):=GetProcAddress(hlib,'gluBuild3DMipmapLevels');
pointer(gluBuild3DMipmaps):=GetProcAddress(hlib,'gluBuild3DMipmaps');
pointer(gluCheckExtension):=GetProcAddress(hlib,'gluCheckExtension');
pointer(gluCylinder):=GetProcAddress(hlib,'gluCylinder');
pointer(gluDeleteNurbsRenderer):=GetProcAddress(hlib,'gluDeleteNurbsRenderer');
pointer(gluDeleteQuadric):=GetProcAddress(hlib,'gluDeleteQuadric');
pointer(gluDeleteTess):=GetProcAddress(hlib,'gluDeleteTess');
pointer(gluDisk):=GetProcAddress(hlib,'gluDisk');
pointer(gluEndCurve):=GetProcAddress(hlib,'gluEndCurve');
pointer(gluEndPolygon):=GetProcAddress(hlib,'gluEndPolygon');
pointer(gluEndSurface):=GetProcAddress(hlib,'gluEndSurface');
pointer(gluEndTrim):=GetProcAddress(hlib,'gluEndTrim');
pointer(gluErrorString):=GetProcAddress(hlib,'gluErrorString');
pointer(gluGetNurbsProperty):=GetProcAddress(hlib,'gluGetNurbsProperty');
pointer(gluGetString):=GetProcAddress(hlib,'gluGetString');
pointer(gluGetTessProperty):=GetProcAddress(hlib,'gluGetTessProperty');
pointer(gluLoadSamplingMatrices):=GetProcAddress(hlib,'gluLoadSamplingMatrices');
pointer(gluLookAt):=GetProcAddress(hlib,'gluLookAt');
pointer(gluNewNurbsRenderer):=GetProcAddress(hlib,'gluNewNurbsRenderer');
pointer(gluNewQuadric):=GetProcAddress(hlib,'gluNewQuadric');
pointer(gluNewTess):=GetProcAddress(hlib,'gluNewTess');
pointer(gluNextContour):=GetProcAddress(hlib,'gluNextContour');
pointer(gluNurbsCallback):=GetProcAddress(hlib,'gluNurbsCallback');
pointer(gluNurbsCallbackData):=GetProcAddress(hlib,'gluNurbsCallbackData');
pointer(gluNurbsCallbackDataEXT):=GetProcAddress(hlib,'gluNurbsCallbackDataEXT');
pointer(gluNurbsCurve):=GetProcAddress(hlib,'gluNurbsCurve');
pointer(gluNurbsProperty):=GetProcAddress(hlib,'gluNurbsProperty');
pointer(gluNurbsSurface):=GetProcAddress(hlib,'gluNurbsSurface');
pointer(gluOrtho2D):=GetProcAddress(hlib,'gluOrtho2D');
pointer(gluPartialDisk):=GetProcAddress(hlib,'gluPartialDisk');
pointer(gluPerspective):=GetProcAddress(hlib,'gluPerspective');
pointer(gluPickMatrix):=GetProcAddress(hlib,'gluPickMatrix');
pointer(gluProject):=GetProcAddress(hlib,'gluProject');
pointer(gluPwlCurve):=GetProcAddress(hlib,'gluPwlCurve');
pointer(gluQuadricCallback):=GetProcAddress(hlib,'gluQuadricCallback');
pointer(gluQuadricDrawStyle):=GetProcAddress(hlib,'gluQuadricDrawStyle');
pointer(gluQuadricNormals):=GetProcAddress(hlib,'gluQuadricNormals');
pointer(gluQuadricOrientation):=GetProcAddress(hlib,'gluQuadricOrientation');
pointer(gluQuadricTexture):=GetProcAddress(hlib,'gluQuadricTexture');
pointer(gluScaleImage):=GetProcAddress(hlib,'gluScaleImage');
pointer(gluSphere):=GetProcAddress(hlib,'gluSphere');
pointer(gluTessBeginContour):=GetProcAddress(hlib,'gluTessBeginContour');
pointer(gluTessBeginPolygon):=GetProcAddress(hlib,'gluTessBeginPolygon');
pointer(gluTessCallback):=GetProcAddress(hlib,'gluTessCallback');
pointer(gluTessEndContour):=GetProcAddress(hlib,'gluTessEndContour');
pointer(gluTessEndPolygon):=GetProcAddress(hlib,'gluTessEndPolygon');
pointer(gluTessNormal):=GetProcAddress(hlib,'gluTessNormal');
pointer(gluTessProperty):=GetProcAddress(hlib,'gluTessProperty');
pointer(gluTessVertex):=GetProcAddress(hlib,'gluTessVertex');
pointer(gluUnProject):=GetProcAddress(hlib,'gluUnProject');
pointer(gluUnProject4):=GetProcAddress(hlib,'gluUnProject4');
{$ENDIF MORPHOS}
end;
initialization
{$IFDEF Windows}
LoadGLu('glu32.dll');
{$ELSE}
{$ifdef darwin}
LoadGLu('/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib');
{$else}
{$IFDEF haiku}
LoadGLu('libGLU.so');
{$ELSE}
{$ifndef MorphOS}
LoadGLu('libGLU.so.1');
{$endif}
{$ENDIF}
{$ENDIF}
{$endif}
LoadGLu(GLU_LIB);
finalization
FreeGLu;
Freeglu;
end.