123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- {
- $Id$
- Translation of the Mesa GLU headers for FreePascal
- Copyright (C) 1999 Sebastian Guenther
- Mesa 3-D graphics library
- Version: 3.0
- Copyright (C) 1995-1998 Brian Paul
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- }
- {$MODE delphi} // objfpc would not work because of direct proc var assignments
- {You have to enable Macros (compiler switch "-Sm") for compiling this unit!
- This is necessary for supporting different platforms with different calling
- conventions via a single unit.}
- unit GLU;
- interface
- {$MACRO ON}
- {$IFDEF Win32}
- {$DEFINE glu_dll := }
- uses Windows, GL;
- {$ELSE}
- {$MESSAGE Unsupported platform.}
- {$ENDIF}
- // =======================================================
- // Unit specific extensions
- // =======================================================
- function InitGLUFromLibrary(libname: PChar): Boolean;
- // determines automatically which libraries to use:
- function InitGLU: Boolean;
- var
- GLUDumpUnresolvedFunctions,
- GLUInitialized: Boolean;
- // =======================================================
- // GLU consts, types and functions
- // =======================================================
- const
- GLU_TRUE = GL_TRUE;
- GLU_FALSE = GL_FALSE;
- // Normal vectors
- GLU_SMOOTH = 100000;
- GLU_FLAT = 100001;
- GLU_NONE = 100002;
- // Quadric draw styles
- GLU_POINT = 100010;
- GLU_LINE = 100011;
- GLU_FILL = 100012;
- GLU_SILHOUETTE = 100013;
- // Quadric orientation
- GLU_OUTSIDE = 100020;
- GLU_INSIDE = 100021;
- // Tesselator
- GLU_BEGIN = 100100;
- GLU_VERTEX = 100101;
- GLU_END = 100102;
- GLU_ERROR = 100103;
- GLU_EDGE_FLAG = 100104;
- // Contour types
- GLU_CW = 100120;
- GLU_CCW = 100121;
- GLU_INTERIOR = 100122;
- GLU_EXTERIOR = 100123;
- GLU_UNKNOWN = 100124;
- // Tesselation errors
- GLU_TESS_ERROR1 = 100151; // missing gluEndPolygon
- GLU_TESS_ERROR2 = 100152; // missing gluBeginPolygon
- GLU_TESS_ERROR3 = 100153; // misoriented contour
- GLU_TESS_ERROR4 = 100154; // vertex/edge intersection
- GLU_TESS_ERROR5 = 100155; // misoriented or self-intersecting loops
- GLU_TESS_ERROR6 = 100156; // coincident vertices
- GLU_TESS_ERROR7 = 100157; // all vertices collinear
- GLU_TESS_ERROR8 = 100158; // intersecting edges
- GLU_TESS_ERROR9 = 100159; // not coplanar contours
- // NURBS
- GLU_AUTO_LOAD_MATRIX = 100200;
- GLU_CULLING = 100201;
- GLU_PARAMETRIC_TOLERANCE = 100202;
- GLU_SAMPLING_TOLERANCE = 100203;
- GLU_DISPLAY_MODE = 100204;
- GLU_SAMPLING_METHOD = 100205;
- GLU_U_STEP = 100206;
- GLU_V_STEP = 100207;
- GLU_PATH_LENGTH = 100215;
- GLU_PARAMETRIC_ERROR = 100216;
- GLU_DOMAIN_DISTANCE = 100217;
- GLU_MAP1_TRIM_2 = 100210;
- GLU_MAP1_TRIM_3 = 100211;
- GLU_OUTLINE_POLYGON = 100240;
- GLU_OUTLINE_PATCH = 100241;
- GLU_NURBS_ERROR1 = 100251; // spline order un-supported
- GLU_NURBS_ERROR2 = 100252; // too few knots
- GLU_NURBS_ERROR3 = 100253; // valid knot range is empty
- GLU_NURBS_ERROR4 = 100254; // decreasing knot sequence
- GLU_NURBS_ERROR5 = 100255; // knot multiplicity > spline order
- GLU_NURBS_ERROR6 = 100256; // endcurve() must follow bgncurve()
- GLU_NURBS_ERROR7 = 100257; // bgncurve() must precede endcurve()
- GLU_NURBS_ERROR8 = 100258; // ctrlarray or knot vector is NULL
- GLU_NURBS_ERROR9 = 100259; // cannot draw pwlcurves
- GLU_NURBS_ERROR10 = 100260; // missing gluNurbsCurve()
- GLU_NURBS_ERROR11 = 100261; // missing gluNurbsSurface()
- GLU_NURBS_ERROR12 = 100262; // endtrim() must precede endsurface()
- GLU_NURBS_ERROR13 = 100263; // bgnsurface() must precede endsurface()
- GLU_NURBS_ERROR14 = 100264; // curve of improper type passed as trim curve
- GLU_NURBS_ERROR15 = 100265; // bgnsurface() must precede bgntrim()
- GLU_NURBS_ERROR16 = 100266; // endtrim() must follow bgntrim()
- GLU_NURBS_ERROR17 = 100267; // bgntrim() must precede endtrim()*/
- GLU_NURBS_ERROR18 = 100268; // invalid or missing trim curve*/
- GLU_NURBS_ERROR19 = 100269; // bgntrim() must precede pwlcurve()
- GLU_NURBS_ERROR20 = 100270; // pwlcurve referenced twice*/
- GLU_NURBS_ERROR21 = 100271; // pwlcurve and nurbscurve mixed
- GLU_NURBS_ERROR22 = 100272; // improper usage of trim data type
- GLU_NURBS_ERROR23 = 100273; // nurbscurve referenced twice
- GLU_NURBS_ERROR24 = 100274; // nurbscurve and pwlcurve mixed
- GLU_NURBS_ERROR25 = 100275; // nurbssurface referenced twice
- GLU_NURBS_ERROR26 = 100276; // invalid property
- GLU_NURBS_ERROR27 = 100277; // endsurface() must follow bgnsurface()
- GLU_NURBS_ERROR28 = 100278; // intersecting or misoriented trim curves
- GLU_NURBS_ERROR29 = 100279; // intersecting trim curves
- GLU_NURBS_ERROR30 = 100280; // UNUSED
- GLU_NURBS_ERROR31 = 100281; // unconnected trim curves
- GLU_NURBS_ERROR32 = 100282; // unknown knot error
- GLU_NURBS_ERROR33 = 100283; // negative vertex count encountered
- GLU_NURBS_ERROR34 = 100284; // negative byte-stride
- GLU_NURBS_ERROR35 = 100285; // unknown type descriptor
- GLU_NURBS_ERROR36 = 100286; // null control point reference
- GLU_NURBS_ERROR37 = 100287; // duplicate point on pwlcurve
- // Errors
- GLU_INVALID_ENUM = 100900;
- GLU_INVALID_VALUE = 100901;
- GLU_OUT_OF_MEMORY = 100902;
- GLU_INCOMPATIBLE_GL_VERSION = 100903;
- // New in GLU 1.1
- GLU_VERSION = 100800;
- GLU_EXTENSIONS = 100801;
- type
- PGLUquadricObj = ^TGLUquadricObj;
- TGLUquadricObj = record end;
- PGLUtriangulatorObj = ^TGLUtriangulatorObj;
- TGLUtriangulatorObj = record end;
- PGLUnurbsObj = ^TGLUnurbsObj;
- TGLUnurbsObj = record end;
- TGLUQuadricCallback = procedure; cdecl;
- TGLUNurbsCallback = procedure; cdecl;
- TGLUTessCallback = procedure; cdecl;
- TGLUViewport = array[0..3] of LongInt;
- TGLUMatrixd = array[0..15] of Double;
- TGLUMatrixf = array[0..15] of Single;
- TGLUVectord = array[0..2] of Double;
- var
- // Miscellaneous functions
- gluLookAt: procedure(eye, eyey, eyez, centerx, centery, centerz, upx, upy, upz: Double); glu_dll
- gluOrtho2D: procedure(left, right, bottom, top: Double); glu_dll
- gluPerspective: procedure(fovy, aspect, zNear, zFar: Double); glu_dll
- gluPickMatrix: procedure(x, y, width, height: Double; const viewport: TGLUViewport); glu_dll
- gluProject: procedure(objx, objy, objz: Double; const modelMatrix, projMatrix: TGLUMatrixd; const viewport: TGLUViewport; winx, winy, winz: Double); glu_dll
- gluUnProject: procedure(winx, winy, winz: Double; const modelMatrix, projMatrix: TGLUMatrixd; const viewport: TGLUViewport; objx, objy, objz: Double); glu_dll
- gluErrorString: procedure(errorCode: GLenum); glu_dll
- // Mipmapping and image scaling
- gluScaleImage: procedure(format: GLenum; within, heightin: LongInt; typein: GLenum; var datain; widthout, heightout: LongInt; typeout: GLenum; var dataout); glu_dll
- gluBuild1DMipmaps: procedure(target: GLenum; components, width: LongInt; format, AType: GLEnum; var data); glu_dll
- gluBuild2DMipmaps: procedure(target: GLenum; components, width, height: LongInt; format, AType: GLEnum; var data); glu_dll
- // Quadrics
- gluNewQuadric: function: PGLUquadricObj; glu_dll
- gluDeleteQuadric: procedure(state: PGLUquadricObj); glu_dll
- gluQuadricDrawStyle: procedure(quadObject: PGLUquadricObj; drawStyle: GLenum); glu_dll
- gluQuadricOrientation: procedure(quadObject: PGLUquadricObj; orientation: GLenum); glu_dll
- gluQuadricNormals: procedure(quadObject: PGLUquadricObj; normals: GLenum); glu_dll
- gluQuadricTexture: procedure(quadObject: PGLUquadricObj; textureCoords: Boolean); glu_dll
- gluQuadricCallback: procedure(quadObject: PGLUquadricObj; which: GLenum; fn: TGLUQuadricCallback); glu_dll
- gluCylinder: procedure(qobj: PGLUquadricObj; baseRadius, topRadius, height: Double; slices, stacks: LongInt); glu_dll
- gluSphere: procedure(qobj: PGLUquadricObj; radius: Double; slices, stacks: LongInt); glu_dll
- gluDisk: procedure(qobj: PGLUquadricObj; innerRadius, outerRadius: Double; slices, loops: LongInt); glu_dll
- gluPartialDisk: procedure(qobj: PGLUquadricObj; innerRadius, outerRadius: Double; slices, loops: LongInt; startAngle, sweepAngle: Double); glu_dll
- // Nurbs
- gluNewNurbsRenderer: function: PGLUnurbsObj; glu_dll
- gluDeleteNurbsRenderer: procedure(nobj: PGLUnurbsObj); glu_dll
- gluLoadSamplingMatrices: procedure(nobj: PGLUnurbsObj; const modelMatrix, projMatrix: TGLUMatrixf; const viewport: TGLUViewport); glu_dll
- gluNurbsProperty: procedure(nobj: PGLUnurbsObj; AProperty: GLenum; value: Single); glu_dll
- gluGetNurbsProperty: procedure(nobj: PGLUnurbsObj; AProperty: GLEnum; var value: Single); glu_dll
- gluBeginCurve: procedure(nobj: PGLUnurbsObj); glu_dll
- gluEndCurve: procedure(nobj: PGLUnurbsObj); glu_dll
- gluNurbsCurve: procedure(nobj: PGLUnurbsObj; nknots: LongInt; var know: Single; stride: LongInt; var ctlarray: Single; order: LongInt; AType: GLenum); glu_dll
- gluBeginSurface: procedure(nobj: PGLUnurbsObj); glu_dll
- gluEndSurface: procedure(nobj: PGLUnurbsObj); glu_dll
- gluNurbsSurface: procedure(nobj: PGLUnurbsObj; sknot_count: LongInt; var sknot: Single; tknot_count: LongInt; var tknot: Single; s_stride, t_stride: LongInt; var ctlarray: Single; sorder, torder: LongInt; AType: GLenum); glu_dll
- gluBeginTrim: procedure(nobj: PGLUnurbsObj); glu_dll
- gluEndTrim: procedure(nobj: PGLUnurbsObj); glu_dll
- gluPwlCurve: procedure(nobj: PGLUnurbsObj; count: LongInt; var AArray: Single; stride: LongInt; AType: GLenum); glu_dll
- gluNurbsCallback: procedure(nobj: PGLUnurbsObj; which: GLenum; fn: TGLUNurbsCallback); glu_dll
- // Polygon tesselation
- gluNewTess: function: PGLUtriangulatorObj; glu_dll
- gluTessCallback: procedure(tobj: PGLUtriangulatorObj; which: GLenum; fn: TGLUTessCallback); glu_dll
- gluDeleteTess: procedure(tobj: PGLUtriangulatorObj); glu_dll
- gluBeginPolygon: procedure(tobj: PGLUtriangulatorObj); glu_dll
- gluEndPolygon: procedure(tobj: PGLUtriangulatorObj); glu_dll
- gluNextContour: procedure(tobj: PGLUtriangulatorObj; AType: GLenum); glu_dll
- gluTessVertex: procedure(tobj: PGLUtriangulatorObj; v: TGLUVectord; var data); glu_dll
- // New functions in GLU 1.1
- gluGetString: function(name: GLenum): PChar; glu_dll
- // =======================================================
- //
- // =======================================================
- implementation
- type
- HInstance = LongWord;
- var
- libGLU : HInstance;
- function GetProc(handle: HInstance; name: PChar): Pointer;
- begin
- Result := GetProcAddress(handle, name);
- if (Result = nil) and GLUDumpUnresolvedFunctions then
- WriteLn('Unresolved: ', name);
- end;
- function InitGLUFromLibrary(libname: PChar): Boolean;
- begin
- Result := False;
- libGLU := LoadLibrary(libname);
- if libGLU = 0 then exit;
- // Miscellaneous functions
- gluLookAt := GetProc(libGLU, 'gluLookAt');
- gluOrtho2D := GetProc(libGLU, 'gluOrtho2D');
- gluPerspective := GetProc(libGLU, 'gluPerspective');
- gluPickMatrix := GetProc(libGLU, 'gluPickMatrix');
- gluProject := GetProc(libGLU, 'gluProject');
- gluUnProject := GetProc(libGLU, 'gluUnProject');
- gluErrorString := GetProc(libGLU, 'gluErrorString');
- // Mipmapping and image scaling
- gluScaleImage := GetProc(libGLU, 'gluScaleImage');
- gluBuild1DMipmaps := GetProc(libGLU, 'gluBuild1DMipmaps');
- gluBuild2DMipmaps := GetProc(libGLU, 'gluBuild2DMipmaps');
- // Quadrics
- gluNewQuadric := GetProc(libGLU, 'gluNewQuadric');
- gluDeleteQuadric := GetProc(libGLU, 'gluDeleteQuadric');
- gluQuadricDrawStyle := GetProc(libGLU, 'gluQuadricDrawStyle');
- gluQuadricOrientation := GetProc(libGLU, 'gluQuadricOrientation');
- gluQuadricNormals := GetProc(libGLU, 'gluQuadricNormals');
- gluQuadricTexture := GetProc(libGLU, 'gluQuadricTexture');
- gluQuadricCallback := GetProc(libGLU, 'gluQuadricCallback');
- gluCylinder := GetProc(libGLU, 'gluCylinder');
- gluSphere := GetProc(libGLU, 'gluSphere');
- gluDisk := GetProc(libGLU, 'gluDisk');
- gluPartialDisk := GetProc(libGLU, 'gluPartialDisk');
- // Nurbs
- gluNewNurbsRenderer := GetProc(libGLU, 'gluNewNurbsRenderer');
- gluDeleteNurbsRenderer := GetProc(libGLU, 'gluDeleteNurbsRenderer');
- gluLoadSamplingMatrices := GetProc(libGLU, 'gluLoadSamplingMatrices');
- gluNurbsProperty := GetProc(libGLU, 'gluNurbsProperty');
- gluGetNurbsProperty := GetProc(libGLU, 'gluGetNurbsProperty');
- gluBeginCurve := GetProc(libGLU, 'gluBeginCurve');
- gluEndCurve := GetProc(libGLU, 'gluEndCurve');
- gluNurbsCurve := GetProc(libGLU, 'gluNurbsCurve');
- gluBeginSurface := GetProc(libGLU, 'gluBeginSurface');
- gluEndSurface := GetProc(libGLU, 'gluEndSurface');
- gluNurbsSurface := GetProc(libGLU, 'gluNurbsSurface');
- gluBeginTrim := GetProc(libGLU, 'gluBeginTrim');
- gluEndTrim := GetProc(libGLU, 'gluEndTrim');
- gluPwlCurve := GetProc(libGLU, 'gluPwlCurve');
- gluNurbsCallback := GetProc(libGLU, 'gluNurbsCallback');
- // Polygon tesselation
- gluNewTess := GetProc(libGLU, 'gluNewTess');
- gluTessCallback := GetProc(libGLU, 'gluTessCallback');
- gluDeleteTess := GetProc(libGLU, 'gluDeleteTess');
- gluBeginPolygon := GetProc(libGLU, 'gluBeginPolygon');
- gluEndPolygon := GetProc(libGLU, 'gluEndPolygon');
- gluNextContour := GetProc(libGLU, 'gluNextContour');
- gluTessVertex := GetProc(libGLU, 'gluTessVertex');
- // New functions in GLU 1.1
- gluGetString := GetProc(libGLU, 'gluGetString');
- GLUInitialized := True;
- Result := True;
- end;
- function InitGLU: Boolean;
- begin
- Result := InitGLUFromLibrary('glu32.dll');
- end;
- initialization
- InitGl;
- finalization
- if libGLU <> 0 then FreeLibrary(libGLU);
- end.
- {
- $Log$
- Revision 1.3 2000-10-01 22:17:59 peter
- * new bounce demo
- Revision 1.1.2.2 2000/10/01 22:12:28 peter
- * new demo
- Revision 1.1 2000/07/13 06:34:18 michael
- + Initial import
- Revision 1.1 2000/05/31 00:35:14 alex
- added working templates
- }
- {
- $Log$
- Revision 1.3 2000-10-01 22:17:59 peter
- * new bounce demo
- Revision 1.1.2.2 2000/10/01 22:12:28 peter
- * new demo
- }
|