zgl_glu.pas 14 KB

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