glu.pp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. {
  2. * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
  3. * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
  4. *
  5. * Permission is hereby granted, free of charge, to any person obtaining a
  6. * copy of this software and associated documentation files (the "Software"),
  7. * to deal in the Software without restriction, including without limitation
  8. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  9. * and/or sell copies of the Software, and to permit persons to whom the
  10. * Software is furnished to do so, subject to the following conditions:
  11. *
  12. * The above copyright notice including the dates of first publication and
  13. * either this permission notice or a reference to
  14. * http://oss.sgi.com/projects/FreeB/
  15. * shall be included in all copies or substantial portions of the Software.
  16. *
  17. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  20. * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  21. * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
  22. * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  23. * SOFTWARE.
  24. *
  25. * Except as contained in this notice, the name of Silicon Graphics, Inc.
  26. * shall not be used in advertising or otherwise to promote the sale, use or
  27. * other dealings in this Software without prior written authorization from
  28. * Silicon Graphics, Inc.
  29. }
  30. {$MACRO ON}
  31. {$MODE OBJFPC}
  32. {$IFDEF Windows}
  33. {$DEFINE extdecl := stdcall}
  34. {$ELSE}
  35. {$DEFINE extdecl := cdecl}
  36. {$ENDIF}
  37. {$IFDEF MORPHOS}
  38. {$INLINE ON}
  39. {$DEFINE GLU_UNIT}
  40. {$ENDIF}
  41. unit glu;
  42. interface
  43. {
  44. Automatically converted by H2Pas 1.0.0 from out.h
  45. The following command line parameters were used:
  46. -P
  47. -D
  48. -l
  49. glu.dll
  50. out
  51. -o
  52. glu.pp
  53. }
  54. uses
  55. SysUtils,
  56. {$IFDEF Windows}
  57. Windows,
  58. {$ELSE}
  59. {$IFDEF MORPHOS}
  60. TinyGL,
  61. {$ENDIF}
  62. {$ENDIF}
  63. GL;
  64. Const
  65. {$IFDEF Windows}
  66. GLU_Lib = 'glu32.dll';
  67. {$ELSE}
  68. {$IFDEF OS2}
  69. GLU_Lib = 'opengl.dll';
  70. {$ELSE OS2}
  71. {$ifdef darwin}
  72. GLU_LIB = '/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib';
  73. {$else}
  74. {$IFDEF haiku}
  75. GLU_LIB = 'libGLU.so';
  76. {$ELSE}
  77. {$ifdef MorphOS}
  78. GLU_LIB = 'tinygl.library';
  79. {$else}
  80. GLU_LIB = 'libGLU.so.1';
  81. {$endif}
  82. {$ENDIF}
  83. {$ENDIF}
  84. {$ENDIF OS2}
  85. {$endif}
  86. type
  87. TViewPortArray = array [0..3] of GLint;
  88. T16dArray = array [0..15] of GLdouble;
  89. T3dArray = array [0..2] of GLdouble;
  90. T4pArray = array [0..3] of Pointer;
  91. T4fArray = array [0..3] of GLfloat;
  92. const
  93. GLU_EXT_object_space_tess = 1;
  94. GLU_EXT_nurbs_tessellator = 1;
  95. { Boolean }
  96. GLU_FALSE = 0;
  97. GLU_TRUE = 1;
  98. { Version }
  99. GLU_VERSION_1_1 = 1;
  100. GLU_VERSION_1_2 = 1;
  101. GLU_VERSION_1_3 = 1;
  102. { StringName }
  103. GLU_VERSION = 100800;
  104. GLU_EXTENSIONS = 100801;
  105. { ErrorCode }
  106. GLU_INVALID_ENUM = 100900;
  107. GLU_INVALID_VALUE = 100901;
  108. GLU_OUT_OF_MEMORY = 100902;
  109. GLU_INCOMPATIBLE_GL_VERSION = 100903;
  110. GLU_INVALID_OPERATION = 100904;
  111. { NurbsDisplay }
  112. { GLU_FILL }
  113. GLU_OUTLINE_POLYGON = 100240;
  114. GLU_OUTLINE_PATCH = 100241;
  115. { NurbsCallback }
  116. GLU_NURBS_ERROR = 100103;
  117. GLU_ERROR = 100103;
  118. GLU_NURBS_BEGIN = 100164;
  119. GLU_NURBS_BEGIN_EXT = 100164;
  120. GLU_NURBS_VERTEX = 100165;
  121. GLU_NURBS_VERTEX_EXT = 100165;
  122. GLU_NURBS_NORMAL = 100166;
  123. GLU_NURBS_NORMAL_EXT = 100166;
  124. GLU_NURBS_COLOR = 100167;
  125. GLU_NURBS_COLOR_EXT = 100167;
  126. GLU_NURBS_TEXTURE_COORD = 100168;
  127. GLU_NURBS_TEX_COORD_EXT = 100168;
  128. GLU_NURBS_END = 100169;
  129. GLU_NURBS_END_EXT = 100169;
  130. GLU_NURBS_BEGIN_DATA = 100170;
  131. GLU_NURBS_BEGIN_DATA_EXT = 100170;
  132. GLU_NURBS_VERTEX_DATA = 100171;
  133. GLU_NURBS_VERTEX_DATA_EXT = 100171;
  134. GLU_NURBS_NORMAL_DATA = 100172;
  135. GLU_NURBS_NORMAL_DATA_EXT = 100172;
  136. GLU_NURBS_COLOR_DATA = 100173;
  137. GLU_NURBS_COLOR_DATA_EXT = 100173;
  138. GLU_NURBS_TEXTURE_COORD_DATA = 100174;
  139. GLU_NURBS_TEX_COORD_DATA_EXT = 100174;
  140. GLU_NURBS_END_DATA = 100175;
  141. GLU_NURBS_END_DATA_EXT = 100175;
  142. { NurbsError }
  143. GLU_NURBS_ERROR1 = 100251;
  144. GLU_NURBS_ERROR2 = 100252;
  145. GLU_NURBS_ERROR3 = 100253;
  146. GLU_NURBS_ERROR4 = 100254;
  147. GLU_NURBS_ERROR5 = 100255;
  148. GLU_NURBS_ERROR6 = 100256;
  149. GLU_NURBS_ERROR7 = 100257;
  150. GLU_NURBS_ERROR8 = 100258;
  151. GLU_NURBS_ERROR9 = 100259;
  152. GLU_NURBS_ERROR10 = 100260;
  153. GLU_NURBS_ERROR11 = 100261;
  154. GLU_NURBS_ERROR12 = 100262;
  155. GLU_NURBS_ERROR13 = 100263;
  156. GLU_NURBS_ERROR14 = 100264;
  157. GLU_NURBS_ERROR15 = 100265;
  158. GLU_NURBS_ERROR16 = 100266;
  159. GLU_NURBS_ERROR17 = 100267;
  160. GLU_NURBS_ERROR18 = 100268;
  161. GLU_NURBS_ERROR19 = 100269;
  162. GLU_NURBS_ERROR20 = 100270;
  163. GLU_NURBS_ERROR21 = 100271;
  164. GLU_NURBS_ERROR22 = 100272;
  165. GLU_NURBS_ERROR23 = 100273;
  166. GLU_NURBS_ERROR24 = 100274;
  167. GLU_NURBS_ERROR25 = 100275;
  168. GLU_NURBS_ERROR26 = 100276;
  169. GLU_NURBS_ERROR27 = 100277;
  170. GLU_NURBS_ERROR28 = 100278;
  171. GLU_NURBS_ERROR29 = 100279;
  172. GLU_NURBS_ERROR30 = 100280;
  173. GLU_NURBS_ERROR31 = 100281;
  174. GLU_NURBS_ERROR32 = 100282;
  175. GLU_NURBS_ERROR33 = 100283;
  176. GLU_NURBS_ERROR34 = 100284;
  177. GLU_NURBS_ERROR35 = 100285;
  178. GLU_NURBS_ERROR36 = 100286;
  179. GLU_NURBS_ERROR37 = 100287;
  180. { NurbsProperty }
  181. GLU_AUTO_LOAD_MATRIX = 100200;
  182. GLU_CULLING = 100201;
  183. GLU_SAMPLING_TOLERANCE = 100203;
  184. GLU_DISPLAY_MODE = 100204;
  185. GLU_PARAMETRIC_TOLERANCE = 100202;
  186. GLU_SAMPLING_METHOD = 100205;
  187. GLU_U_STEP = 100206;
  188. GLU_V_STEP = 100207;
  189. GLU_NURBS_MODE = 100160;
  190. GLU_NURBS_MODE_EXT = 100160;
  191. GLU_NURBS_TESSELLATOR = 100161;
  192. GLU_NURBS_TESSELLATOR_EXT = 100161;
  193. GLU_NURBS_RENDERER = 100162;
  194. GLU_NURBS_RENDERER_EXT = 100162;
  195. { NurbsSampling }
  196. GLU_OBJECT_PARAMETRIC_ERROR = 100208;
  197. GLU_OBJECT_PARAMETRIC_ERROR_EXT = 100208;
  198. GLU_OBJECT_PATH_LENGTH = 100209;
  199. GLU_OBJECT_PATH_LENGTH_EXT = 100209;
  200. GLU_PATH_LENGTH = 100215;
  201. GLU_PARAMETRIC_ERROR = 100216;
  202. GLU_DOMAIN_DISTANCE = 100217;
  203. { NurbsTrim }
  204. GLU_MAP1_TRIM_2 = 100210;
  205. GLU_MAP1_TRIM_3 = 100211;
  206. { QuadricDrawStyle }
  207. GLU_POINT = 100010;
  208. GLU_LINE = 100011;
  209. GLU_FILL = 100012;
  210. GLU_SILHOUETTE = 100013;
  211. { QuadricCallback }
  212. { GLU_ERROR }
  213. { QuadricNormal }
  214. GLU_SMOOTH = 100000;
  215. GLU_FLAT = 100001;
  216. GLU_NONE = 100002;
  217. { QuadricOrientation }
  218. GLU_OUTSIDE = 100020;
  219. GLU_INSIDE = 100021;
  220. { TessCallback }
  221. GLU_TESS_BEGIN = 100100;
  222. GLU_BEGIN = 100100;
  223. GLU_TESS_VERTEX = 100101;
  224. GLU_VERTEX = 100101;
  225. GLU_TESS_END = 100102;
  226. GLU_END = 100102;
  227. GLU_TESS_ERROR = 100103;
  228. GLU_TESS_EDGE_FLAG = 100104;
  229. GLU_EDGE_FLAG = 100104;
  230. GLU_TESS_COMBINE = 100105;
  231. GLU_TESS_BEGIN_DATA = 100106;
  232. GLU_TESS_VERTEX_DATA = 100107;
  233. GLU_TESS_END_DATA = 100108;
  234. GLU_TESS_ERROR_DATA = 100109;
  235. GLU_TESS_EDGE_FLAG_DATA = 100110;
  236. GLU_TESS_COMBINE_DATA = 100111;
  237. { TessContour }
  238. GLU_CW = 100120;
  239. GLU_CCW = 100121;
  240. GLU_INTERIOR = 100122;
  241. GLU_EXTERIOR = 100123;
  242. GLU_UNKNOWN = 100124;
  243. { TessProperty }
  244. GLU_TESS_WINDING_RULE = 100140;
  245. GLU_TESS_BOUNDARY_ONLY = 100141;
  246. GLU_TESS_TOLERANCE = 100142;
  247. { TessError }
  248. GLU_TESS_ERROR1 = 100151;
  249. GLU_TESS_ERROR2 = 100152;
  250. GLU_TESS_ERROR3 = 100153;
  251. GLU_TESS_ERROR4 = 100154;
  252. GLU_TESS_ERROR5 = 100155;
  253. GLU_TESS_ERROR6 = 100156;
  254. GLU_TESS_ERROR7 = 100157;
  255. GLU_TESS_ERROR8 = 100158;
  256. GLU_TESS_MISSING_BEGIN_POLYGON = 100151;
  257. GLU_TESS_MISSING_BEGIN_CONTOUR = 100152;
  258. GLU_TESS_MISSING_END_POLYGON = 100153;
  259. GLU_TESS_MISSING_END_CONTOUR = 100154;
  260. GLU_TESS_COORD_TOO_LARGE = 100155;
  261. GLU_TESS_NEED_COMBINE_CALLBACK = 100156;
  262. { TessWinding }
  263. GLU_TESS_WINDING_ODD = 100130;
  264. GLU_TESS_WINDING_NONZERO = 100131;
  265. GLU_TESS_WINDING_POSITIVE = 100132;
  266. GLU_TESS_WINDING_NEGATIVE = 100133;
  267. GLU_TESS_WINDING_ABS_GEQ_TWO = 100134;
  268. const
  269. GLU_TESS_MAX_COORD = 1.0e150;
  270. {*********************************************************** }
  271. {$IFDEF FPC}
  272. {$PACKRECORDS C}
  273. {$ENDIF}
  274. Type
  275. GLUnurbs = record end;
  276. GLUquadric = record end;
  277. GLUtesselator = record end;
  278. PGLdouble = ^GLdouble;
  279. PGLfloat = ^GLfloat;
  280. PGLint = ^GLint;
  281. PGLubyte = PAnsiChar; //< this is only used for strings in GLU
  282. PGLUnurbs = ^GLUnurbs;
  283. PGLUquadric = ^GLUquadric;
  284. PGLUtesselator = ^GLUtesselator;
  285. GLUnurbsObj = GLUnurbs;
  286. GLUquadricObj = GLUquadric;
  287. GLUtesselatorObj = GLUtesselator;
  288. GLUtriangulatorObj = GLUtesselator;
  289. _GLUfuncptr = procedure ;extdecl;
  290. TCallback = _GLUfuncptr;
  291. {$IFDEF MORPHOS}
  292. { MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
  293. { systems, so its headers are included here. }
  294. {$INCLUDE tinyglh.inc}
  295. {$ELSE MORPHOS}
  296. var
  297. gluBeginCurve : procedure(nurb:PGLUnurbs);extdecl;
  298. gluBeginPolygon : procedure(tess:PGLUtesselator);extdecl;
  299. gluBeginSurface : procedure(nurb:PGLUnurbs);extdecl;
  300. gluBeginTrim : procedure(nurb:PGLUnurbs);extdecl;
  301. gluBuild1DMipmapLevels : function(target:GLenum; internalFormat:GLint; width:GLsizei; format:GLenum; _type:GLenum;
  302. level:GLint; base:GLint; max:GLint; data:pointer):GLint;extdecl;
  303. gluBuild1DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; format:GLenum; _type:GLenum;
  304. data:pointer):GLint;extdecl;
  305. gluBuild2DMipmapLevels : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; format:GLenum;
  306. _type:GLenum; level:GLint; base:GLint; max:GLint; data:pointer):GLint;extdecl;
  307. gluBuild2DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; format:GLenum;
  308. _type:GLenum; data:pointer):GLint;extdecl;
  309. gluBuild3DMipmapLevels : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; depth:GLsizei;
  310. format:GLenum; _type:GLenum; level:GLint; base:GLint; max:GLint;
  311. data:pointer):GLint;extdecl;
  312. gluBuild3DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; depth:GLsizei;
  313. format:GLenum; _type:GLenum; data:pointer):GLint;extdecl;
  314. gluCheckExtension : function(extName:PGLubyte; extString:PGLubyte):GLboolean;extdecl;
  315. gluCylinder : procedure(quad:PGLUquadric; base:GLdouble; top:GLdouble; height:GLdouble; slices:GLint;
  316. stacks:GLint);extdecl;
  317. gluDeleteNurbsRenderer : procedure(nurb:PGLUnurbs);extdecl;
  318. gluDeleteQuadric : procedure(quad:PGLUquadric);extdecl;
  319. gluDeleteTess : procedure(tess:PGLUtesselator);extdecl;
  320. gluDisk : procedure(quad:PGLUquadric; inner:GLdouble; outer:GLdouble; slices:GLint; loops:GLint);extdecl;
  321. gluEndCurve : procedure(nurb:PGLUnurbs);extdecl;
  322. gluEndPolygon : procedure(tess:PGLUtesselator);extdecl;
  323. gluEndSurface : procedure(nurb:PGLUnurbs);extdecl;
  324. gluEndTrim : procedure(nurb:PGLUnurbs);extdecl;
  325. gluErrorString : function(error:GLenum): PGLubyte;extdecl;
  326. gluGetNurbsProperty : procedure(nurb:PGLUnurbs; _property:GLenum; data:PGLfloat);extdecl;
  327. gluGetString : function(name:GLenum):PGLubyte;extdecl;
  328. gluGetTessProperty : procedure(tess:PGLUtesselator; which:GLenum; data:PGLdouble);extdecl;
  329. gluLoadSamplingMatrices : procedure(nurb:PGLUnurbs; model:PGLfloat; perspective:PGLfloat; view:PGLint);extdecl;
  330. gluLookAt : procedure(eyeX:GLdouble; eyeY:GLdouble; eyeZ:GLdouble; centerX:GLdouble; centerY:GLdouble;
  331. centerZ:GLdouble; upX:GLdouble; upY:GLdouble; upZ:GLdouble);extdecl;
  332. gluNewNurbsRenderer : function:PGLUnurbs;extdecl;
  333. gluNewQuadric : function:PGLUquadric;extdecl;
  334. gluNewTess : function:PGLUtesselator;extdecl;
  335. gluNextContour : procedure(tess:PGLUtesselator; _type:GLenum);extdecl;
  336. gluNurbsCallback : procedure(nurb:PGLUnurbs; which:GLenum; CallBackFunc:_GLUfuncptr);extdecl;
  337. gluNurbsCallbackData : procedure(nurb:PGLUnurbs; userData:PGLvoid);extdecl;
  338. gluNurbsCallbackDataEXT : procedure(nurb:PGLUnurbs; userData:PGLvoid);extdecl;
  339. gluNurbsCurve : procedure(nurb:PGLUnurbs; knotCount:GLint; knots:PGLfloat; stride:GLint; control:PGLfloat;
  340. order:GLint; _type:GLenum);extdecl;
  341. gluNurbsProperty : procedure(nurb:PGLUnurbs; _property:GLenum; value:GLfloat);extdecl;
  342. gluNurbsSurface : procedure(nurb:PGLUnurbs; sKnotCount:GLint; sKnots:PGLfloat; tKnotCount:GLint; tKnots:PGLfloat;
  343. sStride:GLint; tStride:GLint; control:PGLfloat; sOrder:GLint; tOrder:GLint;
  344. _type:GLenum);extdecl;
  345. gluOrtho2D : procedure(left:GLdouble; right:GLdouble; bottom:GLdouble; top:GLdouble);extdecl;
  346. gluPartialDisk : procedure(quad:PGLUquadric; inner:GLdouble; outer:GLdouble; slices:GLint; loops:GLint;
  347. start:GLdouble; sweep:GLdouble);extdecl;
  348. gluPerspective : procedure(fovy:GLdouble; aspect:GLdouble; zNear:GLdouble; zFar:GLdouble);extdecl;
  349. gluPickMatrix : procedure(x:GLdouble; y:GLdouble; delX:GLdouble; delY:GLdouble; viewport:PGLint);extdecl;
  350. gluProject : function(objX:GLdouble; objY:GLdouble; objZ:GLdouble; model:PGLdouble; proj:PGLdouble;
  351. view:PGLint; winX:PGLdouble; winY:PGLdouble; winZ:PGLdouble):GLint;extdecl;
  352. gluPwlCurve : procedure(nurb:PGLUnurbs; count:GLint; data:PGLfloat; stride:GLint; _type:GLenum);extdecl;
  353. gluQuadricCallback : procedure(quad:PGLUquadric; which:GLenum; CallBackFunc:_GLUfuncptr);extdecl;
  354. gluQuadricDrawStyle : procedure(quad:PGLUquadric; draw:GLenum);extdecl;
  355. gluQuadricNormals : procedure(quad:PGLUquadric; normal:GLenum);extdecl;
  356. gluQuadricOrientation : procedure(quad:PGLUquadric; orientation:GLenum);extdecl;
  357. gluQuadricTexture : procedure(quad:PGLUquadric; texture:GLboolean);extdecl;
  358. gluScaleImage : function(format:GLenum; wIn:GLsizei; hIn:GLsizei; typeIn:GLenum; dataIn:pointer;
  359. wOut:GLsizei; hOut:GLsizei; typeOut:GLenum; dataOut:PGLvoid):GLint;extdecl;
  360. gluSphere : procedure(quad:PGLUquadric; radius:GLdouble; slices:GLint; stacks:GLint);extdecl;
  361. gluTessBeginContour : procedure(tess:PGLUtesselator);extdecl;
  362. gluTessBeginPolygon : procedure(tess:PGLUtesselator; data:PGLvoid);extdecl;
  363. gluTessCallback : procedure(tess:PGLUtesselator; which:GLenum; CallBackFunc:_GLUfuncptr);extdecl;
  364. gluTessEndContour : procedure(tess:PGLUtesselator);extdecl;
  365. gluTessEndPolygon : procedure(tess:PGLUtesselator);extdecl;
  366. gluTessNormal : procedure(tess:PGLUtesselator; valueX:GLdouble; valueY:GLdouble; valueZ:GLdouble);extdecl;
  367. gluTessProperty : procedure(tess:PGLUtesselator; which:GLenum; data:GLdouble);extdecl;
  368. gluTessVertex : procedure(tess:PGLUtesselator; location:PGLdouble; data:PGLvoid);extdecl;
  369. gluUnProject : function(winX:GLdouble; winY:GLdouble; winZ:GLdouble; model:PGLdouble; proj:PGLdouble;
  370. view:PGLint; objX:PGLdouble; objY:PGLdouble; objZ:PGLdouble):GLint;extdecl;
  371. gluUnProject4 : function(winX:GLdouble; winY:GLdouble; winZ:GLdouble; clipW:GLdouble; model:PGLdouble;
  372. proj:PGLdouble; view:PGLint; nearVal:GLdouble; farVal:GLdouble; objX:PGLdouble;
  373. objY:PGLdouble; objZ:PGLdouble; objW:PGLdouble):GLint;extdecl;
  374. {$endif}
  375. implementation
  376. {$IFDEF MORPHOS}
  377. { MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
  378. { systems, so its functions are included here. }
  379. {$INCLUDE tinygl.inc}
  380. {$ELSE MORPHOS}
  381. uses
  382. dynlibs;
  383. var
  384. hlib : tlibhandle;
  385. procedure Freeglu;
  386. begin
  387. if (hlib <> 0) then
  388. FreeLibrary(hlib);
  389. gluBeginCurve:=nil;
  390. gluBeginPolygon:=nil;
  391. gluBeginSurface:=nil;
  392. gluBeginTrim:=nil;
  393. gluBuild1DMipmapLevels:=nil;
  394. gluBuild1DMipmaps:=nil;
  395. gluBuild2DMipmapLevels:=nil;
  396. gluBuild2DMipmaps:=nil;
  397. gluBuild3DMipmapLevels:=nil;
  398. gluBuild3DMipmaps:=nil;
  399. gluCheckExtension:=nil;
  400. gluCylinder:=nil;
  401. gluDeleteNurbsRenderer:=nil;
  402. gluDeleteQuadric:=nil;
  403. gluDeleteTess:=nil;
  404. gluDisk:=nil;
  405. gluEndCurve:=nil;
  406. gluEndPolygon:=nil;
  407. gluEndSurface:=nil;
  408. gluEndTrim:=nil;
  409. gluErrorString:=nil;
  410. gluGetNurbsProperty:=nil;
  411. gluGetString:=nil;
  412. gluGetTessProperty:=nil;
  413. gluLoadSamplingMatrices:=nil;
  414. gluLookAt:=nil;
  415. gluNewNurbsRenderer:=nil;
  416. gluNewQuadric:=nil;
  417. gluNewTess:=nil;
  418. gluNextContour:=nil;
  419. gluNurbsCallback:=nil;
  420. gluNurbsCallbackData:=nil;
  421. gluNurbsCallbackDataEXT:=nil;
  422. gluNurbsCurve:=nil;
  423. gluNurbsProperty:=nil;
  424. gluNurbsSurface:=nil;
  425. gluOrtho2D:=nil;
  426. gluPartialDisk:=nil;
  427. gluPerspective:=nil;
  428. gluPickMatrix:=nil;
  429. gluProject:=nil;
  430. gluPwlCurve:=nil;
  431. gluQuadricCallback:=nil;
  432. gluQuadricDrawStyle:=nil;
  433. gluQuadricNormals:=nil;
  434. gluQuadricOrientation:=nil;
  435. gluQuadricTexture:=nil;
  436. gluScaleImage:=nil;
  437. gluSphere:=nil;
  438. gluTessBeginContour:=nil;
  439. gluTessBeginPolygon:=nil;
  440. gluTessCallback:=nil;
  441. gluTessEndContour:=nil;
  442. gluTessEndPolygon:=nil;
  443. gluTessNormal:=nil;
  444. gluTessProperty:=nil;
  445. gluTessVertex:=nil;
  446. gluUnProject:=nil;
  447. gluUnProject4:=nil;
  448. end;
  449. procedure Loadglu(lib : pchar);
  450. begin
  451. Freeglu;
  452. hlib:=LoadLibrary(lib);
  453. if hlib=0 then
  454. raise Exception.Create(format('Could not load library: %s',[lib]));
  455. pointer(gluBeginCurve):=GetProcAddress(hlib,'gluBeginCurve');
  456. pointer(gluBeginPolygon):=GetProcAddress(hlib,'gluBeginPolygon');
  457. pointer(gluBeginSurface):=GetProcAddress(hlib,'gluBeginSurface');
  458. pointer(gluBeginTrim):=GetProcAddress(hlib,'gluBeginTrim');
  459. pointer(gluBuild1DMipmapLevels):=GetProcAddress(hlib,'gluBuild1DMipmapLevels');
  460. pointer(gluBuild1DMipmaps):=GetProcAddress(hlib,'gluBuild1DMipmaps');
  461. pointer(gluBuild2DMipmapLevels):=GetProcAddress(hlib,'gluBuild2DMipmapLevels');
  462. pointer(gluBuild2DMipmaps):=GetProcAddress(hlib,'gluBuild2DMipmaps');
  463. pointer(gluBuild3DMipmapLevels):=GetProcAddress(hlib,'gluBuild3DMipmapLevels');
  464. pointer(gluBuild3DMipmaps):=GetProcAddress(hlib,'gluBuild3DMipmaps');
  465. pointer(gluCheckExtension):=GetProcAddress(hlib,'gluCheckExtension');
  466. pointer(gluCylinder):=GetProcAddress(hlib,'gluCylinder');
  467. pointer(gluDeleteNurbsRenderer):=GetProcAddress(hlib,'gluDeleteNurbsRenderer');
  468. pointer(gluDeleteQuadric):=GetProcAddress(hlib,'gluDeleteQuadric');
  469. pointer(gluDeleteTess):=GetProcAddress(hlib,'gluDeleteTess');
  470. pointer(gluDisk):=GetProcAddress(hlib,'gluDisk');
  471. pointer(gluEndCurve):=GetProcAddress(hlib,'gluEndCurve');
  472. pointer(gluEndPolygon):=GetProcAddress(hlib,'gluEndPolygon');
  473. pointer(gluEndSurface):=GetProcAddress(hlib,'gluEndSurface');
  474. pointer(gluEndTrim):=GetProcAddress(hlib,'gluEndTrim');
  475. pointer(gluErrorString):=GetProcAddress(hlib,'gluErrorString');
  476. pointer(gluGetNurbsProperty):=GetProcAddress(hlib,'gluGetNurbsProperty');
  477. pointer(gluGetString):=GetProcAddress(hlib,'gluGetString');
  478. pointer(gluGetTessProperty):=GetProcAddress(hlib,'gluGetTessProperty');
  479. pointer(gluLoadSamplingMatrices):=GetProcAddress(hlib,'gluLoadSamplingMatrices');
  480. pointer(gluLookAt):=GetProcAddress(hlib,'gluLookAt');
  481. pointer(gluNewNurbsRenderer):=GetProcAddress(hlib,'gluNewNurbsRenderer');
  482. pointer(gluNewQuadric):=GetProcAddress(hlib,'gluNewQuadric');
  483. pointer(gluNewTess):=GetProcAddress(hlib,'gluNewTess');
  484. pointer(gluNextContour):=GetProcAddress(hlib,'gluNextContour');
  485. pointer(gluNurbsCallback):=GetProcAddress(hlib,'gluNurbsCallback');
  486. pointer(gluNurbsCallbackData):=GetProcAddress(hlib,'gluNurbsCallbackData');
  487. pointer(gluNurbsCallbackDataEXT):=GetProcAddress(hlib,'gluNurbsCallbackDataEXT');
  488. pointer(gluNurbsCurve):=GetProcAddress(hlib,'gluNurbsCurve');
  489. pointer(gluNurbsProperty):=GetProcAddress(hlib,'gluNurbsProperty');
  490. pointer(gluNurbsSurface):=GetProcAddress(hlib,'gluNurbsSurface');
  491. pointer(gluOrtho2D):=GetProcAddress(hlib,'gluOrtho2D');
  492. pointer(gluPartialDisk):=GetProcAddress(hlib,'gluPartialDisk');
  493. pointer(gluPerspective):=GetProcAddress(hlib,'gluPerspective');
  494. pointer(gluPickMatrix):=GetProcAddress(hlib,'gluPickMatrix');
  495. pointer(gluProject):=GetProcAddress(hlib,'gluProject');
  496. pointer(gluPwlCurve):=GetProcAddress(hlib,'gluPwlCurve');
  497. pointer(gluQuadricCallback):=GetProcAddress(hlib,'gluQuadricCallback');
  498. pointer(gluQuadricDrawStyle):=GetProcAddress(hlib,'gluQuadricDrawStyle');
  499. pointer(gluQuadricNormals):=GetProcAddress(hlib,'gluQuadricNormals');
  500. pointer(gluQuadricOrientation):=GetProcAddress(hlib,'gluQuadricOrientation');
  501. pointer(gluQuadricTexture):=GetProcAddress(hlib,'gluQuadricTexture');
  502. pointer(gluScaleImage):=GetProcAddress(hlib,'gluScaleImage');
  503. pointer(gluSphere):=GetProcAddress(hlib,'gluSphere');
  504. pointer(gluTessBeginContour):=GetProcAddress(hlib,'gluTessBeginContour');
  505. pointer(gluTessBeginPolygon):=GetProcAddress(hlib,'gluTessBeginPolygon');
  506. pointer(gluTessCallback):=GetProcAddress(hlib,'gluTessCallback');
  507. pointer(gluTessEndContour):=GetProcAddress(hlib,'gluTessEndContour');
  508. pointer(gluTessEndPolygon):=GetProcAddress(hlib,'gluTessEndPolygon');
  509. pointer(gluTessNormal):=GetProcAddress(hlib,'gluTessNormal');
  510. pointer(gluTessProperty):=GetProcAddress(hlib,'gluTessProperty');
  511. pointer(gluTessVertex):=GetProcAddress(hlib,'gluTessVertex');
  512. pointer(gluUnProject):=GetProcAddress(hlib,'gluUnProject');
  513. pointer(gluUnProject4):=GetProcAddress(hlib,'gluUnProject4');
  514. end;
  515. initialization
  516. LoadGLu(GLU_LIB);
  517. finalization
  518. Freeglu;
  519. {$ENDIF MORPHOS}
  520. end.