glu.pp 22 KB

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