zgl_glu.pas 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. (*
  2. * Copyright (c) 2021 Serge - SSW
  3. *
  4. * This software is provided 'as-is', without any express or
  5. * implied warranty. In no event will the authors be held
  6. * liable for any damages arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute
  10. * it freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented;
  13. * you must not claim that you wrote the original software.
  14. * If you use this software in a product, an acknowledgment
  15. * in the product documentation would be appreciated but
  16. * is not required.
  17. *
  18. * 2. Altered source versions must be plainly marked as such,
  19. * and must not be misrepresented as being the original software.
  20. *
  21. * 3. This notice may not be removed or altered from any
  22. * source distribution.
  23. *)
  24. unit zgl_glu;
  25. {$I zgl_config.cfg}
  26. {$I GLdefine.cfg}
  27. {$IFDEF UNIX}
  28. {$DEFINE stdcall := cdecl}
  29. {$ENDIF}
  30. interface
  31. uses
  32. zgl_gltypeconst,
  33. {$IfNDef USE_GLES}
  34. zgl_opengl_all
  35. {$Else}
  36. zgl_opengles_all
  37. {$EndIf}
  38. ;
  39. type
  40. TViewPortArray = array [0..3] of GLint;
  41. T16dArray = array [0..15] of GLdouble;
  42. T3dArray = array [0..2] of GLdouble;
  43. T4pArray = array [0..3] of Pointer;
  44. T4fArray = array [0..3] of GLfloat;
  45. const
  46. GLU_TESS_MAX_COORD = 1.0e150;
  47. (* Boolean *)
  48. GLU_FALSE = 0;
  49. GLU_TRUE = 1;
  50. (* StringName *)
  51. GLU_VERSION = 100800;
  52. GLU_EXTENSIONS = 100801;
  53. (* ErrorCode *)
  54. GLU_INVALID_ENUM = 100900;
  55. GLU_INVALID_VALUE = 100901;
  56. GLU_OUT_OF_MEMORY = 100902;
  57. GLU_INCOMPATIBLE_GL_VERSION = 100903;
  58. GLU_INVALID_OPERATION = 100904;
  59. (* NurbsDisplay *)
  60. (* GLU_FILL *)
  61. GLU_OUTLINE_POLYGON = 100240;
  62. GLU_OUTLINE_PATCH = 100241;
  63. (* NurbsCallback *)
  64. GLU_NURBS_ERROR = 100103;
  65. GLU_ERROR = 100103;
  66. GLU_NURBS_BEGIN = 100164;
  67. GLU_NURBS_BEGIN_EXT = 100164;
  68. GLU_NURBS_VERTEX = 100165;
  69. GLU_NURBS_VERTEX_EXT = 100165;
  70. GLU_NURBS_NORMAL = 100166;
  71. GLU_NURBS_NORMAL_EXT = 100166;
  72. GLU_NURBS_COLOR = 100167;
  73. GLU_NURBS_COLOR_EXT = 100167;
  74. GLU_NURBS_TEXTURE_COORD = 100168;
  75. GLU_NURBS_TEX_COORD_EXT = 100168;
  76. GLU_NURBS_END = 100169;
  77. GLU_NURBS_END_EXT = 100169;
  78. GLU_NURBS_BEGIN_DATA = 100170;
  79. GLU_NURBS_BEGIN_DATA_EXT = 100170;
  80. GLU_NURBS_VERTEX_DATA = 100171;
  81. GLU_NURBS_VERTEX_DATA_EXT = 100171;
  82. GLU_NURBS_NORMAL_DATA = 100172;
  83. GLU_NURBS_NORMAL_DATA_EXT = 100172;
  84. GLU_NURBS_COLOR_DATA = 100173;
  85. GLU_NURBS_COLOR_DATA_EXT = 100173;
  86. GLU_NURBS_TEXTURE_COORD_DATA = 100174;
  87. GLU_NURBS_TEX_COORD_DATA_EXT = 100174;
  88. GLU_NURBS_END_DATA = 100175;
  89. GLU_NURBS_END_DATA_EXT = 100175;
  90. (* NurbsError *)
  91. GLU_NURBS_ERROR1 = 100251;
  92. GLU_NURBS_ERROR2 = 100252;
  93. GLU_NURBS_ERROR3 = 100253;
  94. GLU_NURBS_ERROR4 = 100254;
  95. GLU_NURBS_ERROR5 = 100255;
  96. GLU_NURBS_ERROR6 = 100256;
  97. GLU_NURBS_ERROR7 = 100257;
  98. GLU_NURBS_ERROR8 = 100258;
  99. GLU_NURBS_ERROR9 = 100259;
  100. GLU_NURBS_ERROR10 = 100260;
  101. GLU_NURBS_ERROR11 = 100261;
  102. GLU_NURBS_ERROR12 = 100262;
  103. GLU_NURBS_ERROR13 = 100263;
  104. GLU_NURBS_ERROR14 = 100264;
  105. GLU_NURBS_ERROR15 = 100265;
  106. GLU_NURBS_ERROR16 = 100266;
  107. GLU_NURBS_ERROR17 = 100267;
  108. GLU_NURBS_ERROR18 = 100268;
  109. GLU_NURBS_ERROR19 = 100269;
  110. GLU_NURBS_ERROR20 = 100270;
  111. GLU_NURBS_ERROR21 = 100271;
  112. GLU_NURBS_ERROR22 = 100272;
  113. GLU_NURBS_ERROR23 = 100273;
  114. GLU_NURBS_ERROR24 = 100274;
  115. GLU_NURBS_ERROR25 = 100275;
  116. GLU_NURBS_ERROR26 = 100276;
  117. GLU_NURBS_ERROR27 = 100277;
  118. GLU_NURBS_ERROR28 = 100278;
  119. GLU_NURBS_ERROR29 = 100279;
  120. GLU_NURBS_ERROR30 = 100280;
  121. GLU_NURBS_ERROR31 = 100281;
  122. GLU_NURBS_ERROR32 = 100282;
  123. GLU_NURBS_ERROR33 = 100283;
  124. GLU_NURBS_ERROR34 = 100284;
  125. GLU_NURBS_ERROR35 = 100285;
  126. GLU_NURBS_ERROR36 = 100286;
  127. GLU_NURBS_ERROR37 = 100287;
  128. (* NurbsProperty *)
  129. GLU_AUTO_LOAD_MATRIX = 100200;
  130. GLU_CULLING = 100201;
  131. GLU_SAMPLING_TOLERANCE = 100203;
  132. GLU_DISPLAY_MODE = 100204;
  133. GLU_PARAMETRIC_TOLERANCE = 100202;
  134. GLU_SAMPLING_METHOD = 100205;
  135. GLU_U_STEP = 100206;
  136. GLU_V_STEP = 100207;
  137. GLU_NURBS_MODE = 100160;
  138. GLU_NURBS_MODE_EXT = 100160;
  139. GLU_NURBS_TESSELLATOR = 100161;
  140. GLU_NURBS_TESSELLATOR_EXT = 100161;
  141. GLU_NURBS_RENDERER = 100162;
  142. GLU_NURBS_RENDERER_EXT = 100162;
  143. (* NurbsSampling *)
  144. GLU_OBJECT_PARAMETRIC_ERROR = 100208;
  145. GLU_OBJECT_PARAMETRIC_ERROR_EXT = 100208;
  146. GLU_OBJECT_PATH_LENGTH = 100209;
  147. GLU_OBJECT_PATH_LENGTH_EXT = 100209;
  148. GLU_PATH_LENGTH = 100215;
  149. GLU_PARAMETRIC_ERROR = 100216;
  150. GLU_DOMAIN_DISTANCE = 100217;
  151. (* NurbsTrim *)
  152. GLU_MAP1_TRIM_2 = 100210;
  153. GLU_MAP1_TRIM_3 = 100211;
  154. (* QuadricDrawStyle *)
  155. GLU_POINT = 100010;
  156. GLU_LINE = 100011;
  157. GLU_FILL = 100012;
  158. GLU_SILHOUETTE = 100013;
  159. (* QuadricNormal *)
  160. GLU_SMOOTH = 100000;
  161. GLU_FLAT = 100001;
  162. GLU_NONE = 100002;
  163. (* QuadricOrientation *)
  164. GLU_OUTSIDE = 100020;
  165. GLU_INSIDE = 100021;
  166. (* TessCallback *)
  167. GLU_TESS_BEGIN = 100100;
  168. GLU_BEGIN = 100100;
  169. GLU_TESS_VERTEX = 100101;
  170. GLU_VERTEX = 100101;
  171. GLU_TESS_END = 100102;
  172. GLU_END = 100102;
  173. GLU_TESS_ERROR = 100103;
  174. GLU_TESS_EDGE_FLAG = 100104;
  175. GLU_EDGE_FLAG = 100104;
  176. GLU_TESS_COMBINE = 100105;
  177. GLU_TESS_BEGIN_DATA = 100106;
  178. GLU_TESS_VERTEX_DATA = 100107;
  179. GLU_TESS_END_DATA = 100108;
  180. GLU_TESS_ERROR_DATA = 100109;
  181. GLU_TESS_EDGE_FLAG_DATA = 100110;
  182. GLU_TESS_COMBINE_DATA = 100111;
  183. (* TessContour *)
  184. GLU_CW = 100120;
  185. GLU_CCW = 100121;
  186. GLU_INTERIOR = 100122;
  187. GLU_EXTERIOR = 100123;
  188. GLU_UNKNOWN = 100124;
  189. (* TessProperty *)
  190. GLU_TESS_WINDING_RULE = 100140;
  191. GLU_TESS_BOUNDARY_ONLY = 100141;
  192. GLU_TESS_TOLERANCE = 100142;
  193. (* TessError *)
  194. GLU_TESS_ERROR1 = 100151;
  195. GLU_TESS_ERROR2 = 100152;
  196. GLU_TESS_ERROR3 = 100153;
  197. GLU_TESS_ERROR4 = 100154;
  198. GLU_TESS_ERROR5 = 100155;
  199. GLU_TESS_ERROR6 = 100156;
  200. GLU_TESS_ERROR7 = 100157;
  201. GLU_TESS_ERROR8 = 100158;
  202. GLU_TESS_MISSING_BEGIN_POLYGON = 100151;
  203. GLU_TESS_MISSING_BEGIN_CONTOUR = 100152;
  204. GLU_TESS_MISSING_END_POLYGON = 100153;
  205. GLU_TESS_MISSING_END_CONTOUR = 100154;
  206. GLU_TESS_COORD_TOO_LARGE = 100155;
  207. GLU_TESS_NEED_COMBINE_CALLBACK = 100156;
  208. (* TessWinding *)
  209. GLU_TESS_WINDING_ODD = 100130;
  210. GLU_TESS_WINDING_NONZERO = 100131;
  211. GLU_TESS_WINDING_POSITIVE = 100132;
  212. GLU_TESS_WINDING_NEGATIVE = 100133;
  213. GLU_TESS_WINDING_ABS_GEQ_TWO = 100134;
  214. type
  215. GLUnurbs = record end;
  216. GLUquadric = record end;
  217. GLUtesselator = record end;
  218. PGLUnurbs = ^GLUnurbs;
  219. PGLUquadric = ^GLUquadric;
  220. PGLUtesselator = ^GLUtesselator;
  221. GLUnurbsObj = GLUnurbs;
  222. GLUquadricObj = GLUquadric;
  223. GLUtesselatorObj = GLUtesselator;
  224. GLUtriangulatorObj = GLUtesselator;
  225. _GLUfuncptr = procedure ;stdcall;
  226. TCallback = _GLUfuncptr;
  227. PGLchar = PAnsiChar;
  228. {$IfNDef USE_GLES}
  229. procedure gluPerspective(fovy, aspect, zNear, zFar: GLdouble); stdcall; external libGLU;
  230. function gluBuild2DMipmaps(target: GLenum; components, width, height: GLint; format, atype: GLenum; const data: Pointer): Integer; stdcall; external libGLU;
  231. {$EndIf}
  232. // Triangulation
  233. {$IFDEF USE_TRIANGULATION}
  234. procedure gluDeleteTess(tess: PGLUtesselator); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  235. function gluErrorString(error: GLenum): PAnsiChar; stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  236. function gluNewTess: PGLUtesselator; stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  237. procedure gluTessBeginContour(tess: PGLUtesselator); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  238. procedure gluTessBeginPolygon(tess: PGLUtesselator; data: Pointer); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  239. procedure gluTessCallback(tess: PGLUtesselator; which: GLenum; fn: Pointer); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  240. procedure gluTessEndContour(tess: PGLUtesselator); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  241. procedure gluTessEndPolygon(tess: PGLUtesselator); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  242. procedure gluTessVertex(tess: PGLUtesselator; const coords: TVector3d; data: Pointer); stdcall external {$IfNDef USE_GLES}libGLU{$Else}'libGLU'{$EndIf};
  243. {$IfNDef USE_GLES} // ???
  244. procedure gluTessNormal(tess: PGLUtesselator; valueX: GLdouble; valueY: GLdouble; valueZ: GLdouble); stdcall external libGLU;
  245. procedure gluTessProperty(tess: PGLUtesselator; which: GLenum; data: GLdouble); stdcall external libGLU;
  246. function gluGetString(name: GLenum): PAnsiChar; stdcall external libGLU;
  247. {$ENDIF}{$ENDIF}
  248. {$IfDef USE_FULL_GLU}
  249. procedure gluBeginCurve(nurb: PGLUnurbs); stdcall external libGLU;
  250. procedure gluBeginPolygon(tess: PGLUtesselator); stdcall external libGLU;
  251. procedure gluBeginSurface(nurb: PGLUnurbs); stdcall external libGLU;
  252. procedure gluBeginTrim(nurb: PGLUnurbs); stdcall external libGLU;
  253. function gluBuild1DMipmapLevels(target: GLenum; internalFormat: GLint; width: GLsizei; format: GLenum; _type: GLenum;
  254. level: GLint; base: GLint; max: GLint; data: pointer): GLint; stdcall external libGLU;
  255. function gluBuild1DMipmaps(target: GLenum; internalFormat: GLint; width: GLsizei; format: GLenum; _type: GLenum;
  256. data: pointer): GLint; stdcall external libGLU;
  257. function gluBuild2DMipmapLevels(target: GLenum; internalFormat: GLint; width: GLsizei; height: GLsizei; format: GLenum;
  258. _type: GLenum; level: GLint; base: GLint; max: GLint; data: pointer):GLint; stdcall external libGLU;
  259. // gluBuild2DMipmaps : function(target:GLenum; internalFormat:GLint; width:GLsizei; height:GLsizei; format:GLenum;
  260. // _type:GLenum; data:pointer):GLint; stdcall external libGLU;
  261. function gluBuild3DMipmapLevels(target: GLenum; internalFormat: GLint; width: GLsizei; height: GLsizei; depth: GLsizei;
  262. format: GLenum; _type: GLenum; level: GLint; base: GLint; max: GLint; data: pointer): GLint; stdcall external libGLU;
  263. function gluBuild3DMipmaps(target: GLenum; internalFormat: GLint; width: GLsizei; height: GLsizei; depth: GLsizei;
  264. format: GLenum; _type: GLenum; data: pointer): GLint; stdcall external libGLU;
  265. function gluCheckExtension(extName: PGLubyte; extString: PGLubyte): GLboolean; stdcall external libGLU;
  266. procedure gluCylinder(quad:PGLUquadric; base:GLdouble; top:GLdouble; height:GLdouble; slices:GLint;
  267. stacks:GLint); stdcall external libGLU;
  268. procedure gluDeleteNurbsRenderer(nurb: PGLUnurbs); stdcall external libGLU;
  269. procedure gluDeleteQuadric(quad: PGLUquadric); stdcall external libGLU;
  270. procedure gluDisk(quad: PGLUquadric; inner: GLdouble; outer: GLdouble; slices: GLint; loops: GLint); stdcall external libGLU;
  271. procedure gluEndCurve(nurb: PGLUnurbs); stdcall external libGLU;
  272. procedure gluEndPolygon(tess: PGLUtesselator); stdcall external libGLU;
  273. procedure gluEndSurface(nurb: PGLUnurbs); stdcall external libGLU;
  274. procedure gluEndTrim(nurb: PGLUnurbs); stdcall external libGLU;
  275. procedure gluGetNurbsProperty(nurb: PGLUnurbs; _property: GLenum; data: PGLfloat); stdcall external libGLU;
  276. procedure gluGetTessProperty(tess: PGLUtesselator; which: GLenum; data: PGLdouble); stdcall external libGLU;
  277. procedure gluLoadSamplingMatrices(nurb: PGLUnurbs; model: PGLfloat; perspective: PGLfloat; view: PGLint); stdcall external libGLU;
  278. procedure gluLookAt(eyeX: GLdouble; eyeY: GLdouble; eyeZ: GLdouble; centerX: GLdouble; centerY: GLdouble;
  279. centerZ: GLdouble; upX: GLdouble; upY: GLdouble; upZ: GLdouble); stdcall external libGLU;
  280. function gluNewNurbsRenderer: PGLUnurbs; stdcall external libGLU;
  281. function gluNewQuadric: PGLUquadric; stdcall external libGLU;
  282. procedure gluNextContour(tess: PGLUtesselator; _type: GLenum); stdcall external libGLU;
  283. procedure gluNurbsCallback(nurb: PGLUnurbs; which: GLenum; CallBackFunc: _GLUfuncptr); stdcall external libGLU;
  284. procedure gluNurbsCallbackData(nurb: PGLUnurbs; userData: PGLvoid); stdcall external libGLU;
  285. procedure gluNurbsCallbackDataEXT(nurb: PGLUnurbs; userData: PGLvoid); stdcall external libGLU;
  286. procedure gluNurbsCurve(nurb: PGLUnurbs; knotCount: GLint; knots: PGLfloat; stride: GLint; control: PGLfloat;
  287. order: GLint; _type: GLenum); stdcall external libGLU;
  288. procedure gluNurbsProperty(nurb: PGLUnurbs; _property: GLenum; value: GLfloat); stdcall external libGLU;
  289. procedure gluNurbsSurface(nurb: PGLUnurbs; sKnotCount: GLint; sKnots: PGLfloat; tKnotCount: GLint; tKnots: PGLfloat;
  290. sStride: GLint; tStride: GLint; control: PGLfloat; sOrder: GLint; tOrder: GLint; _type: GLenum); stdcall external libGLU;
  291. procedure gluOrtho2D(left: GLdouble; right: GLdouble; bottom: GLdouble; top: GLdouble); stdcall external libGLU;
  292. procedure gluPartialDisk(quad: PGLUquadric; inner: GLdouble; outer: GLdouble; slices: GLint; loops: GLint;
  293. start: GLdouble; sweep: GLdouble); stdcall external libGLU;
  294. procedure gluPickMatrix(x: GLdouble; y: GLdouble; delX: GLdouble; delY: GLdouble; viewport: PGLint); stdcall external libGLU;
  295. function gluProject(objX: GLdouble; objY: GLdouble; objZ: GLdouble; model: PGLdouble; proj: PGLdouble;
  296. view: PGLint; winX: PGLdouble; winY: PGLdouble; winZ: PGLdouble): GLint; stdcall external libGLU;
  297. procedure gluPwlCurve(nurb: PGLUnurbs; count: GLint; data: PGLfloat; stride: GLint; _type: GLenum); stdcall external libGLU;
  298. procedure gluQuadricCallback(quad: PGLUquadric; which: GLenum; CallBackFunc: _GLUfuncptr); stdcall external libGLU;
  299. procedure gluQuadricDrawStyle(quad: PGLUquadric; draw: GLenum); stdcall external libGLU;
  300. procedure gluQuadricNormals(quad: PGLUquadric; normal: GLenum); stdcall external libGLU;
  301. procedure gluQuadricOrientation(quad: PGLUquadric; orientation: GLenum); stdcall external libGLU;
  302. procedure gluQuadricTexture(quad: PGLUquadric; texture: GLboolean); stdcall external libGLU;
  303. function gluScaleImage(format: GLenum; wIn: GLsizei; hIn: GLsizei; typeIn: GLenum; dataIn: pointer;
  304. wOut: GLsizei; hOut: GLsizei; typeOut: GLenum; dataOut: PGLvoid): GLint; stdcall external libGLU;
  305. procedure gluSphere(quad: PGLUquadric; radius: GLdouble; slices: GLint; stacks: GLint); stdcall external libGLU;
  306. function gluUnProject(winX: GLdouble; winY: GLdouble; winZ: GLdouble; model: PGLdouble; proj: PGLdouble;
  307. view: PGLint; objX: PGLdouble; objY: PGLdouble; objZ: PGLdouble): GLint; stdcall external libGLU;
  308. function gluUnProject4(winX: GLdouble; winY: GLdouble; winZ: GLdouble; clipW: GLdouble; model: PGLdouble;
  309. proj: PGLdouble; view: PGLint; nearVal: GLdouble; farVal: GLdouble; objX: PGLdouble;
  310. objY: PGLdouble; objZ: PGLdouble; objW: PGLdouble): GLint; stdcall external libGLU;
  311. {$EndIf}
  312. var
  313. GLU_VERSION_1_1, GLU_VERSION_1_2, GLU_VERSION_1_3: Boolean;
  314. implementation
  315. end.