opengl 0.7.0.pre1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +8 -0
  3. data/History.txt +36 -0
  4. data/MIT-LICENSE +18 -0
  5. data/Manifest.txt +140 -0
  6. data/README.rdoc +51 -0
  7. data/Rakefile +129 -0
  8. data/Rakefile.cross +104 -0
  9. data/doc/build_install.txt +119 -0
  10. data/doc/extensions.txt.in +348 -0
  11. data/doc/history.txt +66 -0
  12. data/doc/requirements_and_design.txt +117 -0
  13. data/doc/roadmap.txt +28 -0
  14. data/doc/scientific_use.txt +35 -0
  15. data/doc/supplies/page_template.html +71 -0
  16. data/doc/thanks.txt +29 -0
  17. data/doc/tutorial.txt +469 -0
  18. data/examples/NeHe/nehe_lesson02.rb +117 -0
  19. data/examples/NeHe/nehe_lesson03.rb +122 -0
  20. data/examples/NeHe/nehe_lesson04.rb +133 -0
  21. data/examples/NeHe/nehe_lesson05.rb +186 -0
  22. data/examples/NeHe/nehe_lesson36.rb +303 -0
  23. data/examples/OrangeBook/3Dlabs-License.txt +33 -0
  24. data/examples/OrangeBook/brick.frag +36 -0
  25. data/examples/OrangeBook/brick.rb +376 -0
  26. data/examples/OrangeBook/brick.vert +41 -0
  27. data/examples/OrangeBook/particle.frag +17 -0
  28. data/examples/OrangeBook/particle.rb +406 -0
  29. data/examples/OrangeBook/particle.vert +38 -0
  30. data/examples/README +16 -0
  31. data/examples/RedBook/aapoly.rb +142 -0
  32. data/examples/RedBook/aargb.rb +119 -0
  33. data/examples/RedBook/accanti.rb +162 -0
  34. data/examples/RedBook/accpersp.rb +215 -0
  35. data/examples/RedBook/alpha.rb +123 -0
  36. data/examples/RedBook/alpha3D.rb +158 -0
  37. data/examples/RedBook/bezcurve.rb +105 -0
  38. data/examples/RedBook/bezmesh.rb +137 -0
  39. data/examples/RedBook/checker.rb +124 -0
  40. data/examples/RedBook/clip.rb +95 -0
  41. data/examples/RedBook/colormat.rb +135 -0
  42. data/examples/RedBook/cube.rb +69 -0
  43. data/examples/RedBook/depthcue.rb +99 -0
  44. data/examples/RedBook/dof.rb +205 -0
  45. data/examples/RedBook/double.rb +105 -0
  46. data/examples/RedBook/drawf.rb +91 -0
  47. data/examples/RedBook/feedback.rb +145 -0
  48. data/examples/RedBook/fog.rb +167 -0
  49. data/examples/RedBook/font.rb +151 -0
  50. data/examples/RedBook/hello.rb +79 -0
  51. data/examples/RedBook/image.rb +137 -0
  52. data/examples/RedBook/jitter.rb +207 -0
  53. data/examples/RedBook/lines.rb +128 -0
  54. data/examples/RedBook/list.rb +111 -0
  55. data/examples/RedBook/material.rb +275 -0
  56. data/examples/RedBook/mipmap.rb +156 -0
  57. data/examples/RedBook/model.rb +113 -0
  58. data/examples/RedBook/movelight.rb +132 -0
  59. data/examples/RedBook/pickdepth.rb +179 -0
  60. data/examples/RedBook/planet.rb +108 -0
  61. data/examples/RedBook/quadric.rb +158 -0
  62. data/examples/RedBook/robot.rb +115 -0
  63. data/examples/RedBook/select.rb +196 -0
  64. data/examples/RedBook/smooth.rb +95 -0
  65. data/examples/RedBook/stencil.rb +163 -0
  66. data/examples/RedBook/stroke.rb +167 -0
  67. data/examples/RedBook/surface.rb +166 -0
  68. data/examples/RedBook/teaambient.rb +132 -0
  69. data/examples/RedBook/teapots.rb +182 -0
  70. data/examples/RedBook/tess.rb +183 -0
  71. data/examples/RedBook/texbind.rb +147 -0
  72. data/examples/RedBook/texgen.rb +169 -0
  73. data/examples/RedBook/texturesurf.rb +128 -0
  74. data/examples/RedBook/varray.rb +159 -0
  75. data/examples/RedBook/wrap.rb +148 -0
  76. data/examples/misc/OGLBench.rb +337 -0
  77. data/examples/misc/anisotropic.rb +194 -0
  78. data/examples/misc/fbo_test.rb +356 -0
  79. data/examples/misc/font-glut.rb +46 -0
  80. data/examples/misc/glfwtest.rb +30 -0
  81. data/examples/misc/plane.rb +161 -0
  82. data/examples/misc/readpixel.rb +65 -0
  83. data/examples/misc/sdltest.rb +34 -0
  84. data/examples/misc/trislam.rb +828 -0
  85. data/ext/common/common.h +448 -0
  86. data/ext/common/conv.h +234 -0
  87. data/ext/common/funcdef.h +280 -0
  88. data/ext/common/gl-enums.h +10031 -0
  89. data/ext/common/gl-error.h +23 -0
  90. data/ext/common/gl-types.h +67 -0
  91. data/ext/common/glu-enums.h +463 -0
  92. data/ext/gl/extconf.rb +43 -0
  93. data/ext/gl/gl-1.0-1.1.c +2811 -0
  94. data/ext/gl/gl-1.2.c +814 -0
  95. data/ext/gl/gl-1.3.c +443 -0
  96. data/ext/gl/gl-1.4.c +348 -0
  97. data/ext/gl/gl-1.5.c +225 -0
  98. data/ext/gl/gl-2.0.c +657 -0
  99. data/ext/gl/gl-2.1.c +57 -0
  100. data/ext/gl/gl-enums.c +3354 -0
  101. data/ext/gl/gl-error.c +104 -0
  102. data/ext/gl/gl-ext-3dfx.c +27 -0
  103. data/ext/gl/gl-ext-arb.c +866 -0
  104. data/ext/gl/gl-ext-ati.c +41 -0
  105. data/ext/gl/gl-ext-ext.c +889 -0
  106. data/ext/gl/gl-ext-gremedy.c +41 -0
  107. data/ext/gl/gl-ext-nv.c +679 -0
  108. data/ext/gl/gl.c +216 -0
  109. data/ext/glu/extconf.rb +51 -0
  110. data/ext/glu/glu-enums.c +164 -0
  111. data/ext/glu/glu.c +1530 -0
  112. data/ext/glut/extconf.rb +67 -0
  113. data/ext/glut/glut.c +1624 -0
  114. data/lib/opengl.rb +89 -0
  115. data/test/README +10 -0
  116. data/test/tc_common.rb +98 -0
  117. data/test/tc_ext_arb.rb +467 -0
  118. data/test/tc_ext_ati.rb +33 -0
  119. data/test/tc_ext_ext.rb +551 -0
  120. data/test/tc_ext_gremedy.rb +36 -0
  121. data/test/tc_ext_nv.rb +357 -0
  122. data/test/tc_func_10_11.rb +1281 -0
  123. data/test/tc_func_12.rb +186 -0
  124. data/test/tc_func_13.rb +229 -0
  125. data/test/tc_func_14.rb +197 -0
  126. data/test/tc_func_15.rb +270 -0
  127. data/test/tc_func_20.rb +346 -0
  128. data/test/tc_func_21.rb +541 -0
  129. data/test/tc_glu.rb +310 -0
  130. data/test/tc_include_gl.rb +35 -0
  131. data/test/tc_misc.rb +54 -0
  132. data/test/tc_require_gl.rb +34 -0
  133. data/utils/README +11 -0
  134. data/utils/enumgen.rb +112 -0
  135. data/utils/extlistgen.rb +90 -0
  136. data/utils/mkdn2html.rb +59 -0
  137. data/utils/post-mkdn2html.rb +91 -0
  138. data/website/images/ogl.jpg +0 -0
  139. data/website/images/tab_bottom.gif +0 -0
  140. data/website/style.css +198 -0
  141. metadata +274 -0
data/ext/gl/extconf.rb ADDED
@@ -0,0 +1,43 @@
1
+ require 'mkmf'
2
+
3
+ def have_framework(fw, &b)
4
+ checking_for fw do
5
+ src = cpp_include("#{fw}/#{fw}.h") << "\n" "int main(void){return 0;}"
6
+ if try_link(src, opt = "-ObjC -framework #{fw}", &b)
7
+ $defs.push(format("-DHAVE_FRAMEWORK_%s", fw.tr_cpp))
8
+ $LDFLAGS << " " << opt
9
+ true
10
+ else
11
+ false
12
+ end
13
+ end
14
+ end unless respond_to? :have_framework
15
+
16
+ ok =
17
+ have_library('opengl32.lib') ||
18
+ have_library('opengl32') ||
19
+ have_library('GL', 'glVertex3d') ||
20
+ have_framework('OpenGL')
21
+
22
+ ok &&=
23
+ have_header('GL/gl.h') ||
24
+ have_header('OpenGL/gl.h') # OS X
25
+
26
+ have_header 'GL/glx.h' # *NIX only?
27
+ have_header 'dlfcn.h' # OS X dynamic loader
28
+ have_header 'windows.h'
29
+
30
+ have_header 'stdint.h'
31
+ have_header 'inttypes.h'
32
+
33
+ have_func 'wglGetProcAddress', 'wingdi.h' # Windows extension loader
34
+
35
+ have_struct_member 'struct RFloat', 'float_value'
36
+
37
+ have_type 'int64_t', 'stdint.h'
38
+ have_type 'uint64_t', 'stdint.h'
39
+
40
+ if ok then
41
+ create_header
42
+ create_makefile 'gl'
43
+ end
@@ -0,0 +1,2811 @@
1
+ /*
2
+ * Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
3
+ * Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
4
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
5
+ *
6
+ * This program is distributed under the terms of the MIT license.
7
+ * See the included MIT-LICENSE file for the terms of this license.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
12
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
13
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
14
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
15
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16
+ */
17
+
18
+ #include "../common/common.h"
19
+
20
+ #ifndef MAX
21
+ #define MAX(a, b) (((a) > (b)) ? (a) : (b))
22
+ #endif
23
+
24
+ /* OpenGL 1.0 + 1.1 functions */
25
+
26
+ GL_FUNC_STATIC_2(Accum,GLvoid, GLenum,GLfloat)
27
+ GL_FUNC_STATIC_2(AlphaFunc,GLvoid, GLenum,GLclampf)
28
+ GL_FUNC_STATIC_1(ArrayElement,GLvoid, GLint)
29
+ GL_FUNC_STATIC_2(BindTexture,GLvoid, GLenum,GLuint)
30
+ GL_FUNC_STATIC_2(BlendFunc,GLvoid, GLenum,GLenum)
31
+ GL_FUNC_STATIC_1(CallList,GLvoid, GLuint)
32
+ GL_FUNC_STATIC_1(Clear,GLvoid, GLbitfield)
33
+ GL_FUNC_STATIC_4(ClearAccum,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
34
+ GL_FUNC_STATIC_4(ClearColor,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
35
+ GL_FUNC_STATIC_1(ClearDepth,GLvoid, GLclampd)
36
+ GL_FUNC_STATIC_1(ClearIndex,GLvoid, GLfloat)
37
+ GL_FUNC_STATIC_1(ClearStencil,GLvoid, GLint)
38
+ GL_FUNC_STATIC_3(Color3b,GLvoid, GLbyte,GLbyte,GLbyte)
39
+ GL_FUNC_STATIC_3(Color3d,GLvoid, GLdouble,GLdouble,GLdouble)
40
+ GL_FUNC_STATIC_3(Color3f,GLvoid, GLfloat,GLfloat,GLfloat)
41
+ GL_FUNC_STATIC_3(Color3i,GLvoid, GLint,GLint,GLint)
42
+ GL_FUNC_STATIC_3(Color3s,GLvoid, GLshort,GLshort,GLshort)
43
+ GL_FUNC_STATIC_3(Color3ub,GLvoid, GLubyte,GLubyte,GLubyte)
44
+ GL_FUNC_STATIC_3(Color3ui,GLvoid, GLuint,GLuint,GLuint)
45
+ GL_FUNC_STATIC_3(Color3us,GLvoid, GLushort,GLushort,GLushort)
46
+ GL_FUNC_STATIC_4(Color4b,GLvoid, GLbyte,GLbyte,GLbyte,GLbyte)
47
+ GL_FUNC_STATIC_4(Color4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
48
+ GL_FUNC_STATIC_4(Color4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
49
+ GL_FUNC_STATIC_4(Color4i,GLvoid, GLint,GLint,GLint,GLint)
50
+ GL_FUNC_STATIC_4(Color4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
51
+ GL_FUNC_STATIC_4(Color4ub,GLvoid, GLubyte,GLubyte,GLubyte,GLubyte)
52
+ GL_FUNC_STATIC_4(Color4ui,GLvoid, GLuint,GLuint,GLuint,GLuint)
53
+ GL_FUNC_STATIC_4(Color4us,GLvoid, GLushort,GLushort,GLushort,GLushort)
54
+ GL_FUNC_STATIC_4(ColorMask,GLvoid, GLboolean,GLboolean,GLboolean,GLboolean)
55
+ GL_FUNC_STATIC_2(ColorMaterial,GLvoid, GLenum,GLenum)
56
+ GL_FUNC_STATIC_5(CopyPixels,GLvoid, GLint,GLint,GLsizei,GLsizei,GLenum)
57
+ GL_FUNC_STATIC_7(CopyTexImage1D,GLvoid, GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint)
58
+ GL_FUNC_STATIC_8(CopyTexImage2D,GLvoid, GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint)
59
+ GL_FUNC_STATIC_6(CopyTexSubImage1D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLsizei)
60
+ GL_FUNC_STATIC_8(CopyTexSubImage2D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei)
61
+ GL_FUNC_STATIC_1(CullFace,GLvoid, GLenum)
62
+ GL_FUNC_STATIC_2(DeleteLists,GLvoid, GLuint,GLuint)
63
+ GL_FUNC_STATIC_1(DepthFunc,GLvoid, GLenum)
64
+ GL_FUNC_STATIC_1(DepthMask,GLvoid, GLboolean)
65
+ GL_FUNC_STATIC_2(DepthRange,GLvoid, GLclampd,GLclampd)
66
+ GL_FUNC_STATIC_1(Disable,GLvoid, GLenum)
67
+ GL_FUNC_STATIC_1(DisableClientState,GLvoid, GLenum)
68
+ GL_FUNC_STATIC_3(DrawArrays,GLvoid, GLenum,GLint,GLsizei)
69
+ GL_FUNC_STATIC_1(DrawBuffer,GLvoid, GLenum)
70
+ GL_FUNC_STATIC_1(EdgeFlag,GLvoid, GLboolean)
71
+ GL_FUNC_STATIC_1(Enable,GLvoid, GLenum)
72
+ GL_FUNC_STATIC_1(EnableClientState,GLvoid, GLenum)
73
+ GL_FUNC_STATIC_0(EndList,GLvoid)
74
+ GL_FUNC_STATIC_1(EvalCoord1d,GLvoid, GLdouble)
75
+ GL_FUNC_STATIC_1(EvalCoord1f,GLvoid, GLfloat)
76
+ GL_FUNC_STATIC_2(EvalCoord2d,GLvoid, GLdouble,GLdouble)
77
+ GL_FUNC_STATIC_2(EvalCoord2f,GLvoid, GLfloat,GLfloat)
78
+ GL_FUNC_STATIC_3(EvalMesh1,GLvoid, GLenum,GLint,GLint)
79
+ GL_FUNC_STATIC_5(EvalMesh2,GLvoid, GLenum,GLint,GLint,GLint,GLint)
80
+ GL_FUNC_STATIC_1(EvalPoint1,GLvoid, GLint)
81
+ GL_FUNC_STATIC_2(EvalPoint2,GLvoid, GLint,GLint)
82
+ GL_FUNC_STATIC_0(Finish,GLvoid)
83
+ GL_FUNC_STATIC_0(Flush,GLvoid)
84
+ GL_FUNC_STATIC_2(Fogi,GLvoid, GLenum,GLint)
85
+ GL_FUNC_STATIC_2(Fogf,GLvoid, GLenum,GLfloat)
86
+ GL_FUNC_STATIC_1(FrontFace,GLvoid, GLenum)
87
+ GL_FUNC_STATIC_6(Frustum,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble)
88
+ GL_FUNC_STATIC_1(GenLists,GLuint, GLsizei)
89
+ GL_FUNC_STATIC_0(GetError,GLenum)
90
+ GL_FUNC_STATIC_2(Hint,GLvoid, GLenum,GLenum)
91
+ GL_FUNC_STATIC_1(Indexd,GLvoid, GLdouble)
92
+ GL_FUNC_STATIC_1(Indexf,GLvoid, GLfloat)
93
+ GL_FUNC_STATIC_1(Indexi,GLvoid, GLint)
94
+ GL_FUNC_STATIC_1(IndexMask,GLvoid, GLuint)
95
+ GL_FUNC_STATIC_1(Indexs,GLvoid, GLshort)
96
+ GL_FUNC_STATIC_1(Indexub,GLvoid, GLubyte)
97
+ GL_FUNC_STATIC_0(InitNames,GLvoid)
98
+ GL_FUNC_STATIC_1(IsEnabled,GLboolean, GLenum)
99
+ GL_FUNC_STATIC_1(IsList,GLboolean, GLuint)
100
+ GL_FUNC_STATIC_1(IsTexture,GLboolean, GLuint)
101
+ GL_FUNC_STATIC_2(LightModelf,GLvoid, GLenum,GLfloat)
102
+ GL_FUNC_STATIC_2(LightModeli,GLvoid, GLenum,GLint)
103
+ GL_FUNC_STATIC_3(Lightf,GLvoid, GLenum,GLenum,GLfloat)
104
+ GL_FUNC_STATIC_3(Lighti,GLvoid, GLenum,GLenum,GLint)
105
+ GL_FUNC_STATIC_2(LineStipple,GLvoid, GLint,GLushort)
106
+ GL_FUNC_STATIC_1(LineWidth,GLvoid, GLfloat)
107
+ GL_FUNC_STATIC_1(ListBase,GLvoid, GLuint)
108
+ GL_FUNC_STATIC_0(LoadIdentity,GLvoid)
109
+ GL_FUNC_STATIC_1(LoadName,GLvoid, GLuint)
110
+ GL_FUNC_STATIC_1(LogicOp,GLvoid, GLenum)
111
+ GL_FUNC_STATIC_3(MapGrid1d,GLvoid, GLint,GLdouble,GLdouble)
112
+ GL_FUNC_STATIC_3(MapGrid1f,GLvoid, GLint,GLfloat,GLfloat)
113
+ GL_FUNC_STATIC_6(MapGrid2d,GLvoid, GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble)
114
+ GL_FUNC_STATIC_6(MapGrid2f,GLvoid, GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat)
115
+ GL_FUNC_STATIC_3(Materialf,GLvoid, GLenum,GLenum,GLfloat)
116
+ GL_FUNC_STATIC_3(Materiali,GLvoid, GLenum,GLenum,GLint)
117
+ GL_FUNC_STATIC_1(MatrixMode,GLvoid, GLenum)
118
+ GL_FUNC_STATIC_2(NewList,GLvoid, GLuint,GLenum)
119
+ GL_FUNC_STATIC_3(Normal3b,GLvoid, GLbyte,GLbyte,GLbyte)
120
+ GL_FUNC_STATIC_3(Normal3d,GLvoid, GLdouble,GLdouble,GLdouble)
121
+ GL_FUNC_STATIC_3(Normal3f,GLvoid, GLfloat,GLfloat,GLfloat)
122
+ GL_FUNC_STATIC_3(Normal3i,GLvoid, GLint,GLint,GLint)
123
+ GL_FUNC_STATIC_3(Normal3s,GLvoid, GLshort,GLshort,GLshort)
124
+ GL_FUNC_STATIC_6(Ortho,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble)
125
+ GL_FUNC_STATIC_1(PassThrough,GLvoid, GLfloat)
126
+ GL_FUNC_STATIC_2(PixelStoref,GLvoid, GLenum,GLfloat)
127
+ GL_FUNC_STATIC_2(PixelStorei,GLvoid, GLenum,GLint)
128
+ GL_FUNC_STATIC_2(PixelTransferf,GLvoid, GLenum,GLfloat)
129
+ GL_FUNC_STATIC_2(PixelTransferi,GLvoid, GLenum,GLint)
130
+ GL_FUNC_STATIC_2(PixelZoom,GLvoid, GLfloat,GLfloat)
131
+ GL_FUNC_STATIC_1(PointSize,GLvoid, GLfloat)
132
+ GL_FUNC_STATIC_2(PolygonMode,GLvoid, GLenum,GLenum)
133
+ GL_FUNC_STATIC_2(PolygonOffset,GLvoid, GLfloat,GLfloat)
134
+ GL_FUNC_STATIC_0(PopAttrib,GLvoid)
135
+ GL_FUNC_STATIC_0(PopClientAttrib,GLvoid)
136
+ GL_FUNC_STATIC_0(PopMatrix,GLvoid)
137
+ GL_FUNC_STATIC_0(PopName,GLvoid)
138
+ GL_FUNC_STATIC_1(PushAttrib,GLvoid, GLbitfield)
139
+ GL_FUNC_STATIC_1(PushClientAttrib,GLvoid, GLbitfield)
140
+ GL_FUNC_STATIC_0(PushMatrix,GLvoid)
141
+ GL_FUNC_STATIC_1(PushName,GLvoid, GLuint)
142
+ GL_FUNC_STATIC_2(RasterPos2d,GLvoid, GLdouble,GLdouble)
143
+ GL_FUNC_STATIC_2(RasterPos2f,GLvoid, GLfloat,GLfloat)
144
+ GL_FUNC_STATIC_2(RasterPos2i,GLvoid, GLint,GLint)
145
+ GL_FUNC_STATIC_2(RasterPos2s,GLvoid, GLshort,GLshort)
146
+ GL_FUNC_STATIC_3(RasterPos3d,GLvoid, GLdouble,GLdouble,GLdouble)
147
+ GL_FUNC_STATIC_3(RasterPos3f,GLvoid, GLfloat,GLfloat,GLfloat)
148
+ GL_FUNC_STATIC_3(RasterPos3i,GLvoid, GLint,GLint,GLint)
149
+ GL_FUNC_STATIC_3(RasterPos3s,GLvoid, GLshort,GLshort,GLshort)
150
+ GL_FUNC_STATIC_4(RasterPos4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
151
+ GL_FUNC_STATIC_4(RasterPos4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
152
+ GL_FUNC_STATIC_4(RasterPos4i,GLvoid, GLint,GLint,GLint,GLint)
153
+ GL_FUNC_STATIC_4(RasterPos4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
154
+ GL_FUNC_STATIC_1(ReadBuffer,GLvoid, GLenum)
155
+ GL_FUNC_STATIC_4(Rectd,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
156
+ GL_FUNC_STATIC_4(Rectf,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
157
+ GL_FUNC_STATIC_4(Recti,GLvoid, GLint,GLint,GLint,GLint)
158
+ GL_FUNC_STATIC_4(Rects,GLvoid, GLshort,GLshort,GLshort,GLshort)
159
+ GL_FUNC_STATIC_1(RenderMode,GLint, GLenum)
160
+ GL_FUNC_STATIC_4(Rotated,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
161
+ GL_FUNC_STATIC_4(Rotatef,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
162
+ GL_FUNC_STATIC_3(Scaled,GLvoid, GLdouble,GLdouble,GLdouble)
163
+ GL_FUNC_STATIC_3(Scalef,GLvoid, GLfloat,GLfloat,GLfloat)
164
+ GL_FUNC_STATIC_4(Scissor,GLvoid, GLint,GLint,GLint,GLint)
165
+ GL_FUNC_STATIC_1(ShadeModel,GLvoid, GLenum)
166
+ GL_FUNC_STATIC_3(StencilFunc,GLvoid, GLenum,GLint,GLuint)
167
+ GL_FUNC_STATIC_1(StencilMask,GLvoid, GLuint)
168
+ GL_FUNC_STATIC_3(StencilOp,GLvoid, GLenum,GLenum,GLenum)
169
+ GL_FUNC_STATIC_1(TexCoord1d,GLvoid, GLdouble)
170
+ GL_FUNC_STATIC_1(TexCoord1f,GLvoid, GLfloat)
171
+ GL_FUNC_STATIC_1(TexCoord1i,GLvoid, GLint)
172
+ GL_FUNC_STATIC_1(TexCoord1s,GLvoid, GLshort)
173
+ GL_FUNC_STATIC_2(TexCoord2d,GLvoid, GLdouble,GLdouble)
174
+ GL_FUNC_STATIC_2(TexCoord2f,GLvoid, GLfloat,GLfloat)
175
+ GL_FUNC_STATIC_2(TexCoord2i,GLvoid, GLint,GLint)
176
+ GL_FUNC_STATIC_2(TexCoord2s,GLvoid, GLshort,GLshort)
177
+ GL_FUNC_STATIC_3(TexCoord3d,GLvoid, GLdouble,GLdouble,GLdouble)
178
+ GL_FUNC_STATIC_3(TexCoord3f,GLvoid, GLfloat,GLfloat,GLfloat)
179
+ GL_FUNC_STATIC_3(TexCoord3i,GLvoid, GLint,GLint,GLint)
180
+ GL_FUNC_STATIC_3(TexCoord3s,GLvoid, GLshort,GLshort,GLshort)
181
+ GL_FUNC_STATIC_4(TexCoord4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
182
+ GL_FUNC_STATIC_4(TexCoord4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
183
+ GL_FUNC_STATIC_4(TexCoord4i,GLvoid, GLint,GLint,GLint,GLint)
184
+ GL_FUNC_STATIC_4(TexCoord4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
185
+ GL_FUNC_STATIC_3(TexEnvf,GLvoid, GLenum,GLenum,GLfloat)
186
+ GL_FUNC_STATIC_3(TexEnvi,GLvoid, GLenum,GLenum,GLint)
187
+ GL_FUNC_STATIC_3(TexGend,GLvoid, GLenum,GLenum,GLdouble)
188
+ GL_FUNC_STATIC_3(TexGenf,GLvoid, GLenum,GLenum,GLfloat)
189
+ GL_FUNC_STATIC_3(TexGeni,GLvoid, GLenum,GLenum,GLint)
190
+ GL_FUNC_STATIC_3(TexParameterf,GLvoid, GLenum,GLenum,GLfloat)
191
+ GL_FUNC_STATIC_3(TexParameteri,GLvoid, GLenum,GLenum,GLint)
192
+ GL_FUNC_STATIC_3(Translated,GLvoid, GLdouble,GLdouble,GLdouble)
193
+ GL_FUNC_STATIC_3(Translatef,GLvoid, GLfloat,GLfloat,GLfloat)
194
+ GL_FUNC_STATIC_2(Vertex2d,GLvoid, GLdouble,GLdouble)
195
+ GL_FUNC_STATIC_2(Vertex2f,GLvoid, GLfloat,GLfloat)
196
+ GL_FUNC_STATIC_2(Vertex2i,GLvoid, GLint,GLint)
197
+ GL_FUNC_STATIC_2(Vertex2s,GLvoid, GLshort,GLshort)
198
+ GL_FUNC_STATIC_3(Vertex3d,GLvoid, GLdouble,GLdouble,GLdouble)
199
+ GL_FUNC_STATIC_3(Vertex3f,GLvoid, GLfloat,GLfloat,GLfloat)
200
+ GL_FUNC_STATIC_3(Vertex3i,GLvoid, GLint,GLint,GLint)
201
+ GL_FUNC_STATIC_3(Vertex3s,GLvoid, GLshort,GLshort,GLshort)
202
+ GL_FUNC_STATIC_4(Vertex4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
203
+ GL_FUNC_STATIC_4(Vertex4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
204
+ GL_FUNC_STATIC_4(Vertex4i,GLvoid, GLint,GLint,GLint,GLint)
205
+ GL_FUNC_STATIC_4(Vertex4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
206
+ GL_FUNC_STATIC_4(Viewport,GLvoid, GLuint,GLuint,GLuint,GLuint)
207
+
208
+ VALUE inside_begin_end = Qfalse;
209
+
210
+ static VALUE
211
+ gl_Begin(obj,arg1)
212
+ VALUE obj,arg1;
213
+ {
214
+ glBegin(CONV_GLenum(arg1));
215
+ inside_begin_end = Qtrue;
216
+ return Qnil;
217
+ }
218
+
219
+ static VALUE
220
+ gl_End(obj)
221
+ VALUE obj;
222
+ {
223
+ inside_begin_end = Qfalse;
224
+ glEnd();
225
+ CHECK_GLERROR
226
+ return Qnil;
227
+ }
228
+
229
+ static VALUE
230
+ gl_CallLists(obj,arg1,arg2)
231
+ VALUE obj,arg1,arg2;
232
+ {
233
+ GLsizei n;
234
+ GLenum type;
235
+ VALUE lists;
236
+ type = CONV_GLenum(arg1);
237
+ lists = pack_array_or_pass_string(type,arg2);
238
+ n = (GLsizei)RSTRING_LENINT(lists) / gltype_glformat_unit_size(type,1);
239
+ glCallLists(n, type, RSTRING_PTR(lists));
240
+ CHECK_GLERROR
241
+ return Qnil;
242
+ }
243
+
244
+ static VALUE
245
+ gl_Bitmap(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
246
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
247
+ {
248
+ GLsizei width;
249
+ GLsizei height;
250
+ GLfloat xorig;
251
+ GLfloat yorig;
252
+ GLfloat xmove;
253
+ GLfloat ymove;
254
+ width = (GLsizei)NUM2UINT(arg1);
255
+ height = (GLsizei)NUM2UINT(arg2);
256
+ xorig = (GLfloat)NUM2DBL(arg3);
257
+ yorig = (GLfloat)NUM2DBL(arg4);
258
+ xmove = (GLfloat)NUM2DBL(arg5);
259
+ ymove = (GLfloat)NUM2DBL(arg6);
260
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
261
+ glBitmap(width, height, xorig, yorig, xmove, ymove, (GLubyte *)NUM2LONG(arg7));
262
+ } else {
263
+ VALUE data;
264
+ data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg7);
265
+
266
+ if ((RSTRING_LEN(data)*8) < (width * height))
267
+ rb_raise(rb_eArgError, "string length:%li", RSTRING_LEN(data));
268
+
269
+ glBitmap(width, height, xorig, yorig, xmove, ymove, (const GLubyte *)RSTRING_PTR(data));
270
+ }
271
+ CHECK_GLERROR
272
+ return Qnil;
273
+ }
274
+
275
+ static VALUE
276
+ gl_EdgeFlagv(obj,arg1)
277
+ VALUE obj,arg1;
278
+ {
279
+ GLboolean flag[1] = { GL_FALSE };
280
+ Check_Type(arg1,T_ARRAY);
281
+ ary2cboolean(arg1,flag,1);
282
+ glEdgeFlagv(flag);
283
+ CHECK_GLERROR
284
+ return Qnil;
285
+ }
286
+
287
+ static VALUE
288
+ gl_Indexdv(obj,arg1)
289
+ VALUE obj,arg1;
290
+ {
291
+ GLdouble c[1] = {0.0};
292
+ Check_Type(arg1,T_ARRAY);
293
+ ary2cdbl(arg1,c,1);
294
+ glIndexdv(c);
295
+ CHECK_GLERROR
296
+ return Qnil;
297
+ }
298
+
299
+ static VALUE
300
+ gl_Indexfv(obj,arg1)
301
+ VALUE obj,arg1;
302
+ {
303
+ GLfloat c[1] = { (GLfloat)0.0 };
304
+ Check_Type(arg1,T_ARRAY);
305
+ ary2cflt(arg1,c,1);
306
+ glIndexfv(c);
307
+ CHECK_GLERROR
308
+ return Qnil;
309
+ }
310
+
311
+ static VALUE
312
+ gl_Indexiv(obj,arg1)
313
+ VALUE obj,arg1;
314
+ {
315
+ GLint c[1] = {0};
316
+ Check_Type(arg1,T_ARRAY);
317
+ ary2cint(arg1,c,1);
318
+ glIndexiv(c);
319
+ CHECK_GLERROR
320
+ return Qnil;
321
+ }
322
+
323
+ static VALUE
324
+ gl_Indexsv(obj,arg1)
325
+ VALUE obj,arg1;
326
+ {
327
+ GLshort c[1] = {0};
328
+ Check_Type(arg1,T_ARRAY);
329
+ ary2cshort(arg1,c,1);
330
+ glIndexsv(c);
331
+ CHECK_GLERROR
332
+ return Qnil;
333
+ }
334
+
335
+ static VALUE
336
+ gl_ClipPlane(obj,arg1,arg2)
337
+ VALUE obj,arg1,arg2;
338
+ {
339
+ GLenum plane;
340
+ GLdouble equation[4];
341
+ plane = (GLenum)NUM2INT(arg1);
342
+ Check_Type(arg2,T_ARRAY);
343
+ ary2cdbl(arg2, equation, 4);
344
+ glClipPlane(plane,equation);
345
+ CHECK_GLERROR
346
+ return Qnil;
347
+ }
348
+
349
+ static VALUE
350
+ gl_Fogfv(obj,arg1,arg2)
351
+ VALUE obj,arg1,arg2;
352
+ {
353
+ GLenum pname;
354
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
355
+ pname = (GLenum)NUM2INT(arg1);
356
+ Check_Type(arg2,T_ARRAY);
357
+ ary2cflt(arg2,params,4);
358
+ glFogfv(pname,params);
359
+ CHECK_GLERROR
360
+ return Qnil;
361
+ }
362
+
363
+ static VALUE
364
+ gl_Fogiv(obj,arg1,arg2)
365
+ VALUE obj,arg1,arg2;
366
+ {
367
+ GLenum pname;
368
+ GLint params[4] = {0,0,0,0};
369
+ pname = (GLenum)NUM2INT(arg1);
370
+ Check_Type(arg2,T_ARRAY);
371
+ ary2cint(arg2,params,4);
372
+ glFogiv(pname,params);
373
+ CHECK_GLERROR
374
+ return Qnil;
375
+ }
376
+
377
+ static VALUE
378
+ gl_Lightfv(obj,arg1,arg2,arg3)
379
+ VALUE obj,arg1,arg2,arg3;
380
+ {
381
+ GLenum light;
382
+ GLenum pname;
383
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
384
+ light = (GLenum)NUM2INT(arg1);
385
+ pname = (GLenum)NUM2INT(arg2);
386
+ Check_Type(arg3,T_ARRAY);
387
+ ary2cflt(arg3,params,4);
388
+ glLightfv(light,pname,params);
389
+ CHECK_GLERROR
390
+ return Qnil;
391
+ }
392
+
393
+ static VALUE
394
+ gl_Lightiv(obj,arg1,arg2,arg3)
395
+ VALUE obj,arg1,arg2,arg3;
396
+ {
397
+ GLenum light;
398
+ GLenum pname;
399
+ GLint params[4]={0,0,0,0};
400
+ light = (GLenum)NUM2INT(arg1);
401
+ pname = (GLenum)NUM2INT(arg2);
402
+ Check_Type(arg3,T_ARRAY);
403
+ ary2cint(arg3,params,4);
404
+ glLightiv(light,pname,params);
405
+ CHECK_GLERROR
406
+ return Qnil;
407
+ }
408
+
409
+ static VALUE
410
+ gl_LightModelfv(obj,arg1,arg2)
411
+ VALUE obj,arg1,arg2;
412
+ {
413
+ GLenum pname;
414
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
415
+ pname = (GLenum)NUM2INT(arg1);
416
+ Check_Type(arg2,T_ARRAY);
417
+ ary2cflt(arg2,params,4);
418
+ glLightModelfv(pname,params);
419
+ CHECK_GLERROR
420
+ return Qnil;
421
+ }
422
+
423
+ static VALUE
424
+ gl_LightModeliv(obj,arg1,arg2)
425
+ VALUE obj,arg1,arg2;
426
+ {
427
+ GLenum pname;
428
+ GLint params[4] = {0,0,0,0};
429
+ pname = (GLenum)NUM2INT(arg1);
430
+ Check_Type(arg2,T_ARRAY);
431
+ ary2cint(arg2,params,4);
432
+ glLightModeliv(pname,params);
433
+ CHECK_GLERROR
434
+ return Qnil;
435
+ }
436
+
437
+
438
+ static VALUE
439
+ gl_Materialfv(obj,arg1,arg2,arg3)
440
+ VALUE obj,arg1,arg2,arg3;
441
+ {
442
+ GLenum face;
443
+ GLenum pname;
444
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
445
+ face = (GLenum)NUM2INT(arg1);
446
+ pname = (GLenum)NUM2INT(arg2);
447
+ Check_Type(arg3,T_ARRAY);
448
+ ary2cflt(arg3,params,4);
449
+ glMaterialfv(face,pname,params);
450
+ CHECK_GLERROR
451
+ return Qnil;
452
+ }
453
+
454
+ static VALUE
455
+ gl_Materialiv(obj,arg1,arg2,arg3)
456
+ VALUE obj,arg1,arg2,arg3;
457
+ {
458
+ GLenum face;
459
+ GLenum pname;
460
+ GLint params[4] = {0,0,0,0};
461
+ face = (GLenum)NUM2INT(arg1);
462
+ pname = (GLenum)NUM2INT(arg2);
463
+ Check_Type(arg3,T_ARRAY);
464
+ ary2cint(arg3,params,4);
465
+ glMaterialiv(face,pname,params);
466
+ CHECK_GLERROR
467
+ return Qnil;
468
+ }
469
+
470
+ static VALUE
471
+ gl_PolygonStipple(obj,arg1)
472
+ VALUE obj,arg1;
473
+ {
474
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
475
+ glPolygonStipple((GLubyte *)NUM2LONG(arg1));
476
+ } else {
477
+ VALUE data;
478
+ data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg1);
479
+ if (RSTRING_LEN(data) < 128)
480
+ rb_raise(rb_eArgError, "string length:%li", RSTRING_LEN(data));
481
+
482
+ glPolygonStipple((GLubyte *)RSTRING_PTR(data));
483
+ }
484
+ CHECK_GLERROR
485
+ return Qnil;
486
+ }
487
+
488
+
489
+ static VALUE
490
+ gl_TexParameterfv(obj,arg1,arg2,arg3)
491
+ VALUE obj,arg1,arg2,arg3;
492
+ {
493
+ GLenum target;
494
+ GLenum pname;
495
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
496
+ target = (GLenum)NUM2INT(arg1);
497
+ pname = (GLenum)NUM2INT(arg2);
498
+ Check_Type(arg3,T_ARRAY);
499
+ ary2cflt(arg3,params,4);
500
+ glTexParameterfv(target,pname,params);
501
+ CHECK_GLERROR
502
+ return Qnil;
503
+ }
504
+
505
+ static VALUE
506
+ gl_TexParameteriv(obj,arg1,arg2,arg3)
507
+ VALUE obj,arg1,arg2,arg3;
508
+ {
509
+ GLenum target;
510
+ GLenum pname;
511
+ GLint params[4] = {0,0,0,0};
512
+ target = (GLenum)NUM2INT(arg1);
513
+ pname = (GLenum)NUM2INT(arg2);
514
+ Check_Type(arg3,T_ARRAY);
515
+ ary2cint(arg3,params,4);
516
+ glTexParameteriv(target,pname,params);
517
+ CHECK_GLERROR
518
+ return Qnil;
519
+ }
520
+
521
+ static VALUE
522
+ gl_TexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
523
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
524
+ {
525
+ GLenum target;
526
+ GLint level;
527
+ GLint components;
528
+ GLsizei width;
529
+ GLint border;
530
+ GLenum format;
531
+ GLenum type;
532
+ const char *pixels;
533
+ target = (GLenum)NUM2INT(arg1);
534
+ level = (GLint)NUM2INT(arg2);
535
+ components = (GLint)NUM2INT(arg3);
536
+ width = (GLsizei)NUM2UINT(arg4);
537
+ border = (GLint)NUM2INT(arg5);
538
+ format = (GLenum)NUM2INT(arg6);
539
+ type = (GLenum)NUM2INT(arg7);
540
+
541
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
542
+ glTexImage1D(target,level,components,width,border,format,type,(GLvoid *)NUM2LONG(arg8));
543
+ CHECK_GLERROR
544
+ return Qnil;
545
+ }
546
+
547
+ if (target == GL_PROXY_TEXTURE_1D || NIL_P(arg8)) { /* proxy texture, no data read */
548
+ pixels = NULL;
549
+ } else {
550
+ VALUE data;
551
+ data = pack_array_or_pass_string(type,arg8);
552
+ CheckDataSize(type,format,width,data);
553
+ pixels = RSTRING_PTR(data);
554
+ }
555
+ glTexImage1D(target,level,components,width,border,format,type,pixels);
556
+ CHECK_GLERROR
557
+ return Qnil;
558
+ }
559
+
560
+ static VALUE
561
+ gl_TexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
562
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
563
+ {
564
+ GLenum target;
565
+ GLint level;
566
+ GLint components;
567
+ GLsizei width;
568
+ GLsizei height;
569
+ GLint border;
570
+ GLenum format;
571
+ GLenum type;
572
+ const char *pixels;
573
+ target = (GLenum)NUM2INT(arg1);
574
+ level = (GLint)NUM2INT(arg2);
575
+ components = (GLint)NUM2INT(arg3);
576
+ width = (GLsizei)NUM2UINT(arg4);
577
+ height = (GLsizei)NUM2UINT(arg5);
578
+ border = (GLint)NUM2INT(arg6);
579
+ format = (GLenum)NUM2INT(arg7);
580
+ type = (GLenum)NUM2INT(arg8);
581
+
582
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
583
+ glTexImage2D(target,level,components,width,height,border,format,type,(GLvoid *)NUM2LONG(arg9));
584
+ CHECK_GLERROR
585
+ return Qnil;
586
+ }
587
+
588
+ if (target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_1D_ARRAY_EXT || target == GL_PROXY_TEXTURE_CUBE_MAP || NIL_P(arg9)) { /* proxy texture, no data read */
589
+ pixels = NULL;
590
+ } else {
591
+ VALUE data;
592
+ data = pack_array_or_pass_string(type,arg9);
593
+ CheckDataSize(type,format,width*height,data);
594
+ pixels = RSTRING_PTR(data);
595
+ }
596
+ glTexImage2D(target,level,components,width,height,border,format,type,pixels);
597
+ CHECK_GLERROR
598
+ return Qnil;
599
+ }
600
+
601
+ static VALUE
602
+ gl_TexEnvfv(obj,arg1,arg2,arg3)
603
+ VALUE obj,arg1,arg2,arg3;
604
+ {
605
+ GLenum target;
606
+ GLenum pname;
607
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
608
+ target = (GLenum)NUM2INT(arg1);
609
+ pname = (GLenum)NUM2INT(arg2);
610
+ Check_Type(arg3,T_ARRAY);
611
+ ary2cflt(arg3,params,4);
612
+ glTexEnvfv(target,pname,params);
613
+ CHECK_GLERROR
614
+ return Qnil;
615
+ }
616
+
617
+ static VALUE
618
+ gl_TexEnviv(obj,arg1,arg2,arg3)
619
+ VALUE obj,arg1,arg2,arg3;
620
+ {
621
+ GLenum target;
622
+ GLenum pname;
623
+ GLint params[4] = {0,0,0,0};
624
+ target = (GLenum)NUM2INT(arg1);
625
+ pname = (GLenum)NUM2INT(arg2);
626
+ Check_Type(arg3,T_ARRAY);
627
+ ary2cint(arg3,params,4);
628
+ glTexEnviv(target,pname,params);
629
+ CHECK_GLERROR
630
+ return Qnil;
631
+ }
632
+
633
+
634
+ static VALUE
635
+ gl_TexGendv(obj,arg1,arg2,arg3)
636
+ VALUE obj,arg1,arg2,arg3;
637
+ {
638
+ GLenum coord;
639
+ GLenum pname;
640
+ GLdouble params[4] = {0.0,0.0,0.0,0.0};
641
+ coord = (GLenum)NUM2INT(arg1);
642
+ pname = (GLenum)NUM2INT(arg2);
643
+ Check_Type(arg3,T_ARRAY);
644
+ ary2cdbl(arg3,params,4);
645
+ glTexGendv(coord,pname,params);
646
+ CHECK_GLERROR
647
+ return Qnil;
648
+ }
649
+
650
+
651
+ static VALUE
652
+ gl_TexGenfv(obj,arg1,arg2,arg3)
653
+ VALUE obj,arg1,arg2,arg3;
654
+ {
655
+ GLenum coord;
656
+ GLenum pname;
657
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
658
+ coord = (GLenum)NUM2INT(arg1);
659
+ pname = (GLenum)NUM2INT(arg2);
660
+ Check_Type(arg3,T_ARRAY);
661
+ ary2cflt(arg3,params,4);
662
+ glTexGenfv(coord,pname,params);
663
+ CHECK_GLERROR
664
+ return Qnil;
665
+ }
666
+
667
+
668
+ static VALUE
669
+ gl_TexGeniv(obj,arg1,arg2,arg3)
670
+ VALUE obj,arg1,arg2,arg3;
671
+ {
672
+ GLenum coord;
673
+ GLenum pname;
674
+ GLint params[4] = {0,0,0,0};
675
+ coord = (GLenum)NUM2INT(arg1);
676
+ pname = (GLenum)NUM2INT(arg2);
677
+ Check_Type(arg3,T_ARRAY);
678
+ ary2cint(arg3,params,4);
679
+ glTexGeniv(coord,pname,params);
680
+ CHECK_GLERROR
681
+ return Qnil;
682
+ }
683
+ static VALUE g_current_feed_buffer;
684
+ static VALUE
685
+ gl_FeedbackBuffer(obj,arg1,arg2)
686
+ VALUE obj,arg1,arg2;
687
+ {
688
+ GLsizei size;
689
+ GLenum type;
690
+ size = (GLsizei)NUM2UINT(arg1);
691
+ type = (GLenum)NUM2INT(arg2);
692
+ g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
693
+ rb_str_freeze(g_current_feed_buffer);
694
+ glFeedbackBuffer(size, type, (GLfloat*)RSTRING_PTR(g_current_feed_buffer));
695
+ CHECK_GLERROR
696
+ return g_current_feed_buffer;
697
+ }
698
+
699
+ static VALUE g_current_sel_buffer;
700
+ static VALUE
701
+ gl_SelectBuffer(obj,arg1)
702
+ VALUE obj,arg1;
703
+ {
704
+ GLsizei size;
705
+ size = (GLsizei)NUM2UINT(arg1);
706
+ g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
707
+ rb_str_freeze(g_current_sel_buffer);
708
+ glSelectBuffer(size, (GLuint*)RSTRING_PTR(g_current_sel_buffer));
709
+ CHECK_GLERROR
710
+ return g_current_sel_buffer;
711
+ }
712
+
713
+
714
+ static VALUE
715
+ gl_Map1d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
716
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
717
+ {
718
+ GLenum target;
719
+ GLdouble u1;
720
+ GLdouble u2;
721
+ GLint stride;
722
+ GLint order;
723
+ GLdouble *points;
724
+
725
+ VALUE work_ary;
726
+
727
+ target = (GLenum)NUM2INT(arg1);
728
+ u1 = (GLdouble)NUM2DBL(arg2);
729
+ u2 = (GLdouble)NUM2DBL(arg3);
730
+ stride = (GLint)NUM2INT(arg4);
731
+ order = (GLint)NUM2INT(arg5);
732
+ points = ALLOC_N(GLdouble, order*stride);
733
+ work_ary = rb_funcall(arg6,rb_intern("flatten"),0);
734
+ ary2cdbl(work_ary, points, order*stride);
735
+ glMap1d(target, u1, u2, stride, order, points);
736
+ xfree(points);
737
+ CHECK_GLERROR
738
+ return Qnil;
739
+ }
740
+
741
+ static VALUE
742
+ gl_Map1f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
743
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
744
+ {
745
+ GLenum target;
746
+ GLfloat u1;
747
+ GLfloat u2;
748
+ GLint stride;
749
+ GLint order;
750
+ GLfloat *points;
751
+
752
+ VALUE work_ary;
753
+
754
+ target = (GLenum)NUM2INT(arg1);
755
+ u1 = (GLfloat)NUM2DBL(arg2);
756
+ u2 = (GLfloat)NUM2DBL(arg3);
757
+ stride = (GLint)NUM2INT(arg4);
758
+ order = (GLint)NUM2INT(arg5);
759
+ points = ALLOC_N(GLfloat, order*stride);
760
+ work_ary = rb_funcall(arg6,rb_intern("flatten"),0);
761
+ ary2cflt(work_ary, points, order*stride);
762
+ glMap1f(target, u1, u2, stride, order, points);
763
+ xfree(points);
764
+ CHECK_GLERROR
765
+ return Qnil;
766
+ }
767
+
768
+ static VALUE
769
+ gl_Map2d(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
770
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
771
+ {
772
+ GLenum target;
773
+ GLdouble u1;
774
+ GLdouble u2;
775
+ GLint ustride;
776
+ GLint uorder;
777
+ GLdouble v1;
778
+ GLdouble v2;
779
+ GLint vstride;
780
+ GLint vorder;
781
+ GLdouble *points;
782
+
783
+ VALUE work_ary;
784
+
785
+ target = (GLenum)NUM2INT(arg1);
786
+ u1 = (GLdouble)NUM2INT(arg2);
787
+ u2 = (GLdouble)NUM2INT(arg3);
788
+ ustride = (GLint)NUM2INT(arg4);
789
+ uorder = (GLint)NUM2INT(arg5);
790
+ v1 = (GLdouble)NUM2INT(arg6);
791
+ v2 = (GLdouble)NUM2INT(arg7);
792
+ vstride = (GLint)NUM2INT(arg8);
793
+ vorder = (GLint)NUM2INT(arg9);
794
+ points = ALLOC_N(GLdouble, MAX(ustride*uorder, vstride*vorder));
795
+ work_ary = rb_funcall(arg10,rb_intern("flatten"),0);
796
+ ary2cdbl(work_ary, points, MAX(ustride*uorder, vstride*vorder));
797
+ glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
798
+ xfree(points);
799
+ CHECK_GLERROR
800
+ return Qnil;
801
+ }
802
+
803
+ static VALUE
804
+ gl_Map2f(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
805
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
806
+ {
807
+ GLenum target;
808
+ GLfloat u1;
809
+ GLfloat u2;
810
+ GLint ustride;
811
+ GLint uorder;
812
+ GLfloat v1;
813
+ GLfloat v2;
814
+ GLint vstride;
815
+ GLint vorder;
816
+ GLfloat *points;
817
+
818
+ VALUE work_ary;
819
+
820
+ target = (GLenum)NUM2INT(arg1);
821
+ u1 = (GLfloat)NUM2INT(arg2);
822
+ u2 = (GLfloat)NUM2INT(arg3);
823
+ ustride = (GLint)NUM2INT(arg4);
824
+ uorder = (GLint)NUM2INT(arg5);
825
+ v1 = (GLfloat)NUM2INT(arg6);
826
+ v2 = (GLfloat)NUM2INT(arg7);
827
+ vstride = (GLint)NUM2INT(arg8);
828
+ vorder = (GLint)NUM2INT(arg9);
829
+ points = ALLOC_N(GLfloat, MAX(ustride*uorder, vstride*vorder));
830
+ work_ary = rb_funcall(arg10,rb_intern("flatten"),0);
831
+ ary2cflt(work_ary, points, MAX(ustride*uorder, vstride*vorder));
832
+ glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
833
+ xfree(points);
834
+ CHECK_GLERROR
835
+ return Qnil;
836
+ }
837
+
838
+ static VALUE
839
+ gl_EvalCoord1dv(obj,arg1)
840
+ VALUE obj,arg1;
841
+ {
842
+ GLdouble params[1] = {0.0};
843
+ Check_Type(arg1,T_ARRAY);
844
+ ary2cdbl(arg1,params,1);
845
+ glEvalCoord1dv(params);
846
+ CHECK_GLERROR
847
+ return Qnil;
848
+ }
849
+
850
+ static VALUE
851
+ gl_EvalCoord1fv(obj,arg1)
852
+ VALUE obj,arg1;
853
+ {
854
+ GLfloat params[1] = {(GLfloat)0.0};
855
+ Check_Type(arg1,T_ARRAY);
856
+ ary2cflt(arg1,params,1);
857
+ glEvalCoord1fv(params);
858
+ CHECK_GLERROR
859
+ return Qnil;
860
+ }
861
+
862
+ static VALUE
863
+ gl_EvalCoord2dv(obj,arg1)
864
+ VALUE obj,arg1;
865
+ {
866
+ GLdouble params[2] = {0.0,0.0};
867
+ Check_Type(arg1,T_ARRAY);
868
+ ary2cdbl(arg1,params,2);
869
+ glEvalCoord2dv(params);
870
+ CHECK_GLERROR
871
+ return Qnil;
872
+ }
873
+
874
+ static VALUE
875
+ gl_EvalCoord2fv(obj,arg1)
876
+ VALUE obj,arg1;
877
+ {
878
+ GLfloat params[2] = {(GLfloat)0.0,(GLfloat)0.0};
879
+ Check_Type(arg1,T_ARRAY);
880
+ ary2cflt(arg1,params,2);
881
+ glEvalCoord2fv(params);
882
+ CHECK_GLERROR
883
+ return Qnil;
884
+ }
885
+
886
+
887
+ #define GLPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
888
+ static VALUE \
889
+ gl_PixelMap##_type_##v(argc,argv,obj) \
890
+ int argc; \
891
+ VALUE *argv; \
892
+ VALUE obj; \
893
+ { \
894
+ GLenum map; \
895
+ _vartype_ *values; \
896
+ GLsizei size; \
897
+ VALUE args[4]; \
898
+ switch(rb_scan_args(argc, argv, "21", &args[0], &args[1], &args[2])) { \
899
+ default: \
900
+ case 2: \
901
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) \
902
+ rb_raise(rb_eArgError, "Pixel unpack buffer bound, but offset argument missing"); \
903
+ map = (GLenum)NUM2INT(args[0]); \
904
+ Check_Type(args[1],T_ARRAY); \
905
+ size = (int)RARRAY_LENINT(args[1]); \
906
+ values = ALLOC_N(_vartype_,size); \
907
+ _convert_(args[1],values,size); \
908
+ glPixelMap##_type_##v(map,size,values); \
909
+ xfree(values); \
910
+ break; \
911
+ case 3: \
912
+ if (!CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) \
913
+ rb_raise(rb_eArgError, "Pixel unpack buffer not bound"); \
914
+ map = (GLenum)NUM2INT(args[0]); \
915
+ size = (GLsizei)NUM2INT(args[1]); \
916
+ glPixelMap##_type_##v(map,size,(GLvoid *)NUM2LONG(args[2])); \
917
+ break; \
918
+ } \
919
+ CHECK_GLERROR \
920
+ return Qnil; \
921
+ }
922
+
923
+ GLPIXELMAP_FUNC(f,GLfloat,ary2cflt)
924
+ GLPIXELMAP_FUNC(ui,GLuint,ary2cuint)
925
+ GLPIXELMAP_FUNC(us,GLushort,ary2cushort)
926
+ #undef GLPIXELMAP_FUNC
927
+
928
+
929
+ static VALUE
930
+ gl_ReadPixels(argc,argv,obj)
931
+ int argc;
932
+ VALUE *argv;
933
+ VALUE obj;
934
+ {
935
+ GLint x;
936
+ GLint y;
937
+ GLsizei width;
938
+ GLsizei height;
939
+ int format;
940
+ int type;
941
+ VALUE pixels;
942
+ VALUE args[7];
943
+ int numargs;
944
+ numargs = rb_scan_args(argc, argv, "61", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5], &args[6]);
945
+ x = (GLint)NUM2INT(args[0]);
946
+ y = (GLint)NUM2INT(args[1]);
947
+ width = (GLsizei)NUM2UINT(args[2]);
948
+ height = (GLsizei)NUM2UINT(args[3]);
949
+ format = NUM2INT(args[4]);
950
+ type = NUM2INT(args[5]);
951
+
952
+ switch(numargs) {
953
+ default:
954
+ case 6:
955
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
956
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
957
+ pixels = allocate_buffer_with_string(GetDataSize(type,format,width*height));
958
+ FORCE_PIXEL_STORE_MODE
959
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING_PTR(pixels));
960
+ RESTORE_PIXEL_STORE_MODE
961
+ CHECK_GLERROR
962
+ return pixels;
963
+ break;
964
+ case 7:
965
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
966
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound");
967
+ FORCE_PIXEL_STORE_MODE
968
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)NUM2LONG(args[6]));
969
+ RESTORE_PIXEL_STORE_MODE
970
+ CHECK_GLERROR
971
+ return Qnil;
972
+ break;
973
+ }
974
+ }
975
+
976
+ static VALUE
977
+ gl_DrawPixels(obj,arg1,arg2,arg3,arg4,arg5)
978
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
979
+ {
980
+ GLsizei width;
981
+ GLsizei height;
982
+ GLenum format;
983
+ GLenum type;
984
+ const char *pixels;
985
+ width = (GLsizei)NUM2UINT(arg1);
986
+ height = (GLsizei)NUM2UINT(arg2);
987
+ format = (GLenum)NUM2INT(arg3);
988
+ type = (GLenum)NUM2INT(arg4);
989
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
990
+ glDrawPixels(width,height,format,type,(GLvoid *)NUM2LONG(arg5));
991
+ } else {
992
+ VALUE data;
993
+ data = pack_array_or_pass_string(type,arg5);
994
+ CheckDataSize(type,format,width*height,data);
995
+ pixels = RSTRING_PTR(data);
996
+ glDrawPixels(width,height,format,type,pixels);
997
+ }
998
+ CHECK_GLERROR
999
+ return Qnil;
1000
+ }
1001
+
1002
+ static VALUE
1003
+ gl_GetClipPlane(obj,arg1)
1004
+ VALUE obj,arg1;
1005
+ {
1006
+ GLenum plane;
1007
+ GLdouble equation[4] = {0.0,0.0,0.0,0.0};
1008
+ VALUE retary;
1009
+ int i;
1010
+ plane = (GLenum)NUM2INT(arg1);
1011
+ glGetClipPlane(plane,equation);
1012
+ retary = rb_ary_new2(4);
1013
+ for(i=0;i<4;i++)
1014
+ rb_ary_push(retary, rb_float_new(equation[i]));
1015
+ CHECK_GLERROR
1016
+ return retary;
1017
+ }
1018
+
1019
+ #define GLGET_FUNC(_name_,_type_,_conv_) \
1020
+ static VALUE \
1021
+ gl_Get##_name_##v(obj,arg1) \
1022
+ VALUE obj,arg1; \
1023
+ { \
1024
+ GLenum pname; \
1025
+ int nitems; \
1026
+ VALUE ary, ary2; \
1027
+ int i,j; \
1028
+ _type_ items[64]; \
1029
+ pname = NUM2INT(arg1); \
1030
+ switch(pname) { \
1031
+ case GL_ACCUM_CLEAR_VALUE: \
1032
+ case GL_BLEND_COLOR: \
1033
+ case GL_COLOR_CLEAR_VALUE: \
1034
+ case GL_COLOR_WRITEMASK: \
1035
+ case GL_CURRENT_COLOR: \
1036
+ case GL_CURRENT_RASTER_COLOR: \
1037
+ case GL_CURRENT_RASTER_POSITION: \
1038
+ case GL_CURRENT_RASTER_SECONDARY_COLOR: \
1039
+ case GL_CURRENT_RASTER_TEXTURE_COORDS: \
1040
+ case GL_CURRENT_TEXTURE_COORDS: \
1041
+ case GL_FOG_COLOR: \
1042
+ case GL_LIGHT_MODEL_AMBIENT: \
1043
+ case GL_MAP2_GRID_DOMAIN: \
1044
+ case GL_CURRENT_SECONDARY_COLOR: \
1045
+ case GL_SCISSOR_BOX: \
1046
+ case GL_TEXTURE_ENV_COLOR: \
1047
+ case GL_VIEWPORT: \
1048
+ case GL_REFERENCE_PLANE_EQUATION_SGIX: \
1049
+ case GL_FOG_OFFSET_VALUE_SGIX: \
1050
+ case GL_TEXTURE_ENV_BIAS_SGIX: \
1051
+ case GL_CULL_VERTEX_OBJECT_POSITION_EXT: \
1052
+ case GL_CULL_VERTEX_EYE_POSITION_EXT: \
1053
+ case GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX: \
1054
+ case GL_CONSTANT_COLOR0_NV: \
1055
+ case GL_CONSTANT_COLOR1_NV: \
1056
+ case GL_TEXTURE_COLOR_WRITEMASK_SGIS: \
1057
+ case GL_FLOAT_CLEAR_COLOR_VALUE_NV: \
1058
+ case GL_RGBA_SIGNED_COMPONENTS_EXT: \
1059
+ nitems = 4; \
1060
+ break; \
1061
+ case GL_CURRENT_NORMAL: \
1062
+ case GL_POINT_DISTANCE_ATTENUATION: \
1063
+ case GL_SPRITE_AXIS_SGIX: \
1064
+ case GL_SPRITE_TRANSLATION_SGIX: \
1065
+ case GL_CURRENT_RASTER_NORMAL_SGIX: \
1066
+ case GL_CURRENT_TANGENT_EXT: \
1067
+ case GL_CURRENT_BINORMAL_EXT: \
1068
+ nitems = 3; \
1069
+ break; \
1070
+ case GL_DEPTH_RANGE: \
1071
+ case GL_LINE_WIDTH_RANGE: \
1072
+ case GL_MAP1_GRID_DOMAIN: \
1073
+ case GL_MAP2_GRID_SEGMENTS: \
1074
+ case GL_MAX_VIEWPORT_DIMS: \
1075
+ case GL_POINT_SIZE_RANGE: \
1076
+ case GL_POLYGON_MODE: \
1077
+ case GL_ALIASED_LINE_WIDTH_RANGE: \
1078
+ case GL_ALIASED_POINT_SIZE_RANGE: \
1079
+ case GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX: \
1080
+ case GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX: \
1081
+ case GL_FOG_FUNC_SGIS: \
1082
+ case GL_DEPTH_BOUNDS_EXT: \
1083
+ nitems = 2; \
1084
+ break; \
1085
+ case GL_MODELVIEW_MATRIX: \
1086
+ case GL_PROJECTION_MATRIX: \
1087
+ case GL_TEXTURE_MATRIX: \
1088
+ case GL_COLOR_MATRIX: \
1089
+ case GL_TRANSPOSE_MODELVIEW_MATRIX: \
1090
+ case GL_TRANSPOSE_PROJECTION_MATRIX: \
1091
+ case GL_TRANSPOSE_TEXTURE_MATRIX: \
1092
+ case GL_TRANSPOSE_COLOR_MATRIX: \
1093
+ case GL_TRANSPOSE_CURRENT_MATRIX_ARB: \
1094
+ case GL_MODELVIEW0_ARB: \
1095
+ case GL_MODELVIEW1_ARB: \
1096
+ case GL_MODELVIEW2_ARB: \
1097
+ case GL_MODELVIEW3_ARB: \
1098
+ case GL_MODELVIEW4_ARB: \
1099
+ case GL_MODELVIEW5_ARB: \
1100
+ case GL_MODELVIEW6_ARB: \
1101
+ case GL_MODELVIEW7_ARB: \
1102
+ case GL_MODELVIEW8_ARB: \
1103
+ case GL_MODELVIEW9_ARB: \
1104
+ case GL_MODELVIEW10_ARB: \
1105
+ case GL_MODELVIEW11_ARB: \
1106
+ case GL_MODELVIEW12_ARB: \
1107
+ case GL_MODELVIEW13_ARB: \
1108
+ case GL_MODELVIEW14_ARB: \
1109
+ case GL_MODELVIEW15_ARB: \
1110
+ case GL_MODELVIEW16_ARB: \
1111
+ case GL_MODELVIEW17_ARB: \
1112
+ case GL_MODELVIEW18_ARB: \
1113
+ case GL_MODELVIEW19_ARB: \
1114
+ case GL_MODELVIEW20_ARB: \
1115
+ case GL_MODELVIEW21_ARB: \
1116
+ case GL_MODELVIEW22_ARB: \
1117
+ case GL_MODELVIEW23_ARB: \
1118
+ case GL_MODELVIEW24_ARB: \
1119
+ case GL_MODELVIEW25_ARB: \
1120
+ case GL_MODELVIEW26_ARB: \
1121
+ case GL_MODELVIEW27_ARB: \
1122
+ case GL_MODELVIEW28_ARB: \
1123
+ case GL_MODELVIEW29_ARB: \
1124
+ case GL_MODELVIEW30_ARB: \
1125
+ case GL_MODELVIEW31_ARB: \
1126
+ case GL_MATRIX_PALETTE_ARB: \
1127
+ case GL_PIXEL_TRANSFORM_2D_MATRIX_EXT: \
1128
+ case GL_MODELVIEW1_MATRIX_EXT: \
1129
+ case GL_CURRENT_MATRIX_NV: \
1130
+ glGet##_name_##v(pname, items); \
1131
+ ary = rb_ary_new2(4); \
1132
+ for (i = 0; i < 4; i++) { \
1133
+ ary2 = rb_ary_new2(4); \
1134
+ rb_ary_push(ary, ary2); \
1135
+ for (j = 0; j < 4; j++) \
1136
+ rb_ary_push(ary2, _conv_(items[i*4+j])); \
1137
+ } \
1138
+ CHECK_GLERROR \
1139
+ return ary; \
1140
+ case GL_POLYGON_STIPPLE: \
1141
+ glGet##_name_##v(pname, items); \
1142
+ CHECK_GLERROR \
1143
+ return rb_str_new((const char*)items, 32); \
1144
+ case GL_COMPRESSED_TEXTURE_FORMATS: \
1145
+ glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &nitems); \
1146
+ CHECK_GLERROR \
1147
+ if (nitems<=0||nitems>64) \
1148
+ return INT2NUM(0); \
1149
+ break; \
1150
+ default: /* size=1 */ \
1151
+ glGet##_name_##v(pname, items); \
1152
+ CHECK_GLERROR \
1153
+ return _conv_(items[0]); \
1154
+ } \
1155
+ glGet##_name_##v(pname, items); \
1156
+ ary = rb_ary_new2(nitems); \
1157
+ for (i = 0; i < nitems; i++) \
1158
+ rb_ary_push(ary, _conv_(items[i])); \
1159
+ CHECK_GLERROR \
1160
+ return ary; \
1161
+ }
1162
+
1163
+ GLGET_FUNC(Double,GLdouble,rb_float_new)
1164
+ GLGET_FUNC(Float,GLfloat,rb_float_new)
1165
+ GLGET_FUNC(Integer,GLint,INT2NUM)
1166
+ GLGET_FUNC(Boolean,GLboolean,GLBOOL2RUBY)
1167
+
1168
+ #undef GLGET_FUNC
1169
+
1170
+
1171
+ static VALUE
1172
+ gl_GetLightfv(obj,arg1,arg2)
1173
+ VALUE obj,arg1,arg2;
1174
+ {
1175
+ GLenum light;
1176
+ GLenum pname;
1177
+ GLsizei size;
1178
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
1179
+ light = (GLenum)NUM2INT(arg1);
1180
+ pname = (GLenum)NUM2INT(arg2);
1181
+ switch(pname) {
1182
+ case GL_AMBIENT:
1183
+ case GL_DIFFUSE:
1184
+ case GL_SPECULAR:
1185
+ case GL_POSITION:
1186
+ size = 4;
1187
+ break;
1188
+ case GL_SPOT_DIRECTION:
1189
+ size = 3;
1190
+ break;
1191
+ case GL_CONSTANT_ATTENUATION:
1192
+ case GL_LINEAR_ATTENUATION:
1193
+ case GL_QUADRATIC_ATTENUATION:
1194
+ case GL_SPOT_EXPONENT:
1195
+ case GL_SPOT_CUTOFF:
1196
+ size = 1;
1197
+ break;
1198
+ default:
1199
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
1200
+ break; /* not reached */
1201
+ }
1202
+ glGetLightfv(light,pname,params);
1203
+ RET_ARRAY_OR_SINGLE(size,rb_float_new,params)
1204
+ }
1205
+
1206
+ static VALUE
1207
+ gl_GetLightiv(obj,arg1,arg2)
1208
+ VALUE obj,arg1,arg2;
1209
+ {
1210
+ GLenum light;
1211
+ GLenum pname;
1212
+ GLsizei size;
1213
+ GLint params[4] = {0,0,0,0};
1214
+ light = (GLenum)NUM2INT(arg1);
1215
+ pname = (GLenum)NUM2INT(arg2);
1216
+ switch(pname) {
1217
+ case GL_AMBIENT:
1218
+ case GL_DIFFUSE:
1219
+ case GL_SPECULAR:
1220
+ case GL_POSITION:
1221
+ size = 4;
1222
+ break;
1223
+ case GL_SPOT_DIRECTION:
1224
+ size = 3;
1225
+ break;
1226
+ case GL_CONSTANT_ATTENUATION:
1227
+ case GL_LINEAR_ATTENUATION:
1228
+ case GL_QUADRATIC_ATTENUATION:
1229
+ case GL_SPOT_EXPONENT:
1230
+ case GL_SPOT_CUTOFF:
1231
+ size = 1;
1232
+ break;
1233
+ default:
1234
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
1235
+ break; /* not reached */
1236
+ }
1237
+ glGetLightiv(light,pname,params);
1238
+ RET_ARRAY_OR_SINGLE(size,INT2NUM,params)
1239
+ }
1240
+
1241
+ #define GETMAP_FUNC(_name_,_type_) \
1242
+ static VALUE \
1243
+ gl_##_name_(obj,arg1,arg2) \
1244
+ VALUE obj,arg1,arg2; \
1245
+ { \
1246
+ GLenum target; \
1247
+ GLenum query; \
1248
+ int dims; \
1249
+ int pointsize; \
1250
+ int size=0; \
1251
+ _type_ *points; \
1252
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */ \
1253
+ target = (GLenum)NUM2INT(arg1); \
1254
+ query = (GLenum)NUM2INT(arg2); \
1255
+ switch(target) { \
1256
+ case GL_MAP1_INDEX: \
1257
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break; \
1258
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break; \
1259
+ case GL_MAP1_VERTEX_3: \
1260
+ case GL_MAP1_NORMAL: \
1261
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break; \
1262
+ case GL_MAP1_COLOR_4: \
1263
+ case GL_MAP1_TEXTURE_COORD_4: \
1264
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break; \
1265
+ case GL_MAP2_INDEX: \
1266
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break; \
1267
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break; \
1268
+ case GL_MAP2_VERTEX_3: \
1269
+ case GL_MAP2_NORMAL: \
1270
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break; \
1271
+ case GL_MAP2_COLOR_4: \
1272
+ case GL_MAP2_TEXTURE_COORD_4: \
1273
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break; \
1274
+ default: \
1275
+ rb_raise(rb_eArgError, "unknown target:%d",target); \
1276
+ break; /* not reached */ \
1277
+ } \
1278
+ switch(query) { \
1279
+ case GL_ORDER: size = dims; break; \
1280
+ case GL_DOMAIN: size = dims*2; break; \
1281
+ case GL_COEFF: \
1282
+ glGetMapiv(target,GL_ORDER,order); \
1283
+ CHECK_GLERROR \
1284
+ if (dims==1) \
1285
+ size = order[0] * pointsize; \
1286
+ else \
1287
+ size = (order[0]*order[1]) * pointsize; \
1288
+ break; \
1289
+ default: \
1290
+ rb_raise(rb_eArgError, "unknown target:%d",target); \
1291
+ break; /* not reached */ \
1292
+ } \
1293
+ points = ALLOC_N(_type_,size); \
1294
+ gl##_name_(target,query,points); \
1295
+ \
1296
+ RET_ARRAY_OR_SINGLE_FREE(size,RETCONV_##_type_,points) \
1297
+ }
1298
+
1299
+ GETMAP_FUNC(GetMapdv,GLdouble)
1300
+ GETMAP_FUNC(GetMapfv,GLfloat)
1301
+ GETMAP_FUNC(GetMapiv,GLint)
1302
+ #undef GETMAP_FUNC
1303
+
1304
+ static VALUE
1305
+ gl_GetMaterialfv(obj,arg1,arg2)
1306
+ VALUE obj,arg1,arg2;
1307
+ {
1308
+ GLenum face;
1309
+ GLenum pname;
1310
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
1311
+ int size;
1312
+ face = (GLenum)NUM2INT(arg1);
1313
+ pname = (GLenum)NUM2INT(arg2);
1314
+ switch(pname) {
1315
+ case GL_AMBIENT:
1316
+ case GL_DIFFUSE:
1317
+ case GL_SPECULAR:
1318
+ case GL_EMISSION:
1319
+ size = 4;
1320
+ break;
1321
+ case GL_COLOR_INDEXES:
1322
+ size = 3;
1323
+ break;
1324
+ case GL_SHININESS:
1325
+ size = 1;
1326
+ break;
1327
+ default:
1328
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
1329
+ break; /* not reached */
1330
+ }
1331
+ glGetMaterialfv(face,pname,params);
1332
+ RET_ARRAY_OR_SINGLE(size,rb_float_new,params)
1333
+ }
1334
+
1335
+ static VALUE
1336
+ gl_GetMaterialiv(obj,arg1,arg2)
1337
+ VALUE obj,arg1,arg2;
1338
+ {
1339
+ GLenum face;
1340
+ GLenum pname;
1341
+ GLint params[4] = {0,0,0,0};
1342
+ int size;
1343
+ face = (GLenum)NUM2INT(arg1);
1344
+ pname = (GLenum)NUM2INT(arg2);
1345
+ switch(pname) {
1346
+ case GL_AMBIENT:
1347
+ case GL_DIFFUSE:
1348
+ case GL_SPECULAR:
1349
+ case GL_EMISSION:
1350
+ size = 4;
1351
+ break;
1352
+ case GL_COLOR_INDEXES:
1353
+ size = 3;
1354
+ break;
1355
+ case GL_SHININESS:
1356
+ size = 1;
1357
+ break;
1358
+ default:
1359
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
1360
+ break; /* not reached */
1361
+ }
1362
+ glGetMaterialiv(face,pname,params);
1363
+ RET_ARRAY_OR_SINGLE(size,INT2NUM,params)
1364
+ }
1365
+
1366
+ #define GLGETPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
1367
+ static VALUE \
1368
+ gl_GetPixelMap##_type_##v(argc,argv,obj) \
1369
+ int argc; \
1370
+ VALUE *argv; \
1371
+ VALUE obj; \
1372
+ { \
1373
+ GLenum map; \
1374
+ GLenum map_size; \
1375
+ GLint size = 0; \
1376
+ _vartype_ *values; \
1377
+ VALUE args[2]; \
1378
+ switch (rb_scan_args(argc, argv, "11", &args[0], &args[1])) { \
1379
+ default: \
1380
+ case 1: \
1381
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING)) \
1382
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing"); \
1383
+ \
1384
+ map = (GLenum)NUM2INT(args[0]); \
1385
+ switch(map) { \
1386
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break; \
1387
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break; \
1388
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break; \
1389
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break; \
1390
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break; \
1391
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break; \
1392
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break; \
1393
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break; \
1394
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break; \
1395
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break; \
1396
+ default: \
1397
+ rb_raise(rb_eArgError, "unknown map:%d",map); \
1398
+ break; \
1399
+ } \
1400
+ glGetIntegerv(map_size,&size); \
1401
+ CHECK_GLERROR \
1402
+ values = ALLOC_N(_vartype_,size); \
1403
+ glGetPixelMap##_type_##v(map,values); \
1404
+ RET_ARRAY_OR_SINGLE_FREE(size,_convert_,values) \
1405
+ break; \
1406
+ case 2: \
1407
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING)) \
1408
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound"); \
1409
+ \
1410
+ map = (GLenum)NUM2INT(args[0]); \
1411
+ glGetPixelMap##_type_##v(map,(GLvoid*)NUM2LONG(args[1])); \
1412
+ CHECK_GLERROR \
1413
+ return Qnil; \
1414
+ } \
1415
+ }
1416
+
1417
+ GLGETPIXELMAP_FUNC(f,GLfloat,rb_float_new)
1418
+ GLGETPIXELMAP_FUNC(ui,GLuint,INT2NUM)
1419
+ GLGETPIXELMAP_FUNC(us,GLushort,INT2NUM)
1420
+ #undef GLGETPIXELMAP_FUNC
1421
+
1422
+ static VALUE
1423
+ gl_GetPolygonStipple(argc,argv,obj)
1424
+ int argc;
1425
+ VALUE *argv;
1426
+ VALUE obj;
1427
+ {
1428
+ VALUE args[1];
1429
+ GLubyte mask[128];
1430
+ switch(rb_scan_args(argc, argv, "01", &args[0])) {
1431
+ default:
1432
+ case 0:
1433
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1434
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
1435
+ memset(mask, 0x0, sizeof(GLubyte)*128);
1436
+ FORCE_PIXEL_STORE_MODE
1437
+ glGetPolygonStipple(mask);
1438
+ RESTORE_PIXEL_STORE_MODE
1439
+ CHECK_GLERROR
1440
+ return rb_str_new((const char*)mask, 128);
1441
+ case 1:
1442
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1443
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound");
1444
+ glGetPolygonStipple((GLvoid *)NUM2LONG(args[0]));
1445
+ CHECK_GLERROR
1446
+ return Qnil;
1447
+ }
1448
+ }
1449
+
1450
+ static VALUE
1451
+ gl_GetString(obj,arg1)
1452
+ VALUE obj,arg1;
1453
+ {
1454
+ GLenum name;
1455
+ const GLubyte *ret;
1456
+ name = (GLenum)NUM2INT(arg1);
1457
+ ret = glGetString(name);
1458
+ CHECK_GLERROR
1459
+ return rb_str_new2((const char*)ret);
1460
+ }
1461
+
1462
+ #define GETTEXENVFUNC(_name_,_type_) \
1463
+ static VALUE \
1464
+ gl_##_name_(obj,arg1,arg2) \
1465
+ VALUE obj,arg1,arg2; \
1466
+ { \
1467
+ GLenum target; \
1468
+ GLenum pname; \
1469
+ _type_ params[4] = {(_type_)0.0, (_type_)0.0, (_type_)0.0, (_type_)0.0}; \
1470
+ int size; \
1471
+ target = (GLenum)NUM2INT(arg1); \
1472
+ pname = (GLenum)NUM2INT(arg2); \
1473
+ switch(pname) { \
1474
+ case GL_TEXTURE_ENV_COLOR: \
1475
+ case GL_TEXTURE_ENV_BIAS_SGIX: \
1476
+ case GL_CULL_MODES_NV: \
1477
+ case GL_OFFSET_TEXTURE_MATRIX_NV: \
1478
+ size = 4; \
1479
+ break; \
1480
+ case GL_CONST_EYE_NV: \
1481
+ size = 3; \
1482
+ break; \
1483
+ default: \
1484
+ size = 1; \
1485
+ break; \
1486
+ } \
1487
+ gl##_name_(target,pname,params); \
1488
+ RET_ARRAY_OR_SINGLE(size,RETCONV_##_type_,params) \
1489
+ }
1490
+
1491
+ GETTEXENVFUNC(GetTexEnvfv,GLfloat)
1492
+ GETTEXENVFUNC(GetTexEnviv,GLint)
1493
+ #undef GETTEXENVFUNC
1494
+
1495
+ #define GETTEXGENFUNC(_name_,_type_) \
1496
+ static VALUE \
1497
+ gl_##_name_(obj,arg1,arg2) \
1498
+ VALUE obj,arg1,arg2; \
1499
+ { \
1500
+ GLenum coord; \
1501
+ GLenum pname; \
1502
+ _type_ params[4] = {(_type_)0.0, (_type_)0.0, (_type_)0.0, (_type_)0.0}; \
1503
+ int size; \
1504
+ coord = (GLenum)NUM2INT(arg1); \
1505
+ pname = (GLenum)NUM2INT(arg2); \
1506
+ switch(pname) { \
1507
+ case GL_OBJECT_PLANE: \
1508
+ case GL_EYE_PLANE: \
1509
+ size = 4; \
1510
+ break; \
1511
+ default: \
1512
+ size = 1; \
1513
+ break; \
1514
+ } \
1515
+ gl##_name_(coord,pname,params); \
1516
+ RET_ARRAY_OR_SINGLE(size,RETCONV_##_type_,params) \
1517
+ }
1518
+
1519
+ GETTEXGENFUNC(GetTexGendv,GLdouble)
1520
+ GETTEXGENFUNC(GetTexGenfv,GLfloat)
1521
+ GETTEXGENFUNC(GetTexGeniv,GLint)
1522
+ #undef GETTEXGENFUNC
1523
+
1524
+ static VALUE
1525
+ gl_GetTexImage(argc,argv,obj)
1526
+ int argc;
1527
+ VALUE *argv;
1528
+ VALUE obj;
1529
+ {
1530
+ GLenum tex;
1531
+ GLint lod;
1532
+ GLenum format;
1533
+ GLenum type;
1534
+ GLint width = 0;
1535
+ GLint height = 0;
1536
+ GLint depth = 0;
1537
+ GLint size4d = 0;
1538
+ GLint size;
1539
+ VALUE pixels;
1540
+ VALUE args[5];
1541
+ int numargs;
1542
+ numargs = rb_scan_args(argc, argv, "41", &args[0], &args[1], &args[2], &args[3], &args[4]);
1543
+ tex = (GLenum)NUM2INT(args[0]);
1544
+ lod = (GLint)NUM2INT(args[1]);
1545
+ format = (GLenum)NUM2INT(args[2]);
1546
+ type = (GLenum)NUM2INT(args[3]);
1547
+ switch(numargs) {
1548
+ default:
1549
+ case 4:
1550
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1551
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
1552
+
1553
+ size = 1;
1554
+ switch(tex) {
1555
+ case GL_TEXTURE_4D_SGIS:
1556
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_4DSIZE_SGIS,&size4d);
1557
+ size *= size4d;
1558
+ /* fall through */
1559
+ case GL_TEXTURE_3D:
1560
+ case GL_TEXTURE_1D_STACK_MESAX:
1561
+ case GL_TEXTURE_2D_STACK_MESAX:
1562
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_DEPTH,&depth);
1563
+ size *= depth;
1564
+ /* fall through */
1565
+ case GL_TEXTURE_2D:
1566
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
1567
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
1568
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
1569
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
1570
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
1571
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
1572
+ case GL_TEXTURE_RECTANGLE_ARB:
1573
+ case GL_DETAIL_TEXTURE_2D_SGIS:
1574
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_HEIGHT,&height);
1575
+ size *= height;
1576
+ /* fall through */
1577
+ case GL_TEXTURE_1D:
1578
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_WIDTH,&width);
1579
+ size *= width;
1580
+ break;
1581
+ default:
1582
+ rb_raise(rb_eArgError, "Target type not supported");
1583
+ }
1584
+ CHECK_GLERROR
1585
+ pixels = allocate_buffer_with_string(GetDataSize(type,format,size));
1586
+
1587
+ FORCE_PIXEL_STORE_MODE
1588
+ glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING_PTR(pixels));
1589
+ RESTORE_PIXEL_STORE_MODE
1590
+ CHECK_GLERROR
1591
+ return pixels;
1592
+ break;
1593
+ case 5:
1594
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1595
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound");
1596
+
1597
+ FORCE_PIXEL_STORE_MODE
1598
+ glGetTexImage(tex,lod,format,type,(GLvoid*)NUM2LONG(args[4]));
1599
+ RESTORE_PIXEL_STORE_MODE
1600
+ CHECK_GLERROR
1601
+ return Qnil;
1602
+ }
1603
+ }
1604
+
1605
+ static VALUE
1606
+ gl_GetTexParameterfv(obj,arg1,arg2)
1607
+ VALUE obj,arg1,arg2;
1608
+ {
1609
+ GLenum target;
1610
+ GLenum pname;
1611
+ GLfloat params[4] = {(GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0, (GLfloat)0.0};
1612
+ int size;
1613
+ target = (GLenum)NUM2INT(arg1);
1614
+ pname = (GLenum)NUM2INT(arg2);
1615
+ switch(pname) {
1616
+ case GL_TEXTURE_BORDER_COLOR:
1617
+ case GL_TEXTURE_BORDER_VALUES_NV:
1618
+ case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
1619
+ case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
1620
+ size = 4;
1621
+ break;
1622
+ default:
1623
+ size = 1;
1624
+ break;
1625
+ }
1626
+ glGetTexParameterfv(target,pname,params);
1627
+ RET_ARRAY_OR_SINGLE(size,RETCONV_GLfloat,params)
1628
+ }
1629
+
1630
+ static VALUE
1631
+ gl_GetTexParameteriv(obj,arg1,arg2)
1632
+ VALUE obj,arg1,arg2;
1633
+ {
1634
+ GLenum target;
1635
+ GLenum pname;
1636
+ GLint params[4] = {0,0,0,0};
1637
+ int size;
1638
+ target = (GLenum)NUM2INT(arg1);
1639
+ pname = (GLenum)NUM2INT(arg2);
1640
+ switch(pname) {
1641
+ case GL_TEXTURE_BORDER_COLOR:
1642
+ case GL_TEXTURE_BORDER_VALUES_NV:
1643
+ case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
1644
+ case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
1645
+ size = 4;
1646
+ break;
1647
+ default:
1648
+ size = 1;
1649
+ break;
1650
+ }
1651
+ glGetTexParameteriv(target,pname,params);
1652
+ RET_ARRAY_OR_SINGLE_BOOL(size,cond_GLBOOL2RUBY,pname,params)
1653
+ }
1654
+
1655
+ static VALUE
1656
+ gl_GetTexLevelParameterfv(obj,arg1,arg2,arg3)
1657
+ VALUE obj,arg1,arg2,arg3;
1658
+ {
1659
+ GLenum target;
1660
+ GLint level;
1661
+ GLenum pname;
1662
+ GLfloat params = (GLfloat)0.0;
1663
+ target = (GLenum)NUM2INT(arg1);
1664
+ level = (GLint)NUM2INT(arg2);
1665
+ pname = (GLenum)NUM2INT(arg3);
1666
+ glGetTexLevelParameterfv(target,level,pname,&params);
1667
+ CHECK_GLERROR
1668
+ return RETCONV_GLfloat(params);
1669
+ }
1670
+
1671
+ static VALUE
1672
+ gl_GetTexLevelParameteriv(obj,arg1,arg2,arg3)
1673
+ VALUE obj,arg1,arg2,arg3;
1674
+ {
1675
+ GLenum target;
1676
+ GLint level;
1677
+ GLenum pname;
1678
+ GLint params = 0;
1679
+ target = (GLenum)NUM2INT(arg1);
1680
+ level = (GLint)NUM2INT(arg2);
1681
+ pname = (GLenum)NUM2INT(arg3);
1682
+ glGetTexLevelParameteriv(target,level,pname,&params);
1683
+ CHECK_GLERROR
1684
+ return cond_GLBOOL2RUBY(pname,params);
1685
+ }
1686
+
1687
+
1688
+ static VALUE
1689
+ gl_LoadMatrixf(obj,arg1)
1690
+ VALUE obj,arg1;
1691
+ {
1692
+ GLfloat m[4*4];
1693
+ ary2cmatfloat(arg1, m, 4, 4);
1694
+ glLoadMatrixf(m);
1695
+ CHECK_GLERROR
1696
+ return Qnil;
1697
+ }
1698
+
1699
+ static VALUE
1700
+ gl_LoadMatrixd(obj,arg1)
1701
+ VALUE obj,arg1;
1702
+ {
1703
+ GLdouble m[4*4];
1704
+ ary2cmatdouble(arg1, m, 4, 4);
1705
+ glLoadMatrixd(m);
1706
+ CHECK_GLERROR
1707
+ return Qnil;
1708
+ }
1709
+
1710
+ static VALUE
1711
+ gl_MultMatrixf(obj,arg1)
1712
+ VALUE obj,arg1;
1713
+ {
1714
+ GLfloat m[4*4];
1715
+ ary2cmatfloat(arg1, m, 4, 4);
1716
+ glMultMatrixf(m);
1717
+ CHECK_GLERROR
1718
+ return Qnil;
1719
+ }
1720
+
1721
+ static VALUE
1722
+ gl_MultMatrixd(obj,arg1)
1723
+ VALUE obj,arg1;
1724
+ {
1725
+ GLdouble m[4*4];
1726
+ ary2cmatdouble(arg1, m, 4, 4);
1727
+ glMultMatrixd(m);
1728
+ CHECK_GLERROR
1729
+ return Qnil;
1730
+ }
1731
+
1732
+
1733
+ static VALUE g_Vertex_ptr;
1734
+ static VALUE g_Normal_ptr;
1735
+ static VALUE g_Color_ptr;
1736
+ static VALUE g_Index_ptr;
1737
+ static VALUE g_TexCoord_ptr;
1738
+ static VALUE g_EdgeFlag_ptr;
1739
+ VALUE g_FogCoord_ptr; /* OpenGL 1.4 */
1740
+ VALUE g_SecondaryColor_ptr; /* OpenGL 1.4 */
1741
+ #define POINTER_FUNC(_func_) \
1742
+ static VALUE \
1743
+ gl_##_func_##Pointer(obj, arg1, arg2, arg3, arg4) \
1744
+ VALUE obj, arg1, arg2, arg3, arg4; \
1745
+ { \
1746
+ GLint size; \
1747
+ GLenum type; \
1748
+ GLsizei stride; \
1749
+ size = (GLint)NUM2INT(arg1); \
1750
+ type = (GLenum)NUM2INT(arg2); \
1751
+ stride = (GLsizei)NUM2UINT(arg3); \
1752
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) { \
1753
+ g_##_func_##_ptr = arg4; \
1754
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)NUM2LONG(arg4)); \
1755
+ } else { \
1756
+ VALUE data; \
1757
+ data = pack_array_or_pass_string(type,arg4); \
1758
+ rb_str_freeze(data); \
1759
+ g_##_func_##_ptr = data; \
1760
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING_PTR(data)); \
1761
+ } \
1762
+ CHECK_GLERROR \
1763
+ return Qnil; \
1764
+ }
1765
+
1766
+ POINTER_FUNC(Vertex)
1767
+ POINTER_FUNC(Color)
1768
+ POINTER_FUNC(TexCoord)
1769
+
1770
+ #undef POINTER_FUNC
1771
+
1772
+ static VALUE
1773
+ gl_DrawElements(obj,arg1,arg2,arg3,arg4)
1774
+ VALUE obj,arg1,arg2,arg3,arg4;
1775
+ {
1776
+ GLenum mode;
1777
+ GLsizei count;
1778
+ GLenum type;
1779
+ mode = (GLenum)NUM2INT(arg1);
1780
+ count = (GLsizei)NUM2UINT(arg2);
1781
+ type = (GLenum)NUM2INT(arg3);
1782
+ if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
1783
+ glDrawElements(mode, count, type, (const GLvoid*)NUM2LONG(arg4));
1784
+ } else {
1785
+ VALUE data;
1786
+ data = pack_array_or_pass_string(type,arg4);
1787
+ glDrawElements(mode, count, type, (const GLvoid*)RSTRING_PTR(data));
1788
+ }
1789
+ CHECK_GLERROR
1790
+ return Qnil;
1791
+ }
1792
+
1793
+ static VALUE
1794
+ gl_EdgeFlagPointer(obj,arg1,arg2)
1795
+ VALUE obj,arg1,arg2;
1796
+ {
1797
+ GLsizei stride;
1798
+ stride = (GLsizei)NUM2UINT(arg1);
1799
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
1800
+ g_EdgeFlag_ptr = arg2;
1801
+ glEdgeFlagPointer(stride, (const GLvoid*) NUM2LONG(arg2));
1802
+ } else {
1803
+ VALUE data;
1804
+ data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg2);
1805
+ rb_str_freeze(data);
1806
+ g_EdgeFlag_ptr = data;
1807
+ glEdgeFlagPointer(stride, (const GLvoid*)RSTRING_PTR(data));
1808
+ }
1809
+ CHECK_GLERROR
1810
+ return Qnil;
1811
+ }
1812
+
1813
+ static VALUE
1814
+ gl_GetPointerv(obj,arg1)
1815
+ VALUE obj,arg1;
1816
+ {
1817
+ GLenum pname;
1818
+ pname = (GLenum)NUM2INT(arg1);
1819
+ switch (pname) {
1820
+ case GL_VERTEX_ARRAY_POINTER:
1821
+ return g_Vertex_ptr;
1822
+ case GL_NORMAL_ARRAY_POINTER:
1823
+ return g_Normal_ptr;
1824
+ case GL_COLOR_ARRAY_POINTER:
1825
+ return g_Color_ptr;
1826
+ case GL_INDEX_ARRAY_POINTER:
1827
+ return g_Index_ptr;
1828
+ case GL_TEXTURE_COORD_ARRAY_POINTER:
1829
+ return g_TexCoord_ptr;
1830
+ case GL_EDGE_FLAG_ARRAY_POINTER:
1831
+ return g_EdgeFlag_ptr;
1832
+ case GL_FOG_COORD_ARRAY_POINTER:
1833
+ return g_FogCoord_ptr;
1834
+ case GL_SECONDARY_COLOR_ARRAY_POINTER:
1835
+ return g_SecondaryColor_ptr;
1836
+ case GL_FEEDBACK_BUFFER_POINTER:
1837
+ return g_current_feed_buffer;
1838
+ case GL_SELECTION_BUFFER_POINTER:
1839
+ return g_current_sel_buffer;
1840
+ default:
1841
+ rb_raise(rb_eArgError, "Invalid pname %d",pname);
1842
+ break; /* not reached */
1843
+ }
1844
+ return Qnil;
1845
+ }
1846
+
1847
+ static VALUE
1848
+ gl_IndexPointer(obj,arg1,arg2,arg3)
1849
+ VALUE obj,arg1,arg2,arg3;
1850
+ {
1851
+ GLenum type;
1852
+ GLsizei stride;
1853
+ type = (GLenum)NUM2INT(arg1);
1854
+ stride = (GLsizei)NUM2UINT(arg2);
1855
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
1856
+ g_Index_ptr = arg3;
1857
+ glIndexPointer(type, stride, (const GLvoid*)NUM2LONG(arg3));
1858
+ } else {
1859
+ VALUE data;
1860
+ data = pack_array_or_pass_string(type,arg3);
1861
+ g_Index_ptr = data;
1862
+ glIndexPointer(type, stride, (const GLvoid*)RSTRING_PTR(data));
1863
+ }
1864
+ CHECK_GLERROR
1865
+ return Qnil;
1866
+ }
1867
+
1868
+ static VALUE
1869
+ gl_InterleavedArrays(obj,arg1,arg2,arg3)
1870
+ VALUE obj,arg1,arg2,arg3;
1871
+ {
1872
+ GLenum format;
1873
+ GLsizei stride;
1874
+ VALUE data;
1875
+ format = (GLenum)NUM2INT(arg1);
1876
+ stride = (GLsizei)NUM2UINT(arg2);
1877
+ /* FIXME: add support for GL_C4UB_V2F,GL_C4UB_V3F, GL_T2F_C4UB_V3 */
1878
+ data = pack_array_or_pass_string(GL_FLOAT,arg3);
1879
+ rb_str_freeze(data);
1880
+ glInterleavedArrays(format, stride, (const GLvoid*)RSTRING_PTR(data));
1881
+ CHECK_GLERROR
1882
+ return Qnil;
1883
+ }
1884
+
1885
+ static VALUE
1886
+ gl_NormalPointer(obj,arg1,arg2,arg3)
1887
+ VALUE obj,arg1,arg2,arg3;
1888
+ {
1889
+ GLenum type;
1890
+ GLsizei stride;
1891
+ type = (GLenum)NUM2INT(arg1);
1892
+ stride = (GLsizei)NUM2UINT(arg2);
1893
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
1894
+ g_Normal_ptr = arg3;
1895
+ glNormalPointer(type, stride, (const GLvoid*)NUM2LONG(arg3));
1896
+ } else {
1897
+ VALUE data;
1898
+ data = pack_array_or_pass_string(type,arg3);
1899
+ rb_str_freeze(data);
1900
+ g_Normal_ptr = data;
1901
+ glNormalPointer(type, stride, (const GLvoid*)RSTRING_PTR(data));
1902
+ }
1903
+ CHECK_GLERROR
1904
+ return Qnil;
1905
+ }
1906
+
1907
+
1908
+ static VALUE
1909
+ gl_TexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
1910
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
1911
+ {
1912
+ GLenum target;
1913
+ GLint level;
1914
+ GLint xoffset;
1915
+ GLsizei width;
1916
+ GLenum format;
1917
+ GLenum type;
1918
+ VALUE data;
1919
+ target = (GLenum)NUM2INT(arg1);
1920
+ level = (GLint)NUM2INT(arg2);
1921
+ xoffset = (GLint)NUM2INT(arg3);
1922
+ width = (GLsizei)NUM2UINT(arg4);
1923
+ format = (GLenum)NUM2INT(arg5);
1924
+ type = (GLenum)NUM2INT(arg6);
1925
+
1926
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
1927
+ glTexSubImage1D(target,level,xoffset,width,format,type,(GLvoid *)NUM2LONG(arg7));
1928
+ CHECK_GLERROR
1929
+ return Qnil;
1930
+ }
1931
+
1932
+ data = pack_array_or_pass_string(type,arg7);
1933
+ CheckDataSize(type,format,width,data);
1934
+
1935
+ glTexSubImage1D(target,level,xoffset,width,format,type,RSTRING_PTR(data));
1936
+ CHECK_GLERROR
1937
+ return Qnil;
1938
+ }
1939
+
1940
+ static VALUE
1941
+ gl_TexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
1942
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
1943
+ {
1944
+ GLenum target;
1945
+ GLint level;
1946
+ GLint xoffset;
1947
+ GLint yoffset;
1948
+ GLsizei width;
1949
+ GLsizei height;
1950
+ GLenum format;
1951
+ GLenum type;
1952
+ VALUE data;
1953
+ target = (GLenum)NUM2INT(arg1);
1954
+ level = (GLint)NUM2INT(arg2);
1955
+ xoffset = (GLint)NUM2INT(arg3);
1956
+ yoffset = (GLint)NUM2INT(arg4);
1957
+ width = (GLsizei)NUM2UINT(arg5);
1958
+ height = (GLsizei)NUM2UINT(arg6);
1959
+ format = (GLenum)NUM2INT(arg7);
1960
+ type = (GLenum)NUM2INT(arg8);
1961
+
1962
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
1963
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,(GLvoid *)NUM2LONG(arg9));
1964
+ CHECK_GLERROR
1965
+ return Qnil;
1966
+ }
1967
+
1968
+ data = pack_array_or_pass_string(type,arg9);
1969
+ CheckDataSize(type,format,width*height,data);
1970
+
1971
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,RSTRING_PTR(data));
1972
+ CHECK_GLERROR
1973
+ return Qnil;
1974
+ }
1975
+
1976
+ static VALUE
1977
+ gl_AreTexturesResident(obj,arg1)
1978
+ VALUE obj,arg1;
1979
+ {
1980
+ GLuint *textures;
1981
+ GLboolean *residences;
1982
+ GLsizei size;
1983
+ GLboolean r;
1984
+ VALUE retary;
1985
+ VALUE ary;
1986
+ int i;
1987
+ ary = rb_Array(arg1);
1988
+ size = (int)RARRAY_LENINT(ary);
1989
+ textures = ALLOC_N(GLuint,size);
1990
+ residences = ALLOC_N(GLboolean,size);
1991
+ ary2cuint(ary,textures,size);
1992
+ r = glAreTexturesResident(size,textures,residences);
1993
+ retary = rb_ary_new2(size);
1994
+ if (r==GL_TRUE) { /* all are resident */
1995
+ for(i=0;i<size;i++)
1996
+ rb_ary_push(retary, GLBOOL2RUBY(GL_TRUE));
1997
+ } else {
1998
+ for(i=0;i<size;i++)
1999
+ rb_ary_push(retary, GLBOOL2RUBY(residences[i]));
2000
+ }
2001
+ xfree(textures);
2002
+ xfree(residences);
2003
+ CHECK_GLERROR
2004
+ return retary;
2005
+ }
2006
+
2007
+ GL_FUNC_GENOBJECTS(GenTextures)
2008
+ GL_FUNC_DELETEOBJECTS(DeleteTextures)
2009
+
2010
+ static VALUE
2011
+ gl_PrioritizeTextures(obj,arg1,arg2)
2012
+ VALUE obj,arg1,arg2;
2013
+ {
2014
+ GLuint *textures;
2015
+ GLclampf *priorities;
2016
+ GLsizei size;
2017
+ Check_Type(arg1,T_ARRAY);
2018
+ Check_Type(arg2,T_ARRAY);
2019
+ if ((size = (GLsizei)RARRAY_LENINT(arg1)) != (GLsizei)RARRAY_LENINT(arg2))
2020
+ rb_raise(rb_eArgError, "passed arrays must have the same length");
2021
+ textures = ALLOC_N(GLuint,size);
2022
+ priorities = ALLOC_N(GLclampf,size);
2023
+ ary2cuint(arg1,textures,size);
2024
+ ary2cflt(arg2,priorities,size);
2025
+ glPrioritizeTextures(size,textures,priorities);
2026
+ xfree(textures);
2027
+ xfree(priorities);
2028
+ CHECK_GLERROR
2029
+ return Qnil;
2030
+ }
2031
+
2032
+ static VALUE
2033
+ gl_Indexubv(obj,arg1)
2034
+ VALUE obj,arg1;
2035
+ {
2036
+ GLubyte c[1] = {0};
2037
+ Check_Type(arg1,T_ARRAY);
2038
+ ary2cubyte(arg1,c,1);
2039
+ glIndexubv(c);
2040
+ CHECK_GLERROR
2041
+ return Qnil;
2042
+ }
2043
+
2044
+
2045
+ /* additional functions */
2046
+
2047
+ #define GLCOLOR_VFUNC(_type_) \
2048
+ static VALUE \
2049
+ gl_Color##_type_##v(argc,argv,obj) \
2050
+ int argc; \
2051
+ VALUE *argv; \
2052
+ VALUE obj; \
2053
+ { \
2054
+ int num; \
2055
+ VALUE ary, args[4]; \
2056
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
2057
+ case 1: \
2058
+ if (TYPE(args[0]) == T_ARRAY) { \
2059
+ ary = args[0]; \
2060
+ switch (RARRAY_LEN(ary)) { \
2061
+ case 3: \
2062
+ gl_Color3##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2]); \
2063
+ break; \
2064
+ case 4: \
2065
+ gl_Color4##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2],RARRAY_PTR(ary)[3]); \
2066
+ break; \
2067
+ default: \
2068
+ rb_raise(rb_eArgError, "array length:%li", RARRAY_LEN(ary)); \
2069
+ } \
2070
+ } \
2071
+ else \
2072
+ Check_Type(args[0],T_ARRAY); /* force exception */ \
2073
+ break; \
2074
+ case 3: \
2075
+ gl_Color3##_type_(obj,args[0], args[1], args[2]); \
2076
+ break; \
2077
+ case 4: \
2078
+ gl_Color4##_type_(obj,args[0], args[1], args[2], args[3]); \
2079
+ break; \
2080
+ default: \
2081
+ rb_raise(rb_eArgError, "arg length:%d", num); \
2082
+ } \
2083
+ return Qnil; \
2084
+ }
2085
+
2086
+ GLCOLOR_VFUNC(b)
2087
+ GLCOLOR_VFUNC(d)
2088
+ GLCOLOR_VFUNC(f)
2089
+ GLCOLOR_VFUNC(i)
2090
+ GLCOLOR_VFUNC(s)
2091
+ GLCOLOR_VFUNC(ub)
2092
+ GLCOLOR_VFUNC(ui)
2093
+ GLCOLOR_VFUNC(us)
2094
+ #undef GLCOLOR_VFUNC
2095
+
2096
+ #define GLNORMAL_VFUNC(_type_) \
2097
+ static VALUE \
2098
+ gl_Normal##_type_##v(argc,argv,obj) \
2099
+ int argc; \
2100
+ VALUE *argv; \
2101
+ VALUE obj; \
2102
+ { \
2103
+ int num; \
2104
+ VALUE ary, args[3]; \
2105
+ switch (num = rb_scan_args(argc, argv, "12", &args[0], &args[1], &args[2])) { \
2106
+ case 1: \
2107
+ if (TYPE(args[0]) == T_ARRAY) { \
2108
+ ary = args[0]; \
2109
+ switch (RARRAY_LEN(ary)) { \
2110
+ case 3: \
2111
+ gl_Normal3##_type_(obj,RARRAY_PTR(ary)[0], RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2]); \
2112
+ break; \
2113
+ default: \
2114
+ rb_raise(rb_eArgError, "array length:%li", RARRAY_LEN(ary)); \
2115
+ } \
2116
+ } \
2117
+ else \
2118
+ Check_Type(args[0],T_ARRAY); /* force exception */ \
2119
+ break; \
2120
+ case 3: \
2121
+ gl_Normal3##_type_(obj,args[0], args[1], args[2]); \
2122
+ break; \
2123
+ default: \
2124
+ rb_raise(rb_eArgError, "arg length:%d",num); \
2125
+ } \
2126
+ return Qnil; \
2127
+ }
2128
+
2129
+ GLNORMAL_VFUNC(b)
2130
+ GLNORMAL_VFUNC(d)
2131
+ GLNORMAL_VFUNC(f)
2132
+ GLNORMAL_VFUNC(i)
2133
+ GLNORMAL_VFUNC(s)
2134
+ #undef GLNORMAL_VFUNC
2135
+
2136
+ #define GLRASTERPOS_VFUNC(_type_) \
2137
+ static VALUE \
2138
+ gl_RasterPos##_type_##v(argc,argv,obj) \
2139
+ int argc; \
2140
+ VALUE *argv; \
2141
+ VALUE obj; \
2142
+ { \
2143
+ int num; \
2144
+ VALUE ary, args[4]; \
2145
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
2146
+ case 1: \
2147
+ if (TYPE(args[0]) == T_ARRAY) { \
2148
+ ary = args[0]; \
2149
+ switch (RARRAY_LEN(ary)) { \
2150
+ case 2: \
2151
+ gl_RasterPos2##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1]); \
2152
+ break; \
2153
+ case 3: \
2154
+ gl_RasterPos3##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2]); \
2155
+ break; \
2156
+ case 4: \
2157
+ gl_RasterPos4##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2],RARRAY_PTR(ary)[3]); \
2158
+ break; \
2159
+ default: \
2160
+ rb_raise(rb_eArgError, "array length:%d", num); \
2161
+ } \
2162
+ } \
2163
+ else \
2164
+ Check_Type(args[0],T_ARRAY); /* force exception */ \
2165
+ break; \
2166
+ case 2: \
2167
+ gl_RasterPos2##_type_(obj,args[0], args[1]); \
2168
+ break; \
2169
+ case 3: \
2170
+ gl_RasterPos3##_type_(obj,args[0], args[1], args[2]); \
2171
+ break; \
2172
+ case 4: \
2173
+ gl_RasterPos4##_type_(obj,args[0], args[1], args[2], args[3]); \
2174
+ break; \
2175
+ default: \
2176
+ rb_raise(rb_eArgError, "too many arguments"); \
2177
+ } \
2178
+ return Qnil; \
2179
+ }
2180
+
2181
+ GLRASTERPOS_VFUNC(d)
2182
+ GLRASTERPOS_VFUNC(f)
2183
+ GLRASTERPOS_VFUNC(i)
2184
+ GLRASTERPOS_VFUNC(s)
2185
+ #undef GLRASTERPOS_VFUNC
2186
+
2187
+ #define GLRECT_VFUNC(_type_) \
2188
+ static VALUE \
2189
+ gl_Rect##_type_##v(argc,argv,obj) \
2190
+ int argc; \
2191
+ VALUE *argv; \
2192
+ VALUE obj; \
2193
+ { \
2194
+ int num; \
2195
+ VALUE ary, ary2, args[4]; \
2196
+ switch (num = rb_scan_args(argc, argv, "22", &args[0], &args[1], &args[2], &args[3])) { \
2197
+ case 2: \
2198
+ if (TYPE(args[0]) == T_ARRAY && TYPE(args[1]) == T_ARRAY) { \
2199
+ ary = args[0]; \
2200
+ ary2 = args[1]; \
2201
+ switch (RARRAY_LEN(ary)) { \
2202
+ case 2: \
2203
+ gl_Rect##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary2)[0],RARRAY_PTR(ary2)[1]); \
2204
+ break; \
2205
+ default: \
2206
+ rb_raise(rb_eArgError, "array length:%li", RARRAY_LEN(ary)); \
2207
+ } \
2208
+ } \
2209
+ else \
2210
+ Check_Type(args[0],T_ARRAY); /* force exception */ \
2211
+ break; \
2212
+ case 4: \
2213
+ gl_Rect##_type_(obj,args[0], args[1], args[2], args[3]); \
2214
+ break; \
2215
+ default: \
2216
+ rb_raise(rb_eArgError, "arg length:%d", num); \
2217
+ } \
2218
+ return Qnil; \
2219
+ }
2220
+
2221
+ GLRECT_VFUNC(d)
2222
+ GLRECT_VFUNC(f)
2223
+ GLRECT_VFUNC(i)
2224
+ GLRECT_VFUNC(s)
2225
+ #undef GLRECT_VFUNC
2226
+
2227
+ #define GLTEXCOORD_VFUNC(_type_) \
2228
+ static VALUE \
2229
+ gl_TexCoord##_type_##v(argc,argv,obj) \
2230
+ int argc; \
2231
+ VALUE *argv; \
2232
+ VALUE obj; \
2233
+ { \
2234
+ int num; \
2235
+ VALUE ary, args[4]; \
2236
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
2237
+ case 1: \
2238
+ if (TYPE(args[0]) == T_ARRAY) { \
2239
+ ary = args[0]; \
2240
+ switch (RARRAY_LEN(ary)) { \
2241
+ case 1: \
2242
+ gl_TexCoord1##_type_(obj,RARRAY_PTR(ary)[0]); \
2243
+ break; \
2244
+ case 2: \
2245
+ gl_TexCoord2##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1]); \
2246
+ break; \
2247
+ case 3: \
2248
+ gl_TexCoord3##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2]); \
2249
+ break; \
2250
+ case 4: \
2251
+ gl_TexCoord4##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2],RARRAY_PTR(ary)[3]); \
2252
+ break; \
2253
+ default: \
2254
+ rb_raise(rb_eArgError, "array length:%d", num); \
2255
+ } \
2256
+ } \
2257
+ else \
2258
+ gl_TexCoord1##_type_(obj,args[0]); \
2259
+ break; \
2260
+ case 2: \
2261
+ gl_TexCoord2##_type_(obj,args[0], args[1]); \
2262
+ break; \
2263
+ case 3: \
2264
+ gl_TexCoord3##_type_(obj,args[0], args[1], args[2]); \
2265
+ break; \
2266
+ case 4: \
2267
+ gl_TexCoord4##_type_(obj,args[0], args[1], args[2], args[3]); \
2268
+ break; \
2269
+ default: \
2270
+ rb_raise(rb_eArgError, "too many arguments"); \
2271
+ break; \
2272
+ } \
2273
+ return Qnil; \
2274
+ }
2275
+
2276
+ GLTEXCOORD_VFUNC(d)
2277
+ GLTEXCOORD_VFUNC(f)
2278
+ GLTEXCOORD_VFUNC(i)
2279
+ GLTEXCOORD_VFUNC(s)
2280
+ #undef GLTEXCOORD_VFUNC
2281
+
2282
+ #define GLVERTEX_VFUNC(_type_) \
2283
+ static VALUE \
2284
+ gl_Vertex##_type_##v(argc,argv,obj) \
2285
+ int argc; \
2286
+ VALUE *argv; \
2287
+ VALUE obj; \
2288
+ { \
2289
+ VALUE ary, args[4]; \
2290
+ switch (rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
2291
+ case 1: \
2292
+ if (TYPE(args[0]) == T_ARRAY) { \
2293
+ ary = args[0]; \
2294
+ switch (RARRAY_LEN(ary)) { \
2295
+ case 2: \
2296
+ gl_Vertex2##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1]); \
2297
+ break; \
2298
+ case 3: \
2299
+ gl_Vertex3##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2]); \
2300
+ break; \
2301
+ case 4: \
2302
+ gl_Vertex4##_type_(obj,RARRAY_PTR(ary)[0],RARRAY_PTR(ary)[1],RARRAY_PTR(ary)[2],RARRAY_PTR(ary)[3]); \
2303
+ break; \
2304
+ default: \
2305
+ rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%li", RARRAY_LEN(ary)); \
2306
+ } \
2307
+ } \
2308
+ else \
2309
+ Check_Type(args[0],T_ARRAY); /* force exception */ \
2310
+ break; \
2311
+ case 2: \
2312
+ gl_Vertex2##_type_(obj,args[0], args[1]); \
2313
+ break; \
2314
+ case 3: \
2315
+ gl_Vertex3##_type_(obj,args[0], args[1], args[2]); \
2316
+ break; \
2317
+ case 4: \
2318
+ gl_Vertex4##_type_(obj,args[0], args[1], args[2], args[3]); \
2319
+ break; \
2320
+ default: \
2321
+ rb_raise(rb_eArgError, "too many arguments"); \
2322
+ break; \
2323
+ } \
2324
+ return Qnil; \
2325
+ }
2326
+
2327
+ GLVERTEX_VFUNC(d)
2328
+ GLVERTEX_VFUNC(f)
2329
+ GLVERTEX_VFUNC(i)
2330
+ GLVERTEX_VFUNC(s)
2331
+ #undef GLVERTEX_VFUNC
2332
+
2333
+ /* */
2334
+
2335
+ static VALUE
2336
+ gl_LightModel(obj,arg1,arg2)
2337
+ VALUE obj,arg1,arg2;
2338
+ {
2339
+ if (TYPE(arg2) == T_ARRAY)
2340
+ gl_LightModelfv(obj,arg1,arg2);
2341
+ else
2342
+ gl_LightModelf(obj,arg1,arg2);
2343
+
2344
+ return Qnil;
2345
+ }
2346
+
2347
+ static VALUE
2348
+ gl_Material(obj,arg1,arg2,arg3)
2349
+ VALUE obj,arg1,arg2,arg3;
2350
+ {
2351
+ if (TYPE(arg3) == T_ARRAY)
2352
+ gl_Materialfv(obj,arg1,arg2,arg3);
2353
+ else
2354
+ gl_Materialf(obj,arg1,arg2,arg3);
2355
+
2356
+ return Qnil;
2357
+ }
2358
+
2359
+ static VALUE
2360
+ gl_Fog(obj,arg1,arg2)
2361
+ VALUE obj,arg1,arg2;
2362
+ {
2363
+ if (TYPE(arg2) == T_ARRAY)
2364
+ gl_Fogfv(obj,arg1,arg2);
2365
+ else
2366
+ gl_Fogf(obj,arg1,arg2);
2367
+
2368
+ return Qnil;
2369
+ }
2370
+
2371
+ static VALUE
2372
+ gl_Light(obj,arg1,arg2,arg3)
2373
+ VALUE obj,arg1,arg2,arg3;
2374
+ {
2375
+ if (TYPE(arg3) == T_ARRAY)
2376
+ gl_Lightfv(obj,arg1,arg2,arg3);
2377
+ else
2378
+ gl_Lightf(obj,arg1,arg2,arg3);
2379
+
2380
+ return Qnil;
2381
+ }
2382
+
2383
+ static VALUE
2384
+ gl_TexParameter(obj,arg1,arg2,arg3)
2385
+ VALUE obj,arg1,arg2,arg3;
2386
+ {
2387
+ if (TYPE(arg3) == T_ARRAY)
2388
+ gl_TexParameterfv(obj,arg1,arg2,arg3);
2389
+ else
2390
+ gl_TexParameterf(obj,arg1,arg2,arg3);
2391
+
2392
+ return Qnil;
2393
+ }
2394
+
2395
+ static VALUE
2396
+ gl_TexEnv(obj,arg1,arg2,arg3)
2397
+ VALUE obj,arg1,arg2,arg3;
2398
+ {
2399
+ if (TYPE(arg3) == T_ARRAY)
2400
+ gl_TexEnvfv(obj,arg1,arg2,arg3);
2401
+ else
2402
+ gl_TexEnvf(obj,arg1,arg2,arg3);
2403
+
2404
+ return Qnil;
2405
+ }
2406
+
2407
+ static VALUE
2408
+ gl_TexGen(obj,arg1,arg2,arg3)
2409
+ VALUE obj,arg1,arg2,arg3;
2410
+ {
2411
+ if (TYPE(arg3) == T_ARRAY)
2412
+ gl_TexGenfv(obj,arg1,arg2,arg3);
2413
+ else
2414
+ gl_TexGenf(obj,arg1,arg2,arg3);
2415
+
2416
+ return Qnil;
2417
+ }
2418
+
2419
+ /* init */
2420
+ void gl_init_functions_1_0__1_1(VALUE module)
2421
+ {
2422
+ g_FogCoord_ptr = 0; /* for use in gl-1.4.c */
2423
+ g_SecondaryColor_ptr = 0; /* for use in gl-1.4.c */
2424
+
2425
+ /* OpenGL 1.0 functions */
2426
+ rb_define_module_function(module, "glNewList", gl_NewList, 2);
2427
+ rb_define_module_function(module, "glEndList", gl_EndList, 0);
2428
+ rb_define_module_function(module, "glCallList", gl_CallList, 1);
2429
+ rb_define_module_function(module, "glCallLists", gl_CallLists, 2);
2430
+ rb_define_module_function(module, "glDeleteLists", gl_DeleteLists, 2);
2431
+ rb_define_module_function(module, "glGenLists", gl_GenLists, 1);
2432
+ rb_define_module_function(module, "glListBase", gl_ListBase, 1);
2433
+ rb_define_module_function(module, "glBegin", gl_Begin, 1);
2434
+ rb_define_module_function(module, "glBitmap", gl_Bitmap, 7);
2435
+ rb_define_module_function(module, "glColor3b", gl_Color3b, 3);
2436
+ rb_define_module_function(module, "glColor3d", gl_Color3d, 3);
2437
+ rb_define_module_function(module, "glColor3f", gl_Color3f, 3);
2438
+ rb_define_module_function(module, "glColor3i", gl_Color3i, 3);
2439
+ rb_define_module_function(module, "glColor3s", gl_Color3s, 3);
2440
+ rb_define_module_function(module, "glColor3ub", gl_Color3ub, 3);
2441
+ rb_define_module_function(module, "glColor3ui", gl_Color3ui, 3);
2442
+ rb_define_module_function(module, "glColor3us", gl_Color3us, 3);
2443
+ rb_define_module_function(module, "glColor4b", gl_Color4b, 4);
2444
+ rb_define_module_function(module, "glColor4d", gl_Color4d, 4);
2445
+ rb_define_module_function(module, "glColor4f", gl_Color4f, 4);
2446
+ rb_define_module_function(module, "glColor4i", gl_Color4i, 4);
2447
+ rb_define_module_function(module, "glColor4s", gl_Color4s, 4);
2448
+ rb_define_module_function(module, "glColor4ub", gl_Color4ub, 4);
2449
+ rb_define_module_function(module, "glColor4ui", gl_Color4ui, 4);
2450
+ rb_define_module_function(module, "glColor4us", gl_Color4us, 4);
2451
+ rb_define_module_function(module, "glEdgeFlag", gl_EdgeFlag, 1);
2452
+ rb_define_module_function(module, "glEdgeFlagv", gl_EdgeFlagv, 1);
2453
+ rb_define_module_function(module, "glEnd", gl_End, 0);
2454
+ rb_define_module_function(module, "glIndexd", gl_Indexd, 1);
2455
+ rb_define_module_function(module, "glIndexdv", gl_Indexdv, 1);
2456
+ rb_define_module_function(module, "glIndexf", gl_Indexf, 1);
2457
+ rb_define_module_function(module, "glIndexfv", gl_Indexfv, 1);
2458
+ rb_define_module_function(module, "glIndexi", gl_Indexi, 1);
2459
+ rb_define_module_function(module, "glIndexiv", gl_Indexiv, 1);
2460
+ rb_define_module_function(module, "glIndexs", gl_Indexs, 1);
2461
+ rb_define_module_function(module, "glIndexsv", gl_Indexsv, 1);
2462
+ rb_define_module_function(module, "glNormal3b", gl_Normal3b, 3);
2463
+ rb_define_module_function(module, "glNormal3d", gl_Normal3d, 3);
2464
+ rb_define_module_function(module, "glNormal3f", gl_Normal3f, 3);
2465
+ rb_define_module_function(module, "glNormal3i", gl_Normal3i, 3);
2466
+ rb_define_module_function(module, "glNormal3s", gl_Normal3s, 3);
2467
+ rb_define_module_function(module, "glRasterPos2d", gl_RasterPos2d, 2);
2468
+ rb_define_module_function(module, "glRasterPos2f", gl_RasterPos2f, 2);
2469
+ rb_define_module_function(module, "glRasterPos2i", gl_RasterPos2i, 2);
2470
+ rb_define_module_function(module, "glRasterPos2s", gl_RasterPos2s, 2);
2471
+ rb_define_module_function(module, "glRasterPos3d", gl_RasterPos3d, 3);
2472
+ rb_define_module_function(module, "glRasterPos3f", gl_RasterPos3f, 3);
2473
+ rb_define_module_function(module, "glRasterPos3i", gl_RasterPos3i, 3);
2474
+ rb_define_module_function(module, "glRasterPos3s", gl_RasterPos3s, 3);
2475
+ rb_define_module_function(module, "glRasterPos4d", gl_RasterPos4d, 4);
2476
+ rb_define_module_function(module, "glRasterPos4f", gl_RasterPos4f, 4);
2477
+ rb_define_module_function(module, "glRasterPos4i", gl_RasterPos4i, 4);
2478
+ rb_define_module_function(module, "glRasterPos4s", gl_RasterPos4s, 4);
2479
+ rb_define_module_function(module, "glRectd", gl_Rectd, 4);
2480
+ rb_define_module_function(module, "glRectf", gl_Rectf, 4);
2481
+ rb_define_module_function(module, "glRecti", gl_Recti, 4);
2482
+ rb_define_module_function(module, "glRects", gl_Rects, 4);
2483
+ rb_define_module_function(module, "glTexCoord1d", gl_TexCoord1d, 1);
2484
+ rb_define_module_function(module, "glTexCoord1f", gl_TexCoord1f, 1);
2485
+ rb_define_module_function(module, "glTexCoord1i", gl_TexCoord1i, 1);
2486
+ rb_define_module_function(module, "glTexCoord1s", gl_TexCoord1s, 1);
2487
+ rb_define_module_function(module, "glTexCoord2d", gl_TexCoord2d, 2);
2488
+ rb_define_module_function(module, "glTexCoord2f", gl_TexCoord2f, 2);
2489
+ rb_define_module_function(module, "glTexCoord2i", gl_TexCoord2i, 2);
2490
+ rb_define_module_function(module, "glTexCoord2s", gl_TexCoord2s, 2);
2491
+ rb_define_module_function(module, "glTexCoord3d", gl_TexCoord3d, 3);
2492
+ rb_define_module_function(module, "glTexCoord3f", gl_TexCoord3f, 3);
2493
+ rb_define_module_function(module, "glTexCoord3i", gl_TexCoord3i, 3);
2494
+ rb_define_module_function(module, "glTexCoord3s", gl_TexCoord3s, 3);
2495
+ rb_define_module_function(module, "glTexCoord4d", gl_TexCoord4d, 4);
2496
+ rb_define_module_function(module, "glTexCoord4f", gl_TexCoord4f, 4);
2497
+ rb_define_module_function(module, "glTexCoord4i", gl_TexCoord4i, 4);
2498
+ rb_define_module_function(module, "glTexCoord4s", gl_TexCoord4s, 4);
2499
+ rb_define_module_function(module, "glVertex2d", gl_Vertex2d, 2);
2500
+ rb_define_module_function(module, "glVertex2f", gl_Vertex2f, 2);
2501
+ rb_define_module_function(module, "glVertex2i", gl_Vertex2i, 2);
2502
+ rb_define_module_function(module, "glVertex2s", gl_Vertex2s, 2);
2503
+ rb_define_module_function(module, "glVertex3d", gl_Vertex3d, 3);
2504
+ rb_define_module_function(module, "glVertex3f", gl_Vertex3f, 3);
2505
+ rb_define_module_function(module, "glVertex3i", gl_Vertex3i, 3);
2506
+ rb_define_module_function(module, "glVertex3s", gl_Vertex3s, 3);
2507
+ rb_define_module_function(module, "glVertex4d", gl_Vertex4d, 4);
2508
+ rb_define_module_function(module, "glVertex4f", gl_Vertex4f, 4);
2509
+ rb_define_module_function(module, "glVertex4i", gl_Vertex4i, 4);
2510
+ rb_define_module_function(module, "glVertex4s", gl_Vertex4s, 4);
2511
+ rb_define_module_function(module, "glClipPlane", gl_ClipPlane, 2);
2512
+ rb_define_module_function(module, "glColorMaterial", gl_ColorMaterial, 2);
2513
+ rb_define_module_function(module, "glCullFace", gl_CullFace, 1);
2514
+ rb_define_module_function(module, "glFogf", gl_Fogf, 2);
2515
+ rb_define_module_function(module, "glFogfv", gl_Fogfv, 2);
2516
+ rb_define_module_function(module, "glFogi", gl_Fogi, 2);
2517
+ rb_define_module_function(module, "glFogiv", gl_Fogiv, 2);
2518
+ rb_define_module_function(module, "glFrontFace", gl_FrontFace, 1);
2519
+ rb_define_module_function(module, "glHint", gl_Hint, 2);
2520
+ rb_define_module_function(module, "glLightf", gl_Lightf, 3);
2521
+ rb_define_module_function(module, "glLightfv", gl_Lightfv, 3);
2522
+ rb_define_module_function(module, "glLighti", gl_Lighti, 3);
2523
+ rb_define_module_function(module, "glLightiv", gl_Lightiv, 3);
2524
+ rb_define_module_function(module, "glLightModelf", gl_LightModelf, 2);
2525
+ rb_define_module_function(module, "glLightModelfv", gl_LightModelfv, 2);
2526
+ rb_define_module_function(module, "glLightModeli", gl_LightModeli, 2);
2527
+ rb_define_module_function(module, "glLightModeliv", gl_LightModeliv, 2);
2528
+ rb_define_module_function(module, "glLineStipple", gl_LineStipple, 2);
2529
+ rb_define_module_function(module, "glLineWidth", gl_LineWidth, 1);
2530
+ rb_define_module_function(module, "glMaterialf", gl_Materialf, 3);
2531
+ rb_define_module_function(module, "glMaterialfv", gl_Materialfv, 3);
2532
+ rb_define_module_function(module, "glMateriali", gl_Materiali, 3);
2533
+ rb_define_module_function(module, "glMaterialiv", gl_Materialiv, 3);
2534
+ rb_define_module_function(module, "glPointSize", gl_PointSize, 1);
2535
+ rb_define_module_function(module, "glPolygonMode", gl_PolygonMode, 2);
2536
+ rb_define_module_function(module, "glPolygonStipple", gl_PolygonStipple, 1);
2537
+ rb_define_module_function(module, "glScissor", gl_Scissor, 4);
2538
+ rb_define_module_function(module, "glShadeModel", gl_ShadeModel, 1);
2539
+ rb_define_module_function(module, "glTexParameterf", gl_TexParameterf, 3);
2540
+ rb_define_module_function(module, "glTexParameterfv", gl_TexParameterfv, 3);
2541
+ rb_define_module_function(module, "glTexParameteri", gl_TexParameteri, 3);
2542
+ rb_define_module_function(module, "glTexParameteriv", gl_TexParameteriv, 3);
2543
+ rb_define_module_function(module, "glTexImage1D", gl_TexImage1D, 8);
2544
+ rb_define_module_function(module, "glTexImage2D", gl_TexImage2D, 9);
2545
+ rb_define_module_function(module, "glTexEnvf", gl_TexEnvf, 3);
2546
+ rb_define_module_function(module, "glTexEnvfv", gl_TexEnvfv, 3);
2547
+ rb_define_module_function(module, "glTexEnvi", gl_TexEnvi, 3);
2548
+ rb_define_module_function(module, "glTexEnviv", gl_TexEnviv, 3);
2549
+ rb_define_module_function(module, "glTexGend", gl_TexGend, 3);
2550
+ rb_define_module_function(module, "glTexGendv", gl_TexGendv, 3);
2551
+ rb_define_module_function(module, "glTexGenf", gl_TexGenf, 3);
2552
+ rb_define_module_function(module, "glTexGenfv", gl_TexGenfv, 3);
2553
+ rb_define_module_function(module, "glTexGeni", gl_TexGeni, 3);
2554
+ rb_define_module_function(module, "glTexGeniv", gl_TexGeniv, 3);
2555
+ rb_define_module_function(module, "glFeedbackBuffer", gl_FeedbackBuffer, 2);
2556
+ rb_define_module_function(module, "glSelectBuffer", gl_SelectBuffer, 1);
2557
+ rb_define_module_function(module, "glRenderMode", gl_RenderMode, 1);
2558
+ rb_define_module_function(module, "glInitNames", gl_InitNames, 0);
2559
+ rb_define_module_function(module, "glLoadName", gl_LoadName, 1);
2560
+ rb_define_module_function(module, "glPassThrough", gl_PassThrough, 1);
2561
+ rb_define_module_function(module, "glPopName", gl_PopName, 0);
2562
+ rb_define_module_function(module, "glPushName", gl_PushName, 1);
2563
+ rb_define_module_function(module, "glDrawBuffer", gl_DrawBuffer, 1);
2564
+ rb_define_module_function(module, "glClear", gl_Clear, 1);
2565
+ rb_define_module_function(module, "glClearAccum", gl_ClearAccum, 4);
2566
+ rb_define_module_function(module, "glClearIndex", gl_ClearIndex, 1);
2567
+ rb_define_module_function(module, "glClearColor", gl_ClearColor, 4);
2568
+ rb_define_module_function(module, "glClearStencil", gl_ClearStencil, 1);
2569
+ rb_define_module_function(module, "glClearDepth", gl_ClearDepth, 1);
2570
+ rb_define_module_function(module, "glStencilMask", gl_StencilMask, 1);
2571
+ rb_define_module_function(module, "glColorMask", gl_ColorMask, 4);
2572
+ rb_define_module_function(module, "glDepthMask", gl_DepthMask, 1);
2573
+ rb_define_module_function(module, "glIndexMask", gl_IndexMask, 1);
2574
+ rb_define_module_function(module, "glAccum", gl_Accum, 2);
2575
+ rb_define_module_function(module, "glDisable", gl_Disable, 1);
2576
+ rb_define_module_function(module, "glEnable", gl_Enable, 1);
2577
+ rb_define_module_function(module, "glFinish", gl_Finish, 0);
2578
+ rb_define_module_function(module, "glFlush", gl_Flush, 0);
2579
+ rb_define_module_function(module, "glPopAttrib", gl_PopAttrib, 0);
2580
+ rb_define_module_function(module, "glPushAttrib", gl_PushAttrib, 1);
2581
+ rb_define_module_function(module, "glMap1d", gl_Map1d, 6);
2582
+ rb_define_module_function(module, "glMap1f", gl_Map1f, 6);
2583
+ rb_define_module_function(module, "glMap2d", gl_Map2d, 10);
2584
+ rb_define_module_function(module, "glMap2f", gl_Map2f, 10);
2585
+ rb_define_module_function(module, "glMapGrid1d", gl_MapGrid1d, 3);
2586
+ rb_define_module_function(module, "glMapGrid1f", gl_MapGrid1f, 3);
2587
+ rb_define_module_function(module, "glMapGrid2d", gl_MapGrid2d, 6);
2588
+ rb_define_module_function(module, "glMapGrid2f", gl_MapGrid2f, 6);
2589
+ rb_define_module_function(module, "glEvalCoord1d", gl_EvalCoord1d, 1);
2590
+ rb_define_module_function(module, "glEvalCoord1dv", gl_EvalCoord1dv, 1);
2591
+ rb_define_module_function(module, "glEvalCoord1f", gl_EvalCoord1f, 1);
2592
+ rb_define_module_function(module, "glEvalCoord1fv", gl_EvalCoord1fv, 1);
2593
+ rb_define_module_function(module, "glEvalCoord2d", gl_EvalCoord2d, 2);
2594
+ rb_define_module_function(module, "glEvalCoord2dv", gl_EvalCoord2dv, 1);
2595
+ rb_define_module_function(module, "glEvalCoord2f", gl_EvalCoord2f, 2);
2596
+ rb_define_module_function(module, "glEvalCoord2fv", gl_EvalCoord2fv, 1);
2597
+ rb_define_module_function(module, "glEvalMesh1", gl_EvalMesh1, 3);
2598
+ rb_define_module_function(module, "glEvalPoint1", gl_EvalPoint1, 1);
2599
+ rb_define_module_function(module, "glEvalMesh2", gl_EvalMesh2, 5);
2600
+ rb_define_module_function(module, "glEvalPoint2", gl_EvalPoint2, 2);
2601
+ rb_define_module_function(module, "glAlphaFunc", gl_AlphaFunc, 2);
2602
+ rb_define_module_function(module, "glBlendFunc", gl_BlendFunc, 2);
2603
+ rb_define_module_function(module, "glLogicOp", gl_LogicOp, 1);
2604
+ rb_define_module_function(module, "glStencilFunc", gl_StencilFunc, 3);
2605
+ rb_define_module_function(module, "glStencilOp", gl_StencilOp, 3);
2606
+ rb_define_module_function(module, "glDepthFunc", gl_DepthFunc, 1);
2607
+ rb_define_module_function(module, "glPixelZoom", gl_PixelZoom, 2);
2608
+ rb_define_module_function(module, "glPixelTransferf", gl_PixelTransferf, 2);
2609
+ rb_define_module_function(module, "glPixelTransferi", gl_PixelTransferi, 2);
2610
+ rb_define_module_function(module, "glPixelStoref", gl_PixelStoref, 2);
2611
+ rb_define_module_function(module, "glPixelStorei", gl_PixelStorei, 2);
2612
+ rb_define_module_function(module, "glPixelMapfv", gl_PixelMapfv, -1);
2613
+ rb_define_module_function(module, "glPixelMapuiv", gl_PixelMapuiv, -1);
2614
+ rb_define_module_function(module, "glPixelMapusv", gl_PixelMapusv, -1);
2615
+ rb_define_module_function(module, "glReadBuffer", gl_ReadBuffer, 1);
2616
+ rb_define_module_function(module, "glCopyPixels", gl_CopyPixels, 5);
2617
+ rb_define_module_function(module, "glReadPixels", gl_ReadPixels, -1);
2618
+ rb_define_module_function(module, "glDrawPixels", gl_DrawPixels, 5);
2619
+ rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv, 1);
2620
+ rb_define_module_function(module, "glGetClipPlane", gl_GetClipPlane, 1);
2621
+ rb_define_module_function(module, "glGetDoublev", gl_GetDoublev, 1);
2622
+ rb_define_module_function(module, "glGetError", gl_GetError, 0);
2623
+ rb_define_module_function(module, "glGetFloatv", gl_GetFloatv, 1);
2624
+ rb_define_module_function(module, "glGetIntegerv", gl_GetIntegerv, 1);
2625
+ rb_define_module_function(module, "glGetLightfv", gl_GetLightfv, 2);
2626
+ rb_define_module_function(module, "glGetLightiv", gl_GetLightiv, 2);
2627
+ rb_define_module_function(module, "glGetMapdv", gl_GetMapdv, 2);
2628
+ rb_define_module_function(module, "glGetMapfv", gl_GetMapfv, 2);
2629
+ rb_define_module_function(module, "glGetMapiv", gl_GetMapiv, 2);
2630
+ rb_define_module_function(module, "glGetMaterialfv", gl_GetMaterialfv, 2);
2631
+ rb_define_module_function(module, "glGetMaterialiv", gl_GetMaterialiv, 2);
2632
+ rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, -1);
2633
+ rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, -1);
2634
+ rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, -1);
2635
+ rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, -1);
2636
+ rb_define_module_function(module, "glGetString", gl_GetString, 1);
2637
+ rb_define_module_function(module, "glGetTexEnvfv", gl_GetTexEnvfv, 2);
2638
+ rb_define_module_function(module, "glGetTexEnviv", gl_GetTexEnviv, 2);
2639
+ rb_define_module_function(module, "glGetTexGendv", gl_GetTexGendv, 2);
2640
+ rb_define_module_function(module, "glGetTexGenfv", gl_GetTexGenfv, 2);
2641
+ rb_define_module_function(module, "glGetTexGeniv", gl_GetTexGeniv, 2);
2642
+ rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, -1);
2643
+ rb_define_module_function(module, "glGetTexParameterfv", gl_GetTexParameterfv, 2);
2644
+ rb_define_module_function(module, "glGetTexParameteriv", gl_GetTexParameteriv, 2);
2645
+ rb_define_module_function(module, "glGetTexLevelParameterfv", gl_GetTexLevelParameterfv, 3);
2646
+ rb_define_module_function(module, "glGetTexLevelParameteriv", gl_GetTexLevelParameteriv, 3);
2647
+ rb_define_module_function(module, "glIsEnabled", gl_IsEnabled, 1);
2648
+ rb_define_module_function(module, "glIsList", gl_IsList, 1);
2649
+ rb_define_module_function(module, "glDepthRange", gl_DepthRange, 2);
2650
+ rb_define_module_function(module, "glFrustum", gl_Frustum, 6);
2651
+ rb_define_module_function(module, "glLoadIdentity", gl_LoadIdentity, 0);
2652
+ rb_define_module_function(module, "glLoadMatrixf", gl_LoadMatrixf, 1);
2653
+ rb_define_module_function(module, "glLoadMatrixd", gl_LoadMatrixd, 1);
2654
+ rb_define_module_function(module, "glMatrixMode", gl_MatrixMode, 1);
2655
+ rb_define_module_function(module, "glMultMatrixf", gl_MultMatrixf, 1);
2656
+ rb_define_module_function(module, "glMultMatrixd", gl_MultMatrixd, 1);
2657
+ rb_define_module_function(module, "glOrtho", gl_Ortho, 6);
2658
+ rb_define_module_function(module, "glPopMatrix", gl_PopMatrix, 0);
2659
+ rb_define_module_function(module, "glPushMatrix", gl_PushMatrix, 0);
2660
+ rb_define_module_function(module, "glRotated", gl_Rotated, 4);
2661
+ rb_define_module_function(module, "glRotatef", gl_Rotatef, 4);
2662
+ rb_define_module_function(module, "glScaled", gl_Scaled, 3);
2663
+ rb_define_module_function(module, "glScalef", gl_Scalef, 3);
2664
+ rb_define_module_function(module, "glTranslated", gl_Translated, 3);
2665
+ rb_define_module_function(module, "glTranslatef", gl_Translatef, 3);
2666
+ rb_define_module_function(module, "glViewport", gl_Viewport, 4);
2667
+
2668
+ /* OpenGL 1.1 functions */
2669
+ rb_define_module_function(module, "glArrayElement", gl_ArrayElement, 1);
2670
+ rb_define_module_function(module, "glColorPointer", gl_ColorPointer, 4);
2671
+ rb_define_module_function(module, "glDisableClientState", gl_DisableClientState, 1);
2672
+ rb_define_module_function(module, "glDrawArrays", gl_DrawArrays, 3);
2673
+ rb_define_module_function(module, "glDrawElements", gl_DrawElements, 4);
2674
+ rb_define_module_function(module, "glEdgeFlagPointer", gl_EdgeFlagPointer, 2);
2675
+ rb_define_module_function(module, "glEnableClientState", gl_EnableClientState, 1);
2676
+ rb_define_module_function(module, "glGetPointerv", gl_GetPointerv, 1);
2677
+ rb_define_module_function(module, "glIndexPointer", gl_IndexPointer, 3);
2678
+ rb_define_module_function(module, "glInterleavedArrays", gl_InterleavedArrays, 3);
2679
+ rb_define_module_function(module, "glNormalPointer", gl_NormalPointer, 3);
2680
+ rb_define_module_function(module, "glTexCoordPointer", gl_TexCoordPointer, 4);
2681
+ rb_define_module_function(module, "glVertexPointer", gl_VertexPointer, 4);
2682
+ rb_define_module_function(module, "glPolygonOffset", gl_PolygonOffset, 2);
2683
+ rb_define_module_function(module, "glCopyTexImage1D", gl_CopyTexImage1D, 7);
2684
+ rb_define_module_function(module, "glCopyTexImage2D", gl_CopyTexImage2D, 8);
2685
+ rb_define_module_function(module, "glCopyTexSubImage1D", gl_CopyTexSubImage1D, 6);
2686
+ rb_define_module_function(module, "glCopyTexSubImage2D", gl_CopyTexSubImage2D, 8);
2687
+ rb_define_module_function(module, "glTexSubImage1D", gl_TexSubImage1D, 7);
2688
+ rb_define_module_function(module, "glTexSubImage2D", gl_TexSubImage2D, 9);
2689
+ rb_define_module_function(module, "glAreTexturesResident", gl_AreTexturesResident, 1);
2690
+ rb_define_module_function(module, "glBindTexture", gl_BindTexture, 2);
2691
+ rb_define_module_function(module, "glDeleteTextures", gl_DeleteTextures, 1);
2692
+ rb_define_module_function(module, "glGenTextures", gl_GenTextures, 1);
2693
+ rb_define_module_function(module, "glIsTexture", gl_IsTexture, 1);
2694
+ rb_define_module_function(module, "glPrioritizeTextures", gl_PrioritizeTextures, 2);
2695
+ rb_define_module_function(module, "glIndexub", gl_Indexub, 1);
2696
+ rb_define_module_function(module, "glIndexubv", gl_Indexubv, 1);
2697
+ rb_define_module_function(module, "glPopClientAttrib", gl_PopClientAttrib, 0);
2698
+ rb_define_module_function(module, "glPushClientAttrib", gl_PushClientAttrib, 1);
2699
+
2700
+ /* additional functions */
2701
+ rb_define_module_function(module, "glColor", gl_Colordv, -1);
2702
+ rb_define_module_function(module, "glColor3bv", gl_Colorbv, -1);
2703
+ rb_define_module_function(module, "glColor3dv", gl_Colordv, -1);
2704
+ rb_define_module_function(module, "glColor3fv", gl_Colorfv, -1);
2705
+ rb_define_module_function(module, "glColor3iv", gl_Coloriv, -1);
2706
+ rb_define_module_function(module, "glColor3sv", gl_Colorsv, -1);
2707
+ rb_define_module_function(module, "glColor3ubv", gl_Colorubv, -1);
2708
+ rb_define_module_function(module, "glColor3uiv", gl_Coloruiv, -1);
2709
+ rb_define_module_function(module, "glColor3usv", gl_Colorusv, -1);
2710
+ rb_define_module_function(module, "glColor4bv", gl_Colorbv, -1);
2711
+ rb_define_module_function(module, "glColor4dv", gl_Colordv, -1);
2712
+ rb_define_module_function(module, "glColor4fv", gl_Colorfv, -1);
2713
+ rb_define_module_function(module, "glColor4iv", gl_Coloriv, -1);
2714
+ rb_define_module_function(module, "glColor4sv", gl_Colorsv, -1);
2715
+ rb_define_module_function(module, "glColor4ubv", gl_Colorubv, -1);
2716
+ rb_define_module_function(module, "glColor4uiv", gl_Coloruiv, -1);
2717
+ rb_define_module_function(module, "glColor4usv", gl_Colorusv, -1);
2718
+
2719
+ rb_define_module_function(module, "glNormal", gl_Normaldv, -1);
2720
+ rb_define_module_function(module, "glNormal3bv", gl_Normalbv, -1);
2721
+ rb_define_module_function(module, "glNormal3dv", gl_Normaldv, -1);
2722
+ rb_define_module_function(module, "glNormal3fv", gl_Normalfv, -1);
2723
+ rb_define_module_function(module, "glNormal3iv", gl_Normaliv, -1);
2724
+ rb_define_module_function(module, "glNormal3sv", gl_Normalsv, -1);
2725
+
2726
+ rb_define_module_function(module, "glRasterPos", gl_RasterPosdv, -1);
2727
+ rb_define_module_function(module, "glRasterPos2dv", gl_RasterPosdv, -1);
2728
+ rb_define_module_function(module, "glRasterPos2fv", gl_RasterPosfv, -1);
2729
+ rb_define_module_function(module, "glRasterPos2iv", gl_RasterPosiv, -1);
2730
+ rb_define_module_function(module, "glRasterPos2sv", gl_RasterPossv, -1);
2731
+ rb_define_module_function(module, "glRasterPos3dv", gl_RasterPosdv, -1);
2732
+ rb_define_module_function(module, "glRasterPos3fv", gl_RasterPosfv, -1);
2733
+ rb_define_module_function(module, "glRasterPos3iv", gl_RasterPosiv, -1);
2734
+ rb_define_module_function(module, "glRasterPos3sv", gl_RasterPossv, -1);
2735
+ rb_define_module_function(module, "glRasterPos4dv", gl_RasterPosdv, -1);
2736
+ rb_define_module_function(module, "glRasterPos4fv", gl_RasterPosfv, -1);
2737
+ rb_define_module_function(module, "glRasterPos4iv", gl_RasterPosiv, -1);
2738
+ rb_define_module_function(module, "glRasterPos4sv", gl_RasterPossv, -1);
2739
+
2740
+ rb_define_module_function(module, "glRect", gl_Rectdv, -1);
2741
+ rb_define_module_function(module, "glRectdv", gl_Rectdv, -1);
2742
+ rb_define_module_function(module, "glRectfv", gl_Rectfv, -1);
2743
+ rb_define_module_function(module, "glRectiv", gl_Rectiv, -1);
2744
+ rb_define_module_function(module, "glRectsv", gl_Rectsv, -1);
2745
+
2746
+ rb_define_module_function(module, "glTexCoord", gl_TexCoorddv, -1);
2747
+ rb_define_module_function(module, "glTexCoord1dv", gl_TexCoorddv, -1);
2748
+ rb_define_module_function(module, "glTexCoord1fv", gl_TexCoordfv, -1);
2749
+ rb_define_module_function(module, "glTexCoord1iv", gl_TexCoordiv, -1);
2750
+ rb_define_module_function(module, "glTexCoord1sv", gl_TexCoordsv, -1);
2751
+ rb_define_module_function(module, "glTexCoord2dv", gl_TexCoorddv, -1);
2752
+ rb_define_module_function(module, "glTexCoord2fv", gl_TexCoordfv, -1);
2753
+ rb_define_module_function(module, "glTexCoord2iv", gl_TexCoordiv, -1);
2754
+ rb_define_module_function(module, "glTexCoord2sv", gl_TexCoordsv, -1);
2755
+ rb_define_module_function(module, "glTexCoord3dv", gl_TexCoorddv, -1);
2756
+ rb_define_module_function(module, "glTexCoord3fv", gl_TexCoordfv, -1);
2757
+ rb_define_module_function(module, "glTexCoord3iv", gl_TexCoordiv, -1);
2758
+ rb_define_module_function(module, "glTexCoord3sv", gl_TexCoordsv, -1);
2759
+ rb_define_module_function(module, "glTexCoord4dv", gl_TexCoorddv, -1);
2760
+ rb_define_module_function(module, "glTexCoord4fv", gl_TexCoordfv, -1);
2761
+ rb_define_module_function(module, "glTexCoord4iv", gl_TexCoordiv, -1);
2762
+ rb_define_module_function(module, "glTexCoord4sv", gl_TexCoordsv, -1);
2763
+
2764
+ rb_define_module_function(module, "glVertex", gl_Vertexdv, -1);
2765
+ rb_define_module_function(module, "glVertex2dv", gl_Vertexdv, -1);
2766
+ rb_define_module_function(module, "glVertex2fv", gl_Vertexfv, -1);
2767
+ rb_define_module_function(module, "glVertex2iv", gl_Vertexiv, -1);
2768
+ rb_define_module_function(module, "glVertex2sv", gl_Vertexsv, -1);
2769
+ rb_define_module_function(module, "glVertex3dv", gl_Vertexdv, -1);
2770
+ rb_define_module_function(module, "glVertex3fv", gl_Vertexfv, -1);
2771
+ rb_define_module_function(module, "glVertex3iv", gl_Vertexiv, -1);
2772
+ rb_define_module_function(module, "glVertex3sv", gl_Vertexsv, -1);
2773
+ rb_define_module_function(module, "glVertex4dv", gl_Vertexdv, -1);
2774
+ rb_define_module_function(module, "glVertex4fv", gl_Vertexfv, -1);
2775
+ rb_define_module_function(module, "glVertex4iv", gl_Vertexiv, -1);
2776
+ rb_define_module_function(module, "glVertex4sv", gl_Vertexsv, -1);
2777
+
2778
+ /* these simply calls normal or vector (*v) function depending on
2779
+ if array or single value is passed to them */
2780
+ rb_define_module_function(module, "glLightModel", gl_LightModel, 2);
2781
+ rb_define_module_function(module, "glMaterial", gl_Material, 3);
2782
+ rb_define_module_function(module, "glFog", gl_Fog, 2);
2783
+ rb_define_module_function(module, "glLight", gl_Light, 3);
2784
+ rb_define_module_function(module, "glTexParameter", gl_TexParameter, 3);
2785
+ rb_define_module_function(module, "glTexEnv", gl_TexEnv, 3);
2786
+ rb_define_module_function(module, "glTexGen", gl_TexGen, 3);
2787
+
2788
+ /* aliases */
2789
+ rb_define_module_function(module, "glMultMatrix", gl_MultMatrixd, 1);
2790
+ rb_define_module_function(module, "glLoadMatrix", gl_LoadMatrixd, 1);
2791
+ rb_define_module_function(module, "glRotate", gl_Rotated, 4);
2792
+ rb_define_module_function(module, "glScale", gl_Scaled, 3);
2793
+ rb_define_module_function(module, "glTranslate", gl_Translated, 3);
2794
+
2795
+ rb_define_module_function(module, "glPixelStore", gl_PixelStoref, 2);
2796
+ rb_define_module_function(module, "glPixelTransfer", gl_PixelTransferf, 2);
2797
+ rb_define_module_function(module, "glIndex", gl_Indexi, 1);
2798
+ rb_define_module_function(module, "glGetMaterial", gl_GetMaterialfv, 2);
2799
+ rb_define_module_function(module, "glGetDouble", gl_GetDoublev, 1);
2800
+
2801
+ rb_global_variable(&g_current_sel_buffer);
2802
+ rb_global_variable(&g_current_feed_buffer);
2803
+ rb_global_variable(&g_Vertex_ptr);
2804
+ rb_global_variable(&g_Normal_ptr);
2805
+ rb_global_variable(&g_Color_ptr);
2806
+ rb_global_variable(&g_Index_ptr);
2807
+ rb_global_variable(&g_TexCoord_ptr);
2808
+ rb_global_variable(&g_EdgeFlag_ptr);
2809
+ rb_global_variable(&g_FogCoord_ptr);
2810
+ rb_global_variable(&g_SecondaryColor_ptr);
2811
+ }