glu.pp 22 KB

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