ruby-opengl 0.40.1 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. data/Rakefile +2 -2
  2. data/doc/build_install.txt +48 -28
  3. data/doc/extensions.txt +361 -0
  4. data/doc/history.txt +8 -2
  5. data/doc/requirements_and_design.txt +0 -13
  6. data/doc/roadmap.txt +11 -13
  7. data/doc/supplies/page_template.html +11 -5
  8. data/doc/thanks.txt +2 -4
  9. data/doc/tutorial.txt +1 -4
  10. data/examples/{nehe_lesson02.rb → NeHe/nehe_lesson02.rb} +0 -0
  11. data/examples/{nehe_lesson03.rb → NeHe/nehe_lesson03.rb} +0 -0
  12. data/examples/{nehe_lesson04.rb → NeHe/nehe_lesson04.rb} +0 -0
  13. data/examples/{nehe_lesson05.rb → NeHe/nehe_lesson05.rb} +0 -0
  14. data/examples/NeHe/nehe_lesson36.rb +303 -0
  15. data/examples/OrangeBook/3Dlabs-License.txt +33 -0
  16. data/examples/OrangeBook/brick.frag +36 -0
  17. data/examples/OrangeBook/brick.rb +388 -0
  18. data/examples/OrangeBook/brick.vert +41 -0
  19. data/examples/OrangeBook/particle.frag +17 -0
  20. data/examples/OrangeBook/particle.rb +424 -0
  21. data/examples/OrangeBook/particle.vert +38 -0
  22. data/examples/README +13 -83
  23. data/examples/RedBook/aaindex.rb +97 -0
  24. data/examples/RedBook/aapoly.rb +142 -0
  25. data/examples/RedBook/aargb.rb +119 -0
  26. data/examples/RedBook/accanti.rb +162 -0
  27. data/examples/RedBook/accpersp.rb +215 -0
  28. data/examples/RedBook/alpha.rb +123 -0
  29. data/examples/RedBook/alpha3D.rb +158 -0
  30. data/examples/RedBook/bezcurve.rb +105 -0
  31. data/examples/RedBook/bezmesh.rb +137 -0
  32. data/examples/RedBook/checker.rb +124 -0
  33. data/examples/RedBook/clip.rb +95 -0
  34. data/examples/RedBook/colormat.rb +135 -0
  35. data/examples/RedBook/cube.rb +69 -0
  36. data/examples/RedBook/depthcue.rb +99 -0
  37. data/examples/RedBook/dof.rb +205 -0
  38. data/examples/{legacy → RedBook}/double.rb +59 -58
  39. data/examples/{legacy → RedBook}/drawf.rb +47 -54
  40. data/examples/RedBook/feedback.rb +145 -0
  41. data/examples/RedBook/fog.rb +167 -0
  42. data/examples/RedBook/font.rb +151 -0
  43. data/examples/RedBook/hello.rb +79 -0
  44. data/examples/RedBook/image.rb +137 -0
  45. data/examples/{legacy → RedBook}/jitter.rb +60 -62
  46. data/examples/RedBook/lines.rb +128 -0
  47. data/examples/RedBook/list.rb +111 -0
  48. data/examples/RedBook/material.rb +275 -0
  49. data/examples/RedBook/mipmap.rb +156 -0
  50. data/examples/{legacy → RedBook}/model.rb +66 -72
  51. data/examples/{legacy → RedBook}/movelight.rb +67 -75
  52. data/examples/RedBook/pickdepth.rb +179 -0
  53. data/examples/{legacy → RedBook}/planet.rb +62 -66
  54. data/examples/RedBook/quadric.rb +158 -0
  55. data/examples/RedBook/robot.rb +115 -0
  56. data/examples/RedBook/select.rb +196 -0
  57. data/examples/RedBook/smooth.rb +95 -0
  58. data/examples/RedBook/stencil.rb +163 -0
  59. data/examples/RedBook/stroke.rb +167 -0
  60. data/examples/RedBook/surface.rb +166 -0
  61. data/examples/RedBook/teaambient.rb +132 -0
  62. data/examples/RedBook/teapots.rb +182 -0
  63. data/examples/RedBook/tess.rb +183 -0
  64. data/examples/RedBook/texbind.rb +147 -0
  65. data/examples/RedBook/texgen.rb +169 -0
  66. data/examples/RedBook/texturesurf.rb +128 -0
  67. data/examples/RedBook/varray.rb +159 -0
  68. data/examples/RedBook/wrap.rb +148 -0
  69. data/examples/misc/anisotropic.rb +194 -0
  70. data/examples/misc/font-glut.rb +46 -0
  71. data/examples/{plane.rb → misc/plane.rb} +0 -0
  72. data/examples/misc/readpixel.rb +65 -0
  73. data/examples/{smooth.rb → misc/smooth.rb} +0 -0
  74. data/examples/{test.rb → misc/test.rb} +0 -0
  75. data/ext/common/common.h +252 -70
  76. data/ext/common/gl-enums.h +6102 -7334
  77. data/ext/common/gl-types.h +47 -0
  78. data/ext/common/glu-enums.h +469 -0
  79. data/ext/gl/gl-1.0-1.1.c +842 -2464
  80. data/ext/gl/gl-1.2.c +217 -281
  81. data/ext/gl/gl-1.3.c +113 -133
  82. data/ext/gl/gl-1.4.c +98 -334
  83. data/ext/gl/gl-1.5.c +28 -34
  84. data/ext/gl/gl-2.0.c +26 -235
  85. data/ext/gl/gl-2.1.c +31 -124
  86. data/ext/gl/gl-enums.c +786 -631
  87. data/ext/gl/gl-ext-arb.c +66 -0
  88. data/ext/gl/gl-ext-ext.c +218 -0
  89. data/ext/gl/gl.c +138 -31
  90. data/ext/gl/mkrf_conf.rb +1 -0
  91. data/ext/glu/glu-enums.c +163 -0
  92. data/ext/glu/glu.c +1003 -1205
  93. data/ext/glu/mkrf_conf.rb +1 -0
  94. data/ext/glut/glut.c +1056 -1175
  95. data/lib/opengl.rb +90 -3
  96. data/test/tc_common.rb +26 -13
  97. data/test/tc_ext_arb.rb +73 -0
  98. data/test/tc_ext_ext.rb +74 -0
  99. data/test/tc_func_12.rb +8 -8
  100. data/test/tc_func_13.rb +17 -11
  101. data/test/tc_func_14.rb +8 -8
  102. data/test/tc_func_15.rb +190 -2
  103. data/test/tc_func_20.rb +36 -10
  104. data/test/tc_func_21.rb +445 -2
  105. data/test/tc_glu.rb +305 -0
  106. data/test/tc_misc.rb +1 -0
  107. metadata +84 -68
  108. data/doc/screenshots.txt +0 -23
  109. data/examples/legacy/COPYRIGHT +0 -8
  110. data/examples/legacy/aaindex.rb +0 -98
  111. data/examples/legacy/aapoly.rb +0 -153
  112. data/examples/legacy/aargb.rb +0 -139
  113. data/examples/legacy/accanti.rb +0 -159
  114. data/examples/legacy/accpersp.rb +0 -216
  115. data/examples/legacy/alpha.rb +0 -133
  116. data/examples/legacy/alpha3D.rb +0 -165
  117. data/examples/legacy/bezcurve.rb +0 -107
  118. data/examples/legacy/bezmesh.rb +0 -131
  119. data/examples/legacy/checker.rb +0 -121
  120. data/examples/legacy/clip.rb +0 -104
  121. data/examples/legacy/colormat.rb +0 -145
  122. data/examples/legacy/cube.rb +0 -73
  123. data/examples/legacy/depthcue.rb +0 -101
  124. data/examples/legacy/dof.rb +0 -212
  125. data/examples/legacy/feedback.rb +0 -152
  126. data/examples/legacy/fog.rb +0 -172
  127. data/examples/legacy/font-glut.rb +0 -41
  128. data/examples/legacy/font.rb +0 -158
  129. data/examples/legacy/hello.rb +0 -75
  130. data/examples/legacy/image.rb +0 -145
  131. data/examples/legacy/lines.rb +0 -135
  132. data/examples/legacy/list.rb +0 -120
  133. data/examples/legacy/material.rb +0 -290
  134. data/examples/legacy/mipmap.rb +0 -159
  135. data/examples/legacy/pickdepth.rb +0 -180
  136. data/examples/legacy/quadric.rb +0 -180
  137. data/examples/legacy/readpixel.rb +0 -59
  138. data/examples/legacy/robot.rb +0 -120
  139. data/examples/legacy/select.rb +0 -207
  140. data/examples/legacy/smooth.rb +0 -41
  141. data/examples/legacy/stencil.rb +0 -154
  142. data/examples/legacy/stroke.rb +0 -170
  143. data/examples/legacy/surface.rb +0 -170
  144. data/examples/legacy/teaambient.rb +0 -132
  145. data/examples/legacy/teapots.rb +0 -188
  146. data/examples/legacy/tess.rb +0 -222
  147. data/examples/legacy/texbind.rb +0 -157
  148. data/examples/legacy/texgen.rb +0 -171
  149. data/examples/legacy/texturesurf.rb +0 -128
  150. data/examples/legacy/varray.rb +0 -167
  151. data/examples/legacy/wrap.rb +0 -158
  152. data/lib/gl_prev.rb +0 -46
  153. data/lib/glu_prev.rb +0 -46
  154. data/lib/glut_prev.rb +0 -45
data/ext/gl/gl-1.0-1.1.c CHANGED
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
3
3
  * Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
4
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
4
5
  *
5
6
  * This program is distributed under the terms of the MIT license.
6
7
  * See the included MIT-LICENSE file for the terms of this license.
@@ -14,14 +15,6 @@
14
15
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
16
  */
16
17
 
17
- #ifdef __APPLE__
18
- #include <OpenGL/gl.h>
19
- #elif defined WIN32
20
- #include <windows.h>
21
- #include <GL/gl.h>
22
- #else
23
- #include <GL/gl.h>
24
- #endif
25
18
  #include "../common/common.h"
26
19
 
27
20
  #ifndef MAX
@@ -30,6 +23,147 @@
30
23
 
31
24
  /* OpenGL 1.0 + 1.1 functions */
32
25
 
26
+ /* simple functions - see common.h */
27
+ GL_SIMPLE_FUNC(ArrayElement,1,GLint,NUM2INT)
28
+ GL_SIMPLE_FUNC(Begin,1,GLenum,NUM2INT)
29
+ GL_SIMPLE_FUNC(BlendFunc,2,GLenum,NUM2INT)
30
+ GL_SIMPLE_FUNC(CallList,1,GLuint,NUM2UINT)
31
+ GL_SIMPLE_FUNC(Clear,1,GLbitfield,NUM2UINT)
32
+ GL_SIMPLE_FUNC(ClearAccum,4,GLfloat,NUM2DBL)
33
+ GL_SIMPLE_FUNC(ClearColor,4,GLfloat,NUM2DBL)
34
+ GL_SIMPLE_FUNC(ClearDepth,1,GLclampd,NUM2DBL)
35
+ GL_SIMPLE_FUNC(ClearIndex,1,GLfloat,NUM2DBL)
36
+ GL_SIMPLE_FUNC(ClearStencil,1,GLint,NUM2INT)
37
+ GL_SIMPLE_FUNC(Color3b,3,GLbyte,NUM2INT)
38
+ GL_SIMPLE_FUNC(Color3d,3,GLdouble,NUM2DBL)
39
+ GL_SIMPLE_FUNC(Color3f,3,GLfloat,NUM2DBL)
40
+ GL_SIMPLE_FUNC(Color3i,3,GLint,NUM2INT)
41
+ GL_SIMPLE_FUNC(Color3s,3,GLshort,NUM2INT)
42
+ GL_SIMPLE_FUNC(Color3ub,3,GLubyte,NUM2INT)
43
+ GL_SIMPLE_FUNC(Color3ui,3,GLuint,NUM2UINT)
44
+ GL_SIMPLE_FUNC(Color3us,3,GLushort,NUM2INT)
45
+ GL_SIMPLE_FUNC(Color4b,4,GLbyte,NUM2INT)
46
+ GL_SIMPLE_FUNC(Color4d,4,GLdouble,NUM2DBL)
47
+ GL_SIMPLE_FUNC(Color4f,4,GLfloat,NUM2DBL)
48
+ GL_SIMPLE_FUNC(Color4i,4,GLint,NUM2INT)
49
+ GL_SIMPLE_FUNC(Color4s,4,GLshort,NUM2INT)
50
+ GL_SIMPLE_FUNC(Color4ub,4,GLubyte,NUM2INT)
51
+ GL_SIMPLE_FUNC(Color4ui,4,GLuint,NUM2UINT)
52
+ GL_SIMPLE_FUNC(Color4us,4,GLushort,NUM2INT)
53
+ GL_SIMPLE_FUNC(ColorMask,4,GLboolean,NUM2INT)
54
+ GL_SIMPLE_FUNC(ColorMaterial,2,GLenum,NUM2INT)
55
+ GL_SIMPLE_FUNC(CullFace,1,GLenum,NUM2INT)
56
+ GL_SIMPLE_FUNC(DeleteLists,2,GLuint,NUM2UINT)
57
+ GL_SIMPLE_FUNC(DepthFunc,1,GLenum,NUM2INT)
58
+ GL_SIMPLE_FUNC(DepthMask,1,GLboolean,NUM2INT)
59
+ GL_SIMPLE_FUNC(DepthRange,2,GLclampd,NUM2DBL)
60
+ GL_SIMPLE_FUNC(Disable,1,GLenum,NUM2INT)
61
+ GL_SIMPLE_FUNC(DisableClientState,1,GLenum,NUM2INT)
62
+ GL_SIMPLE_FUNC(DrawBuffer,1,GLenum,NUM2INT)
63
+ GL_SIMPLE_FUNC(EdgeFlag,1,GLboolean,NUM2INT)
64
+ GL_SIMPLE_FUNC(Enable,1,GLenum,NUM2INT)
65
+ GL_SIMPLE_FUNC(EnableClientState,1,GLenum,NUM2INT)
66
+ GL_SIMPLE_FUNC(End,0,0,0)
67
+ GL_SIMPLE_FUNC(EndList,0,0,0)
68
+ GL_SIMPLE_FUNC(EvalCoord1d,1,GLdouble,NUM2DBL)
69
+ GL_SIMPLE_FUNC(EvalCoord1f,1,GLfloat,NUM2DBL)
70
+ GL_SIMPLE_FUNC(EvalCoord2d,2,GLdouble,NUM2DBL)
71
+ GL_SIMPLE_FUNC(EvalCoord2f,2,GLfloat,NUM2DBL)
72
+ GL_SIMPLE_FUNC(EvalPoint1,1,GLint,NUM2INT)
73
+ GL_SIMPLE_FUNC(EvalPoint2,2,GLint,NUM2INT)
74
+ GL_SIMPLE_FUNC(Finish,0,0,0)
75
+ GL_SIMPLE_FUNC(Flush,0,0,0)
76
+ GL_SIMPLE_FUNC(FrontFace,1,GLenum,NUM2INT)
77
+ GL_SIMPLE_FUNC(Frustum,6,GLdouble,NUM2DBL)
78
+ GL_SIMPLE_FUNC(Hint,2,GLenum,NUM2UINT)
79
+ GL_SIMPLE_FUNC(Indexd,1,GLdouble,NUM2DBL)
80
+ GL_SIMPLE_FUNC(Indexf,1,GLfloat,NUM2DBL)
81
+ GL_SIMPLE_FUNC(Indexi,1,GLint,NUM2INT)
82
+ GL_SIMPLE_FUNC(IndexMask,1,GLuint,NUM2UINT)
83
+ GL_SIMPLE_FUNC(Indexs,1,GLshort,NUM2INT)
84
+ GL_SIMPLE_FUNC(Indexub,1,GLubyte,NUM2INT)
85
+ GL_SIMPLE_FUNC(InitNames,0,0,0)
86
+ GL_SIMPLE_FUNC(LineWidth,1,GLfloat,NUM2DBL)
87
+ GL_SIMPLE_FUNC(ListBase,1,GLuint,NUM2UINT)
88
+ GL_SIMPLE_FUNC(LoadIdentity,0,0,0)
89
+ GL_SIMPLE_FUNC(LoadName,1,GLuint,NUM2UINT)
90
+ GL_SIMPLE_FUNC(LogicOp,1,GLenum,NUM2INT)
91
+ GL_SIMPLE_FUNC(MatrixMode,1,GLenum,NUM2INT)
92
+ GL_SIMPLE_FUNC(Normal3b,3,GLbyte,NUM2INT)
93
+ GL_SIMPLE_FUNC(Normal3d,3,GLdouble,NUM2DBL)
94
+ GL_SIMPLE_FUNC(Normal3f,3,GLfloat,NUM2DBL)
95
+ GL_SIMPLE_FUNC(Normal3i,3,GLint,NUM2INT)
96
+ GL_SIMPLE_FUNC(Normal3s,3,GLshort,NUM2INT)
97
+ GL_SIMPLE_FUNC(Ortho,6,GLdouble,NUM2DBL)
98
+ GL_SIMPLE_FUNC(PassThrough,1,GLfloat,NUM2DBL)
99
+ GL_SIMPLE_FUNC(PixelZoom,2,GLfloat,NUM2DBL)
100
+ GL_SIMPLE_FUNC(PointSize,1,GLfloat,NUM2DBL)
101
+ GL_SIMPLE_FUNC(PolygonMode,2,GLenum,NUM2INT)
102
+ GL_SIMPLE_FUNC(PopAttrib,0,0,0)
103
+ GL_SIMPLE_FUNC(PopClientAttrib,0,0,0)
104
+ GL_SIMPLE_FUNC(PopMatrix,0,0,0)
105
+ GL_SIMPLE_FUNC(PopName,0,0,0)
106
+ GL_SIMPLE_FUNC(PushAttrib,1,GLbitfield,NUM2UINT)
107
+ GL_SIMPLE_FUNC(PushClientAttrib,1,GLbitfield,NUM2UINT)
108
+ GL_SIMPLE_FUNC(PushMatrix,0,0,0)
109
+ GL_SIMPLE_FUNC(PushName,1,GLuint,NUM2UINT)
110
+ GL_SIMPLE_FUNC(RasterPos2d,2,GLdouble,NUM2DBL)
111
+ GL_SIMPLE_FUNC(RasterPos2f,2,GLfloat,NUM2DBL)
112
+ GL_SIMPLE_FUNC(RasterPos2i,2,GLint,NUM2INT)
113
+ GL_SIMPLE_FUNC(RasterPos2s,2,GLshort,NUM2INT)
114
+ GL_SIMPLE_FUNC(RasterPos3d,3,GLdouble,NUM2DBL)
115
+ GL_SIMPLE_FUNC(RasterPos3f,3,GLfloat,NUM2DBL)
116
+ GL_SIMPLE_FUNC(RasterPos3i,3,GLint,NUM2INT)
117
+ GL_SIMPLE_FUNC(RasterPos3s,3,GLshort,NUM2INT)
118
+ GL_SIMPLE_FUNC(RasterPos4d,4,GLdouble,NUM2DBL)
119
+ GL_SIMPLE_FUNC(RasterPos4f,4,GLfloat,NUM2DBL)
120
+ GL_SIMPLE_FUNC(RasterPos4i,4,GLint,NUM2INT)
121
+ GL_SIMPLE_FUNC(RasterPos4s,4,GLshort,NUM2INT)
122
+ GL_SIMPLE_FUNC(ReadBuffer,1,GLenum,NUM2INT)
123
+ GL_SIMPLE_FUNC(Rectd,4,GLdouble,NUM2DBL)
124
+ GL_SIMPLE_FUNC(Rectf,4,GLfloat,NUM2DBL)
125
+ GL_SIMPLE_FUNC(Recti,4,GLint,NUM2INT)
126
+ GL_SIMPLE_FUNC(Rects,4,GLshort,NUM2INT)
127
+ GL_SIMPLE_FUNC(Rotated,4,GLdouble,NUM2DBL)
128
+ GL_SIMPLE_FUNC(Rotatef,4,GLfloat,NUM2DBL)
129
+ GL_SIMPLE_FUNC(Scaled,3,GLdouble,NUM2DBL)
130
+ GL_SIMPLE_FUNC(Scalef,3,GLfloat,NUM2DBL)
131
+ GL_SIMPLE_FUNC(Scissor,4,GLint,NUM2UINT)
132
+ GL_SIMPLE_FUNC(ShadeModel,1,GLenum,NUM2INT)
133
+ GL_SIMPLE_FUNC(StencilMask,1,GLuint,NUM2UINT)
134
+ GL_SIMPLE_FUNC(StencilOp,3,GLenum,NUM2INT)
135
+ GL_SIMPLE_FUNC(TexCoord1d,1,GLdouble,NUM2DBL)
136
+ GL_SIMPLE_FUNC(TexCoord1f,1,GLfloat,NUM2DBL)
137
+ GL_SIMPLE_FUNC(TexCoord1i,1,GLint,NUM2INT)
138
+ GL_SIMPLE_FUNC(TexCoord1s,1,GLshort,NUM2INT)
139
+ GL_SIMPLE_FUNC(TexCoord2d,2,GLdouble,NUM2DBL)
140
+ GL_SIMPLE_FUNC(TexCoord2f,2,GLfloat,NUM2DBL)
141
+ GL_SIMPLE_FUNC(TexCoord2i,2,GLint,NUM2INT)
142
+ GL_SIMPLE_FUNC(TexCoord2s,2,GLshort,NUM2INT)
143
+ GL_SIMPLE_FUNC(TexCoord3d,3,GLdouble,NUM2DBL)
144
+ GL_SIMPLE_FUNC(TexCoord3f,3,GLfloat,NUM2DBL)
145
+ GL_SIMPLE_FUNC(TexCoord3i,3,GLint,NUM2INT)
146
+ GL_SIMPLE_FUNC(TexCoord3s,3,GLshort,NUM2INT)
147
+ GL_SIMPLE_FUNC(TexCoord4d,4,GLdouble,NUM2DBL)
148
+ GL_SIMPLE_FUNC(TexCoord4f,4,GLfloat,NUM2DBL)
149
+ GL_SIMPLE_FUNC(TexCoord4i,4,GLint,NUM2INT)
150
+ GL_SIMPLE_FUNC(TexCoord4s,4,GLshort,NUM2INT)
151
+ GL_SIMPLE_FUNC(Translated,3,GLdouble,NUM2DBL)
152
+ GL_SIMPLE_FUNC(Translatef,3,GLfloat,NUM2DBL)
153
+ GL_SIMPLE_FUNC(Vertex2d,2,GLdouble,NUM2DBL)
154
+ GL_SIMPLE_FUNC(Vertex2f,2,GLfloat,NUM2DBL)
155
+ GL_SIMPLE_FUNC(Vertex2i,2,GLint,NUM2INT)
156
+ GL_SIMPLE_FUNC(Vertex2s,2,GLshort,NUM2INT)
157
+ GL_SIMPLE_FUNC(Vertex3d,3,GLdouble,NUM2DBL)
158
+ GL_SIMPLE_FUNC(Vertex3f,3,GLfloat,NUM2DBL)
159
+ GL_SIMPLE_FUNC(Vertex3i,3,GLint,NUM2INT)
160
+ GL_SIMPLE_FUNC(Vertex3s,3,GLshort,NUM2INT)
161
+ GL_SIMPLE_FUNC(Vertex4d,4,GLdouble,NUM2DBL)
162
+ GL_SIMPLE_FUNC(Vertex4f,4,GLfloat,NUM2DBL)
163
+ GL_SIMPLE_FUNC(Vertex4i,4,GLint,NUM2INT)
164
+ GL_SIMPLE_FUNC(Vertex4s,4,GLshort,NUM2INT)
165
+ GL_SIMPLE_FUNC(Viewport,4,GLuint,NUM2UINT)
166
+
33
167
  static VALUE
34
168
  gl_NewList(obj,arg1,arg2)
35
169
  VALUE obj,arg1,arg2;
@@ -42,24 +176,6 @@ VALUE obj,arg1,arg2;
42
176
  return Qnil;
43
177
  }
44
178
 
45
- static VALUE
46
- gl_EndList(obj)
47
- VALUE obj;
48
- {
49
- glEndList();
50
- return Qnil;
51
- }
52
-
53
- static VALUE
54
- gl_CallList(obj,arg1)
55
- VALUE obj,arg1;
56
- {
57
- GLuint list;
58
- list = (GLuint)NUM2UINT(arg1);
59
- glCallList(list);
60
- return Qnil;
61
- }
62
-
63
179
  static VALUE
64
180
  gl_CallLists(obj,arg1)
65
181
  VALUE obj,arg1;
@@ -84,18 +200,6 @@ VALUE obj,arg1;
84
200
  return Qnil;
85
201
  }
86
202
 
87
- static VALUE
88
- gl_DeleteLists(obj,arg1,arg2)
89
- VALUE obj,arg1,arg2;
90
- {
91
- GLuint list;
92
- GLsizei range;
93
- list = (GLuint)NUM2UINT(arg1);
94
- range = (GLsizei)NUM2UINT(arg2);
95
- glDeleteLists(list,range);
96
- return Qnil;
97
- }
98
-
99
203
  static VALUE
100
204
  gl_GenLists(obj,arg1)
101
205
  VALUE obj,arg1;
@@ -107,26 +211,6 @@ VALUE obj,arg1;
107
211
  return INT2NUM(ret);
108
212
  }
109
213
 
110
- static VALUE
111
- gl_ListBase(obj,arg1)
112
- VALUE obj,arg1;
113
- {
114
- GLuint base;
115
- base = (GLuint)NUM2UINT(arg1);
116
- glListBase(base);
117
- return Qnil;
118
- }
119
-
120
- static VALUE
121
- gl_Begin(obj,arg1)
122
- VALUE obj,arg1;
123
- {
124
- GLenum mode;
125
- mode = (GLenum)NUM2INT(arg1);
126
- glBegin(mode);
127
- return Qnil;
128
- }
129
-
130
214
  static VALUE
131
215
  gl_Bitmap(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
132
216
  VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
@@ -143,1367 +227,314 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
143
227
  yorig = (GLfloat)NUM2DBL(arg4);
144
228
  xmove = (GLfloat)NUM2DBL(arg5);
145
229
  ymove = (GLfloat)NUM2DBL(arg6);
146
- if (TYPE(arg7) == T_FIXNUM || TYPE(arg7) == T_BIGNUM) { /* offset to unpack buffer */
147
- GLuint offset = NUM2UINT(arg7);
148
- glBitmap(width, height, xorig, yorig, xmove, ymove, (GLvoid *)offset);
149
- } else if (TYPE(arg7) == T_STRING) {
230
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
231
+ glBitmap(width, height, xorig, yorig, xmove, ymove, (GLvoid *)NUM2INT(arg7));
232
+ } else {
150
233
  const GLubyte *bitmap;
234
+ Check_Type(arg7,T_STRING);
235
+
151
236
  if (RSTRING(arg7)->len < (width * height / 8))
152
237
  rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
153
238
 
154
239
  bitmap = (const GLubyte*)RSTRING(arg7)->ptr;
155
240
  glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
156
- } else {
157
- Check_Type(arg7,T_STRING); /* force exception */
158
241
  }
159
242
  return Qnil;
160
243
  }
161
244
 
162
245
  static VALUE
163
- gl_Color3b(obj,arg1,arg2,arg3)
164
- VALUE obj,arg1,arg2,arg3;
246
+ gl_EdgeFlagv(obj,arg1)
247
+ VALUE obj,arg1;
165
248
  {
166
- GLbyte red;
167
- GLbyte green;
168
- GLbyte blue;
169
- red = (GLbyte)NUM2INT(arg1);
170
- green = (GLbyte)NUM2INT(arg2);
171
- blue = (GLbyte)NUM2INT(arg3);
172
- glColor3b(red,green,blue);
249
+ GLboolean flag[1] = { GL_FALSE };
250
+ Check_Type(arg1,T_ARRAY);
251
+ ary2cboolean(arg1,flag,1);
252
+ glEdgeFlagv(flag);
173
253
  return Qnil;
174
254
  }
175
255
 
176
256
  static VALUE
177
- gl_Color3d(obj,arg1,arg2,arg3)
178
- VALUE obj,arg1,arg2,arg3;
257
+ gl_Indexdv(obj,arg1)
258
+ VALUE obj,arg1;
179
259
  {
180
- GLdouble red;
181
- GLdouble green;
182
- GLdouble blue;
183
- red = (GLdouble)NUM2DBL(arg1);
184
- green = (GLdouble)NUM2DBL(arg2);
185
- blue = (GLdouble)NUM2DBL(arg3);
186
- glColor3d(red,green,blue);
260
+ GLdouble c[1] = {0.0};
261
+ Check_Type(arg1,T_ARRAY);
262
+ ary2cdbl(arg1,c,1);
263
+ glIndexdv(c);
187
264
  return Qnil;
188
265
  }
189
266
 
190
267
  static VALUE
191
- gl_Color3f(obj,arg1,arg2,arg3)
192
- VALUE obj,arg1,arg2,arg3;
268
+ gl_Indexfv(obj,arg1)
269
+ VALUE obj,arg1;
193
270
  {
194
- GLfloat red;
195
- GLfloat green;
196
- GLfloat blue;
197
- red = (GLfloat)NUM2DBL(arg1);
198
- green = (GLfloat)NUM2DBL(arg2);
199
- blue = (GLfloat)NUM2DBL(arg3);
200
- glColor3f(red,green,blue);
271
+ GLfloat c[1] = {0.0};
272
+ Check_Type(arg1,T_ARRAY);
273
+ ary2cflt(arg1,c,1);
274
+ glIndexfv(c);
201
275
  return Qnil;
202
276
  }
203
277
 
204
278
  static VALUE
205
- gl_Color3i(obj,arg1,arg2,arg3)
206
- VALUE obj,arg1,arg2,arg3;
279
+ gl_Indexiv(obj,arg1)
280
+ VALUE obj,arg1;
207
281
  {
208
- GLint red;
209
- GLint green;
210
- GLint blue;
211
- red = (GLint)NUM2INT(arg1);
212
- green = (GLint)NUM2INT(arg2);
213
- blue = (GLint)NUM2INT(arg3);
214
- glColor3i(red,green,blue);
282
+ GLint c[1] = {0.0};
283
+ Check_Type(arg1,T_ARRAY);
284
+ ary2cint(arg1,c,1);
285
+ glIndexiv(c);
215
286
  return Qnil;
216
287
  }
217
288
 
218
289
  static VALUE
219
- gl_Color3s(obj,arg1,arg2,arg3)
220
- VALUE obj,arg1,arg2,arg3;
290
+ gl_Indexsv(obj,arg1)
291
+ VALUE obj,arg1;
221
292
  {
222
- GLshort red;
223
- GLshort green;
224
- GLshort blue;
225
- red = (GLshort)NUM2INT(arg1);
226
- green = (GLshort)NUM2INT(arg2);
227
- blue = (GLshort)NUM2INT(arg3);
228
- glColor3s(red,green,blue);
293
+ GLshort c[1] = {0};
294
+ Check_Type(arg1,T_ARRAY);
295
+ ary2cshort(arg1,c,1);
296
+ glIndexsv(c);
229
297
  return Qnil;
230
298
  }
231
299
 
232
300
  static VALUE
233
- gl_Color3ub(obj,arg1,arg2,arg3)
234
- VALUE obj,arg1,arg2,arg3;
301
+ gl_ClipPlane(obj,arg1,arg2)
302
+ VALUE obj,arg1,arg2;
235
303
  {
236
- GLubyte red;
237
- GLubyte green;
238
- GLubyte blue;
239
- red = (GLubyte)NUM2INT(arg1);
240
- green = (GLubyte)NUM2INT(arg2);
241
- blue = (GLubyte)NUM2INT(arg3);
242
- glColor3ub(red,green,blue);
304
+ GLenum plane;
305
+ GLdouble equation[4];
306
+ plane = (GLenum)NUM2INT(arg1);
307
+ Check_Type(arg2,T_ARRAY);
308
+ ary2cdbl(arg2, equation, 4);
309
+ glClipPlane(plane,equation);
243
310
  return Qnil;
244
311
  }
245
312
 
246
313
  static VALUE
247
- gl_Color3ui(obj,arg1,arg2,arg3)
248
- VALUE obj,arg1,arg2,arg3;
314
+ gl_Fogf(obj,arg1,arg2)
315
+ VALUE obj,arg1,arg2;
249
316
  {
250
- GLuint red;
251
- GLuint green;
252
- GLuint blue;
253
- red = (GLuint)NUM2UINT(arg1);
254
- green = (GLuint)NUM2UINT(arg2);
255
- blue = (GLuint)NUM2UINT(arg3);
256
- glColor3ui(red,green,blue);
317
+ GLenum pname;
318
+ GLfloat param;
319
+ pname = (GLenum)NUM2INT(arg1);
320
+ param = (GLfloat)NUM2DBL(arg2);
321
+ glFogf(pname,param);
257
322
  return Qnil;
258
323
  }
259
324
 
260
325
  static VALUE
261
- gl_Color3us(obj,arg1,arg2,arg3)
262
- VALUE obj,arg1,arg2,arg3;
326
+ gl_Fogfv(obj,arg1,arg2)
327
+ VALUE obj,arg1,arg2;
263
328
  {
264
- GLushort red;
265
- GLushort green;
266
- GLushort blue;
267
- red = (GLushort)NUM2INT(arg1);
268
- green = (GLushort)NUM2INT(arg2);
269
- blue = (GLushort)NUM2INT(arg3);
270
- glColor3us(red,green,blue);
329
+ GLenum pname;
330
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
331
+ pname = (GLenum)NUM2INT(arg1);
332
+ Check_Type(arg2,T_ARRAY);
333
+ ary2cflt(arg2,params,4);
334
+ glFogfv(pname,params);
271
335
  return Qnil;
272
336
  }
273
337
 
274
338
  static VALUE
275
- gl_Color4b(obj,arg1,arg2,arg3,arg4)
276
- VALUE obj,arg1,arg2,arg3,arg4;
339
+ gl_Fogi(obj,arg1,arg2)
340
+ VALUE obj,arg1,arg2;
277
341
  {
278
- GLbyte red;
279
- GLbyte green;
280
- GLbyte blue;
281
- GLbyte alpha;
282
- red = (GLbyte)NUM2INT(arg1);
283
- green = (GLbyte)NUM2INT(arg2);
284
- blue = (GLbyte)NUM2INT(arg3);
285
- alpha = (GLbyte)NUM2INT(arg4);
286
- glColor4b(red,green,blue,alpha);
342
+ GLenum pname;
343
+ GLint param;
344
+ pname = (GLenum)NUM2INT(arg1);
345
+ param = (GLint)NUM2INT(arg2);
346
+ glFogi(pname,param);
287
347
  return Qnil;
288
348
  }
289
349
 
290
350
  static VALUE
291
- gl_Color4d(obj,arg1,arg2,arg3,arg4)
292
- VALUE obj,arg1,arg2,arg3,arg4;
351
+ gl_Fogiv(obj,arg1,arg2)
352
+ VALUE obj,arg1,arg2;
293
353
  {
294
- GLdouble red;
295
- GLdouble green;
296
- GLdouble blue;
297
- GLdouble alpha;
298
- red = (GLdouble)NUM2DBL(arg1);
299
- green = (GLdouble)NUM2DBL(arg2);
300
- blue = (GLdouble)NUM2DBL(arg3);
301
- alpha = (GLdouble)NUM2DBL(arg4);
302
- glColor4d(red,green,blue,alpha);
354
+ GLenum pname;
355
+ GLint params[4] = {0,0,0,0};
356
+ pname = (GLenum)NUM2INT(arg1);
357
+ Check_Type(arg2,T_ARRAY);
358
+ ary2cint(arg2,params,4);
359
+ glFogiv(pname,params);
303
360
  return Qnil;
304
361
  }
305
362
 
306
363
  static VALUE
307
- gl_Color4f(obj,arg1,arg2,arg3,arg4)
308
- VALUE obj,arg1,arg2,arg3,arg4;
364
+ gl_Lightf(obj,arg1,arg2,arg3)
365
+ VALUE obj,arg1,arg2,arg3;
309
366
  {
310
- GLfloat red;
311
- GLfloat green;
312
- GLfloat blue;
313
- GLfloat alpha;
314
- red = (GLfloat)NUM2DBL(arg1);
315
- green = (GLfloat)NUM2DBL(arg2);
316
- blue = (GLfloat)NUM2DBL(arg3);
317
- alpha = (GLfloat)NUM2DBL(arg4);
318
- glColor4f(red,green,blue,alpha);
367
+ GLenum light;
368
+ GLenum pname;
369
+ GLfloat param;
370
+ light = (GLenum)NUM2INT(arg1);
371
+ pname = (GLenum)NUM2INT(arg2);
372
+ param = (GLfloat)NUM2DBL(arg3);
373
+ glLightf(light,pname,param);
319
374
  return Qnil;
320
375
  }
321
376
 
322
377
  static VALUE
323
- gl_Color4i(obj,arg1,arg2,arg3,arg4)
324
- VALUE obj,arg1,arg2,arg3,arg4;
378
+ gl_Lightfv(obj,arg1,arg2,arg3)
379
+ VALUE obj,arg1,arg2,arg3;
325
380
  {
326
- GLint red;
327
- GLint green;
328
- GLint blue;
329
- GLint alpha;
330
- red = (GLint)NUM2INT(arg1);
331
- green = (GLint)NUM2INT(arg2);
332
- blue = (GLint)NUM2INT(arg3);
333
- alpha = (GLint)NUM2INT(arg4);
334
- glColor4i(red,green,blue,alpha);
381
+ GLenum light;
382
+ GLenum pname;
383
+ GLfloat params[4] = {0.0,0.0,0.0,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);
335
389
  return Qnil;
336
390
  }
337
391
 
338
392
  static VALUE
339
- gl_Color4s(obj,arg1,arg2,arg3,arg4)
340
- VALUE obj,arg1,arg2,arg3,arg4;
393
+ gl_Lighti(obj,arg1,arg2,arg3)
394
+ VALUE obj,arg1,arg2,arg3;
341
395
  {
342
- GLshort red;
343
- GLshort green;
344
- GLshort blue;
345
- GLshort alpha;
346
- red = (GLshort)NUM2INT(arg1);
347
- green = (GLshort)NUM2INT(arg2);
348
- blue = (GLshort)NUM2INT(arg3);
349
- alpha = (GLshort)NUM2INT(arg4);
350
- glColor4s(red,green,blue,alpha);
396
+ GLenum light;
397
+ GLenum pname;
398
+ GLint param;
399
+ light = (GLenum)NUM2INT(arg1);
400
+ pname = (GLenum)NUM2INT(arg2);
401
+ param = (GLint)NUM2INT(arg3);
402
+ glLighti(light,pname,param);
351
403
  return Qnil;
352
404
  }
353
405
 
354
406
  static VALUE
355
- gl_Color4ub(obj,arg1,arg2,arg3,arg4)
356
- VALUE obj,arg1,arg2,arg3,arg4;
407
+ gl_Lightiv(obj,arg1,arg2,arg3)
408
+ VALUE obj,arg1,arg2,arg3;
357
409
  {
358
- GLubyte red;
359
- GLubyte green;
360
- GLubyte blue;
361
- GLubyte alpha;
362
- red = (GLubyte)NUM2INT(arg1);
363
- green = (GLubyte)NUM2INT(arg2);
364
- blue = (GLubyte)NUM2INT(arg3);
365
- alpha = (GLubyte)NUM2INT(arg4);
366
- glColor4ub(red,green,blue,alpha);
410
+ GLenum light;
411
+ GLenum pname;
412
+ GLint params[4]={0,0,0,0};
413
+ light = (GLenum)NUM2INT(arg1);
414
+ pname = (GLenum)NUM2INT(arg2);
415
+ Check_Type(arg3,T_ARRAY);
416
+ ary2cint(arg3,params,4);
417
+ glLightiv(light,pname,params);
367
418
  return Qnil;
368
419
  }
369
420
 
370
421
  static VALUE
371
- gl_Color4ui(obj,arg1,arg2,arg3,arg4)
372
- VALUE obj,arg1,arg2,arg3,arg4;
422
+ gl_LightModelf(obj,arg1,arg2)
423
+ VALUE obj,arg1,arg2;
373
424
  {
374
- GLuint red;
375
- GLuint green;
376
- GLuint blue;
377
- GLuint alpha;
378
- red = (GLuint)NUM2UINT(arg1);
379
- green = (GLuint)NUM2UINT(arg2);
380
- blue = (GLuint)NUM2UINT(arg3);
381
- alpha = (GLuint)NUM2UINT(arg4);
382
- glColor4ui(red,green,blue,alpha);
425
+ GLenum pname;
426
+ GLfloat param;
427
+ pname = (GLenum)NUM2INT(arg1);
428
+ param = (GLfloat)NUM2DBL(arg2);
429
+ glLightModelf(pname,param);
383
430
  return Qnil;
384
431
  }
385
432
 
386
433
  static VALUE
387
- gl_Color4us(obj,arg1,arg2,arg3,arg4)
388
- VALUE obj,arg1,arg2,arg3,arg4;
434
+ gl_LightModelfv(obj,arg1,arg2)
435
+ VALUE obj,arg1,arg2;
389
436
  {
390
- GLushort red;
391
- GLushort green;
392
- GLushort blue;
393
- GLushort alpha;
394
- red = (GLushort)NUM2INT(arg1);
395
- green = (GLushort)NUM2INT(arg2);
396
- blue = (GLushort)NUM2INT(arg3);
397
- alpha = (GLushort)NUM2INT(arg4);
398
- glColor4us(red,green,blue,alpha);
437
+ GLenum pname;
438
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
439
+ pname = (GLenum)NUM2INT(arg1);
440
+ Check_Type(arg2,T_ARRAY);
441
+ ary2cflt(arg2,params,4);
442
+ glLightModelfv(pname,params);
399
443
  return Qnil;
400
444
  }
401
445
 
402
446
  static VALUE
403
- gl_EdgeFlag(obj,arg1)
404
- VALUE obj,arg1;
447
+ gl_LightModeli(obj,arg1,arg2)
448
+ VALUE obj,arg1,arg2;
405
449
  {
406
- GLboolean flag;
407
- flag = (GLboolean)NUM2INT(arg1);
408
- glEdgeFlag(flag);
450
+ GLenum pname;
451
+ GLint param;
452
+ pname = (GLenum)NUM2INT(arg1);
453
+ param = (GLint)NUM2INT(arg2);
454
+ glLightModeli(pname,param);
409
455
  return Qnil;
410
456
  }
411
457
 
412
458
  static VALUE
413
- gl_EdgeFlagv(obj,arg1)
414
- VALUE obj,arg1;
459
+ gl_LightModeliv(obj,arg1,arg2)
460
+ VALUE obj,arg1,arg2;
415
461
  {
416
- GLboolean flag[1] = { GL_FALSE };
417
- Check_Type(arg1,T_ARRAY);
418
- ary2cboolean(arg1,flag,1);
419
- glEdgeFlagv(flag);
462
+ GLenum pname;
463
+ GLint params[4] = {0,0,0,0};
464
+ pname = (GLenum)NUM2INT(arg1);
465
+ Check_Type(arg2,T_ARRAY);
466
+ ary2cint(arg2,params,4);
467
+ glLightModeliv(pname,params);
420
468
  return Qnil;
421
469
  }
422
470
 
423
471
  static VALUE
424
- gl_End(obj)
425
- VALUE obj;
472
+ gl_LineStipple(obj,arg1,arg2)
473
+ VALUE obj,arg1,arg2;
426
474
  {
427
- glEnd();
475
+ GLint factor;
476
+ GLushort pattern;
477
+ factor = (GLint)NUM2INT(arg1);
478
+ pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF);
479
+ glLineStipple(factor,pattern);
428
480
  return Qnil;
429
481
  }
430
482
 
431
483
  static VALUE
432
- gl_Indexd(obj,arg1)
433
- VALUE obj,arg1;
484
+ gl_Materialf(obj,arg1,arg2,arg3)
485
+ VALUE obj,arg1,arg2,arg3;
434
486
  {
435
- GLdouble c;
436
- c = (GLdouble)NUM2DBL(arg1);
437
- glIndexd(c);
487
+ GLenum face;
488
+ GLenum pname;
489
+ GLfloat param;
490
+ face = (GLenum)NUM2INT(arg1);
491
+ pname = (GLenum)NUM2INT(arg2);
492
+ param = (GLfloat)NUM2DBL(arg3);
493
+ glMaterialf(face,pname,param);
438
494
  return Qnil;
439
495
  }
440
496
 
441
497
  static VALUE
442
- gl_Indexdv(obj,arg1)
443
- VALUE obj,arg1;
498
+ gl_Materialfv(obj,arg1,arg2,arg3)
499
+ VALUE obj,arg1,arg2,arg3;
444
500
  {
445
- GLdouble c[1] = {0.0};
446
- Check_Type(arg1,T_ARRAY);
447
- ary2cdbl(arg1,c,1);
448
- glIndexdv(c);
501
+ GLenum face;
502
+ GLenum pname;
503
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
504
+ face = (GLenum)NUM2INT(arg1);
505
+ pname = (GLenum)NUM2INT(arg2);
506
+ Check_Type(arg3,T_ARRAY);
507
+ ary2cflt(arg3,params,4);
508
+ glMaterialfv(face,pname,params);
449
509
  return Qnil;
450
510
  }
451
511
 
452
512
  static VALUE
453
- gl_Indexf(obj,arg1)
454
- VALUE obj,arg1;
513
+ gl_Materiali(obj,arg1,arg2,arg3)
514
+ VALUE obj,arg1,arg2,arg3;
455
515
  {
456
- GLfloat c;
457
- c = (GLfloat)NUM2DBL(arg1);
458
- glIndexf(c);
516
+ GLenum face;
517
+ GLenum pname;
518
+ GLint param;
519
+ face = (GLenum)NUM2INT(arg1);
520
+ pname = (GLenum)NUM2INT(arg2);
521
+ param = (GLint)NUM2INT(arg3);
522
+ glMateriali(face,pname,param);
459
523
  return Qnil;
460
524
  }
461
525
 
462
526
  static VALUE
463
- gl_Indexfv(obj,arg1)
464
- VALUE obj,arg1;
465
- {
466
- GLfloat c[1] = {0.0};
467
- Check_Type(arg1,T_ARRAY);
468
- ary2cflt(arg1,c,1);
469
- glIndexfv(c);
470
- return Qnil;
471
- }
472
-
473
- static VALUE
474
- gl_Indexi(obj,arg1)
475
- VALUE obj,arg1;
476
- {
477
- GLint c;
478
- c = (GLint)NUM2INT(arg1);
479
- glIndexi(c);
480
- return Qnil;
481
- }
482
-
483
- static VALUE
484
- gl_Indexiv(obj,arg1)
485
- VALUE obj,arg1;
486
- {
487
- GLint c[1] = {0.0};
488
- Check_Type(arg1,T_ARRAY);
489
- ary2cint(arg1,c,1);
490
- glIndexiv(c);
491
- return Qnil;
492
- }
493
-
494
- static VALUE
495
- gl_Indexs(obj,arg1)
496
- VALUE obj,arg1;
497
- {
498
- GLshort c;
499
- c = (GLshort)NUM2INT(arg1);
500
- glIndexs(c);
501
- return Qnil;
502
- }
503
-
504
- static VALUE
505
- gl_Indexsv(obj,arg1)
506
- VALUE obj,arg1;
507
- {
508
- GLshort c[1] = {0};
509
- Check_Type(arg1,T_ARRAY);
510
- ary2cshort(arg1,c,1);
511
- glIndexsv(c);
512
- return Qnil;
513
- }
514
-
515
- static VALUE
516
- gl_Normal3b(obj,arg1,arg2,arg3)
517
- VALUE obj,arg1,arg2,arg3;
518
- {
519
- GLbyte nx;
520
- GLbyte ny;
521
- GLbyte nz;
522
- nx = (GLbyte)NUM2INT(arg1);
523
- ny = (GLbyte)NUM2INT(arg2);
524
- nz = (GLbyte)NUM2INT(arg3);
525
- glNormal3b(nx,ny,nz);
526
- return Qnil;
527
- }
528
-
529
- static VALUE
530
- gl_Normal3d(obj,arg1,arg2,arg3)
531
- VALUE obj,arg1,arg2,arg3;
532
- {
533
- GLdouble nx;
534
- GLdouble ny;
535
- GLdouble nz;
536
- nx = (GLdouble)NUM2DBL(arg1);
537
- ny = (GLdouble)NUM2DBL(arg2);
538
- nz = (GLdouble)NUM2DBL(arg3);
539
- glNormal3d(nx,ny,nz);
540
- return Qnil;
541
- }
542
-
543
- static VALUE
544
- gl_Normal3f(obj,arg1,arg2,arg3)
545
- VALUE obj,arg1,arg2,arg3;
546
- {
547
- GLfloat nx;
548
- GLfloat ny;
549
- GLfloat nz;
550
- nx = (GLfloat)NUM2DBL(arg1);
551
- ny = (GLfloat)NUM2DBL(arg2);
552
- nz = (GLfloat)NUM2DBL(arg3);
553
- glNormal3f(nx,ny,nz);
554
- return Qnil;
555
- }
556
-
557
- static VALUE
558
- gl_Normal3i(obj,arg1,arg2,arg3)
559
- VALUE obj,arg1,arg2,arg3;
560
- {
561
- GLint nx;
562
- GLint ny;
563
- GLint nz;
564
- nx = (GLint)NUM2INT(arg1);
565
- ny = (GLint)NUM2INT(arg2);
566
- nz = (GLint)NUM2INT(arg3);
567
- glNormal3i(nx,ny,nz);
568
- return Qnil;
569
- }
570
-
571
- static VALUE
572
- gl_Normal3s(obj,arg1,arg2,arg3)
573
- VALUE obj,arg1,arg2,arg3;
574
- {
575
- GLshort nx;
576
- GLshort ny;
577
- GLshort nz;
578
- nx = (GLshort)NUM2INT(arg1);
579
- ny = (GLshort)NUM2INT(arg2);
580
- nz = (GLshort)NUM2INT(arg3);
581
- glNormal3s(nx,ny,nz);
582
- return Qnil;
583
- }
584
-
585
- static VALUE
586
- gl_RasterPos2d(obj,arg1,arg2)
587
- VALUE obj,arg1,arg2;
588
- {
589
- GLdouble x;
590
- GLdouble y;
591
- x = (GLdouble)NUM2DBL(arg1);
592
- y = (GLdouble)NUM2DBL(arg2);
593
- glRasterPos2d(x,y);
594
- return Qnil;
595
- }
596
-
597
- static VALUE
598
- gl_RasterPos2f(obj,arg1,arg2)
599
- VALUE obj,arg1,arg2;
600
- {
601
- GLfloat x;
602
- GLfloat y;
603
- x = (GLfloat)NUM2DBL(arg1);
604
- y = (GLfloat)NUM2DBL(arg2);
605
- glRasterPos2f(x,y);
606
- return Qnil;
607
- }
608
-
609
- static VALUE
610
- gl_RasterPos2i(obj,arg1,arg2)
611
- VALUE obj,arg1,arg2;
612
- {
613
- GLint x;
614
- GLint y;
615
- x = (GLint)NUM2INT(arg1);
616
- y = (GLint)NUM2INT(arg2);
617
- glRasterPos2i(x,y);
618
- return Qnil;
619
- }
620
-
621
- static VALUE
622
- gl_RasterPos2s(obj,arg1,arg2)
623
- VALUE obj,arg1,arg2;
624
- {
625
- GLshort x;
626
- GLshort y;
627
- x = (GLshort)NUM2INT(arg1);
628
- y = (GLshort)NUM2INT(arg2);
629
- glRasterPos2s(x,y);
630
- return Qnil;
631
- }
632
-
633
- static VALUE
634
- gl_RasterPos3d(obj,arg1,arg2,arg3)
635
- VALUE obj,arg1,arg2,arg3;
636
- {
637
- GLdouble x;
638
- GLdouble y;
639
- GLdouble z;
640
- x = (GLdouble)NUM2DBL(arg1);
641
- y = (GLdouble)NUM2DBL(arg2);
642
- z = (GLdouble)NUM2DBL(arg3);
643
- glRasterPos3d(x,y,z);
644
- return Qnil;
645
- }
646
-
647
- static VALUE
648
- gl_RasterPos3f(obj,arg1,arg2,arg3)
649
- VALUE obj,arg1,arg2,arg3;
650
- {
651
- GLfloat x;
652
- GLfloat y;
653
- GLfloat z;
654
- x = (GLfloat)NUM2DBL(arg1);
655
- y = (GLfloat)NUM2DBL(arg2);
656
- z = (GLfloat)NUM2DBL(arg3);
657
- glRasterPos3f(x,y,z);
658
- return Qnil;
659
- }
660
-
661
- static VALUE
662
- gl_RasterPos3i(obj,arg1,arg2,arg3)
663
- VALUE obj,arg1,arg2,arg3;
664
- {
665
- GLint x;
666
- GLint y;
667
- GLint z;
668
- x = (GLint)NUM2INT(arg1);
669
- y = (GLint)NUM2INT(arg2);
670
- z = (GLint)NUM2INT(arg3);
671
- glRasterPos3i(x,y,z);
672
- return Qnil;
673
- }
674
-
675
- static VALUE
676
- gl_RasterPos3s(obj,arg1,arg2,arg3)
677
- VALUE obj,arg1,arg2,arg3;
678
- {
679
- GLshort x;
680
- GLshort y;
681
- GLshort z;
682
- x = (GLshort)NUM2INT(arg1);
683
- y = (GLshort)NUM2INT(arg2);
684
- z = (GLshort)NUM2INT(arg3);
685
- glRasterPos3s(x,y,z);
686
- return Qnil;
687
- }
688
-
689
- static VALUE
690
- gl_RasterPos4d(obj,arg1,arg2,arg3,arg4)
691
- VALUE obj,arg1,arg2,arg3,arg4;
692
- {
693
- GLdouble x;
694
- GLdouble y;
695
- GLdouble z;
696
- GLdouble w;
697
- x = (GLdouble)NUM2DBL(arg1);
698
- y = (GLdouble)NUM2DBL(arg2);
699
- z = (GLdouble)NUM2DBL(arg3);
700
- w = (GLdouble)NUM2DBL(arg4);
701
- glRasterPos4d(x,y,z,w);
702
- return Qnil;
703
- }
704
-
705
- static VALUE
706
- gl_RasterPos4f(obj,arg1,arg2,arg3,arg4)
707
- VALUE obj,arg1,arg2,arg3,arg4;
708
- {
709
- GLfloat x;
710
- GLfloat y;
711
- GLfloat z;
712
- GLfloat w;
713
- x = (GLfloat)NUM2DBL(arg1);
714
- y = (GLfloat)NUM2DBL(arg2);
715
- z = (GLfloat)NUM2DBL(arg3);
716
- w = (GLfloat)NUM2DBL(arg4);
717
- glRasterPos4f(x,y,z,w);
718
- return Qnil;
719
- }
720
-
721
- static VALUE
722
- gl_RasterPos4i(obj,arg1,arg2,arg3,arg4)
723
- VALUE obj,arg1,arg2,arg3,arg4;
724
- {
725
- GLint x;
726
- GLint y;
727
- GLint z;
728
- GLint w;
729
- x = (GLint)NUM2INT(arg1);
730
- y = (GLint)NUM2INT(arg2);
731
- z = (GLint)NUM2INT(arg3);
732
- w = (GLint)NUM2INT(arg4);
733
- glRasterPos4i(x,y,z,w);
734
- return Qnil;
735
- }
736
-
737
- static VALUE
738
- gl_RasterPos4s(obj,arg1,arg2,arg3,arg4)
739
- VALUE obj,arg1,arg2,arg3,arg4;
740
- {
741
- GLshort x;
742
- GLshort y;
743
- GLshort z;
744
- GLshort w;
745
- x = (GLshort)NUM2INT(arg1);
746
- y = (GLshort)NUM2INT(arg2);
747
- z = (GLshort)NUM2INT(arg3);
748
- w = (GLshort)NUM2INT(arg4);
749
- glRasterPos4s(x,y,z,w);
750
- return Qnil;
751
- }
752
-
753
- static VALUE
754
- gl_Rectd(obj,arg1,arg2,arg3,arg4)
755
- VALUE obj,arg1,arg2,arg3,arg4;
756
- {
757
- GLdouble x1;
758
- GLdouble y1;
759
- GLdouble x2;
760
- GLdouble y2;
761
- x1 = (GLdouble)NUM2DBL(arg1);
762
- y1 = (GLdouble)NUM2DBL(arg2);
763
- x2 = (GLdouble)NUM2DBL(arg3);
764
- y2 = (GLdouble)NUM2DBL(arg4);
765
- glRectd(x1,y1,x2,y2);
766
- return Qnil;
767
- }
768
-
769
- static VALUE
770
- gl_Rectf(obj,arg1,arg2,arg3,arg4)
771
- VALUE obj,arg1,arg2,arg3,arg4;
772
- {
773
- GLfloat x1;
774
- GLfloat y1;
775
- GLfloat x2;
776
- GLfloat y2;
777
- x1 = (GLfloat)NUM2DBL(arg1);
778
- y1 = (GLfloat)NUM2DBL(arg2);
779
- x2 = (GLfloat)NUM2DBL(arg3);
780
- y2 = (GLfloat)NUM2DBL(arg4);
781
- glRectf(x1,y1,x2,y2);
782
- return Qnil;
783
- }
784
-
785
- static VALUE
786
- gl_Recti(obj,arg1,arg2,arg3,arg4)
787
- VALUE obj,arg1,arg2,arg3,arg4;
788
- {
789
- GLint x1;
790
- GLint y1;
791
- GLint x2;
792
- GLint y2;
793
- x1 = (GLint)NUM2INT(arg1);
794
- y1 = (GLint)NUM2INT(arg2);
795
- x2 = (GLint)NUM2INT(arg3);
796
- y2 = (GLint)NUM2INT(arg4);
797
- glRecti(x1,y1,x2,y2);
798
- return Qnil;
799
- }
800
-
801
- static VALUE
802
- gl_Rects(obj,arg1,arg2,arg3,arg4)
803
- VALUE obj,arg1,arg2,arg3,arg4;
804
- {
805
- GLshort x1;
806
- GLshort y1;
807
- GLshort x2;
808
- GLshort y2;
809
- x1 = (GLshort)NUM2INT(arg1);
810
- y1 = (GLshort)NUM2INT(arg2);
811
- x2 = (GLshort)NUM2INT(arg3);
812
- y2 = (GLshort)NUM2INT(arg4);
813
- glRects(x1,y1,x2,y2);
814
- return Qnil;
815
- }
816
-
817
- static VALUE
818
- gl_TexCoord1d(obj,arg1)
819
- VALUE obj,arg1;
820
- {
821
- GLdouble s;
822
- s = (GLdouble)NUM2DBL(arg1);
823
- glTexCoord1d(s);
824
- return Qnil;
825
- }
826
-
827
- static VALUE
828
- gl_TexCoord1f(obj,arg1)
829
- VALUE obj,arg1;
830
- {
831
- GLfloat s;
832
- s = (GLfloat)NUM2DBL(arg1);
833
- glTexCoord1f(s);
834
- return Qnil;
835
- }
836
-
837
- static VALUE
838
- gl_TexCoord1i(obj,arg1)
839
- VALUE obj,arg1;
840
- {
841
- GLint s;
842
- s = (GLint)NUM2INT(arg1);
843
- glTexCoord1i(s);
844
- return Qnil;
845
- }
846
-
847
- static VALUE
848
- gl_TexCoord1s(obj,arg1)
849
- VALUE obj,arg1;
850
- {
851
- GLshort s;
852
- s = (GLshort)NUM2INT(arg1);
853
- glTexCoord1s(s);
854
- return Qnil;
855
- }
856
-
857
- static VALUE
858
- gl_TexCoord2d(obj,arg1,arg2)
859
- VALUE obj,arg1,arg2;
860
- {
861
- GLdouble s;
862
- GLdouble t;
863
- s = (GLdouble)NUM2DBL(arg1);
864
- t = (GLdouble)NUM2DBL(arg2);
865
- glTexCoord2d(s,t);
866
- return Qnil;
867
- }
868
-
869
- static VALUE
870
- gl_TexCoord2f(obj,arg1,arg2)
871
- VALUE obj,arg1,arg2;
872
- {
873
- GLfloat s;
874
- GLfloat t;
875
- s = (GLfloat)NUM2DBL(arg1);
876
- t = (GLfloat)NUM2DBL(arg2);
877
- glTexCoord2f(s,t);
878
- return Qnil;
879
- }
880
-
881
- static VALUE
882
- gl_TexCoord2i(obj,arg1,arg2)
883
- VALUE obj,arg1,arg2;
884
- {
885
- GLint s;
886
- GLint t;
887
- s = (GLint)NUM2INT(arg1);
888
- t = (GLint)NUM2INT(arg2);
889
- glTexCoord2i(s,t);
890
- return Qnil;
891
- }
892
-
893
- static VALUE
894
- gl_TexCoord2s(obj,arg1,arg2)
895
- VALUE obj,arg1,arg2;
896
- {
897
- GLshort s;
898
- GLshort t;
899
- s = (GLshort)NUM2INT(arg1);
900
- t = (GLshort)NUM2INT(arg2);
901
- glTexCoord2s(s,t);
902
- return Qnil;
903
- }
904
-
905
- static VALUE
906
- gl_TexCoord3d(obj,arg1,arg2,arg3)
907
- VALUE obj,arg1,arg2,arg3;
908
- {
909
- GLdouble s;
910
- GLdouble t;
911
- GLdouble r;
912
- s = (GLdouble)NUM2DBL(arg1);
913
- t = (GLdouble)NUM2DBL(arg2);
914
- r = (GLdouble)NUM2DBL(arg3);
915
- glTexCoord3d(s,t,r);
916
- return Qnil;
917
- }
918
-
919
- static VALUE
920
- gl_TexCoord3f(obj,arg1,arg2,arg3)
921
- VALUE obj,arg1,arg2,arg3;
922
- {
923
- GLfloat s;
924
- GLfloat t;
925
- GLfloat r;
926
- s = (GLfloat)NUM2DBL(arg1);
927
- t = (GLfloat)NUM2DBL(arg2);
928
- r = (GLfloat)NUM2DBL(arg3);
929
- glTexCoord3f(s,t,r);
930
- return Qnil;
931
- }
932
-
933
- static VALUE
934
- gl_TexCoord3i(obj,arg1,arg2,arg3)
935
- VALUE obj,arg1,arg2,arg3;
936
- {
937
- GLint s;
938
- GLint t;
939
- GLint r;
940
- s = (GLint)NUM2INT(arg1);
941
- t = (GLint)NUM2INT(arg2);
942
- r = (GLint)NUM2INT(arg3);
943
- glTexCoord3i(s,t,r);
944
- return Qnil;
945
- }
946
-
947
- static VALUE
948
- gl_TexCoord3s(obj,arg1,arg2,arg3)
949
- VALUE obj,arg1,arg2,arg3;
950
- {
951
- GLshort s;
952
- GLshort t;
953
- GLshort r;
954
- s = (GLshort)NUM2INT(arg1);
955
- t = (GLshort)NUM2INT(arg2);
956
- r = (GLshort)NUM2INT(arg3);
957
- glTexCoord3s(s,t,r);
958
- return Qnil;
959
- }
960
-
961
- static VALUE
962
- gl_TexCoord4d(obj,arg1,arg2,arg3,arg4)
963
- VALUE obj,arg1,arg2,arg3,arg4;
964
- {
965
- GLdouble s;
966
- GLdouble t;
967
- GLdouble r;
968
- GLdouble q;
969
- s = (GLdouble)NUM2DBL(arg1);
970
- t = (GLdouble)NUM2DBL(arg2);
971
- r = (GLdouble)NUM2DBL(arg3);
972
- q = (GLdouble)NUM2DBL(arg4);
973
- glTexCoord4d(s,t,r,q);
974
- return Qnil;
975
- }
976
-
977
- static VALUE
978
- gl_TexCoord4f(obj,arg1,arg2,arg3,arg4)
979
- VALUE obj,arg1,arg2,arg3,arg4;
980
- {
981
- GLfloat s;
982
- GLfloat t;
983
- GLfloat r;
984
- GLfloat q;
985
- s = (GLfloat)NUM2DBL(arg1);
986
- t = (GLfloat)NUM2DBL(arg2);
987
- r = (GLfloat)NUM2DBL(arg3);
988
- q = (GLfloat)NUM2DBL(arg4);
989
- glTexCoord4f(s,t,r,q);
990
- return Qnil;
991
- }
992
-
993
- static VALUE
994
- gl_TexCoord4i(obj,arg1,arg2,arg3,arg4)
995
- VALUE obj,arg1,arg2,arg3,arg4;
996
- {
997
- GLint s;
998
- GLint t;
999
- GLint r;
1000
- GLint q;
1001
- s = (GLint)NUM2INT(arg1);
1002
- t = (GLint)NUM2INT(arg2);
1003
- r = (GLint)NUM2INT(arg3);
1004
- q = (GLint)NUM2INT(arg4);
1005
- glTexCoord4i(s,t,r,q);
1006
- return Qnil;
1007
- }
1008
-
1009
- static VALUE
1010
- gl_TexCoord4s(obj,arg1,arg2,arg3,arg4)
1011
- VALUE obj,arg1,arg2,arg3,arg4;
1012
- {
1013
- GLshort s;
1014
- GLshort t;
1015
- GLshort r;
1016
- GLshort q;
1017
- s = (GLshort)NUM2INT(arg1);
1018
- t = (GLshort)NUM2INT(arg2);
1019
- r = (GLshort)NUM2INT(arg3);
1020
- q = (GLshort)NUM2INT(arg4);
1021
- glTexCoord4s(s,t,r,q);
1022
- return Qnil;
1023
- }
1024
-
1025
- static VALUE
1026
- gl_Vertex2d(obj,arg1,arg2)
1027
- VALUE obj,arg1,arg2;
1028
- {
1029
- GLdouble x;
1030
- GLdouble y;
1031
- x = (GLdouble)NUM2DBL(arg1);
1032
- y = (GLdouble)NUM2DBL(arg2);
1033
- glVertex2d(x,y);
1034
- return Qnil;
1035
- }
1036
-
1037
- static VALUE
1038
- gl_Vertex2f(obj,arg1,arg2)
1039
- VALUE obj,arg1,arg2;
1040
- {
1041
- GLfloat x;
1042
- GLfloat y;
1043
- x = (GLfloat)NUM2DBL(arg1);
1044
- y = (GLfloat)NUM2DBL(arg2);
1045
- glVertex2f(x,y);
1046
- return Qnil;
1047
- }
1048
-
1049
- static VALUE
1050
- gl_Vertex2i(obj,arg1,arg2)
1051
- VALUE obj,arg1,arg2;
1052
- {
1053
- GLint x;
1054
- GLint y;
1055
- x = (GLint)NUM2INT(arg1);
1056
- y = (GLint)NUM2INT(arg2);
1057
- glVertex2i(x,y);
1058
- return Qnil;
1059
- }
1060
-
1061
- static VALUE
1062
- gl_Vertex2s(obj,arg1,arg2)
1063
- VALUE obj,arg1,arg2;
1064
- {
1065
- GLshort x;
1066
- GLshort y;
1067
- x = (GLshort)NUM2INT(arg1);
1068
- y = (GLshort)NUM2INT(arg2);
1069
- glVertex2s(x,y);
1070
- return Qnil;
1071
- }
1072
-
1073
- static VALUE
1074
- gl_Vertex3d(obj,arg1,arg2,arg3)
1075
- VALUE obj,arg1,arg2,arg3;
1076
- {
1077
- GLdouble x;
1078
- GLdouble y;
1079
- GLdouble z;
1080
- x = (GLdouble)NUM2DBL(arg1);
1081
- y = (GLdouble)NUM2DBL(arg2);
1082
- z = (GLdouble)NUM2DBL(arg3);
1083
- glVertex3d(x,y,z);
1084
- return Qnil;
1085
- }
1086
-
1087
- static VALUE
1088
- gl_Vertex3f(obj,arg1,arg2,arg3)
1089
- VALUE obj,arg1,arg2,arg3;
1090
- {
1091
- GLfloat x;
1092
- GLfloat y;
1093
- GLfloat z;
1094
- x = (GLfloat)NUM2DBL(arg1);
1095
- y = (GLfloat)NUM2DBL(arg2);
1096
- z = (GLfloat)NUM2DBL(arg3);
1097
- glVertex3f(x,y,z);
1098
- return Qnil;
1099
- }
1100
-
1101
- static VALUE
1102
- gl_Vertex3i(obj,arg1,arg2,arg3)
1103
- VALUE obj,arg1,arg2,arg3;
1104
- {
1105
- GLint x;
1106
- GLint y;
1107
- GLint z;
1108
- x = (GLint)NUM2INT(arg1);
1109
- y = (GLint)NUM2INT(arg2);
1110
- z = (GLint)NUM2INT(arg3);
1111
- glVertex3i(x,y,z);
1112
- return Qnil;
1113
- }
1114
-
1115
- static VALUE
1116
- gl_Vertex3s(obj,arg1,arg2,arg3)
1117
- VALUE obj,arg1,arg2,arg3;
1118
- {
1119
- GLshort x;
1120
- GLshort y;
1121
- GLshort z;
1122
- x = (GLshort)NUM2INT(arg1);
1123
- y = (GLshort)NUM2INT(arg2);
1124
- z = (GLshort)NUM2INT(arg3);
1125
- glVertex3s(x,y,z);
1126
- return Qnil;
1127
- }
1128
-
1129
- static VALUE
1130
- gl_Vertex4d(obj,arg1,arg2,arg3,arg4)
1131
- VALUE obj,arg1,arg2,arg3,arg4;
1132
- {
1133
- GLdouble x;
1134
- GLdouble y;
1135
- GLdouble z;
1136
- GLdouble w;
1137
- x = (GLdouble)NUM2DBL(arg1);
1138
- y = (GLdouble)NUM2DBL(arg2);
1139
- z = (GLdouble)NUM2DBL(arg3);
1140
- w = (GLdouble)NUM2DBL(arg4);
1141
- glVertex4d(x,y,z,w);
1142
- return Qnil;
1143
- }
1144
-
1145
- static VALUE
1146
- gl_Vertex4f(obj,arg1,arg2,arg3,arg4)
1147
- VALUE obj,arg1,arg2,arg3,arg4;
1148
- {
1149
- GLfloat x;
1150
- GLfloat y;
1151
- GLfloat z;
1152
- GLfloat w;
1153
- x = (GLfloat)NUM2DBL(arg1);
1154
- y = (GLfloat)NUM2DBL(arg2);
1155
- z = (GLfloat)NUM2DBL(arg3);
1156
- w = (GLfloat)NUM2DBL(arg4);
1157
- glVertex4f(x,y,z,w);
1158
- return Qnil;
1159
- }
1160
-
1161
- static VALUE
1162
- gl_Vertex4i(obj,arg1,arg2,arg3,arg4)
1163
- VALUE obj,arg1,arg2,arg3,arg4;
1164
- {
1165
- GLint x;
1166
- GLint y;
1167
- GLint z;
1168
- GLint w;
1169
- x = (GLint)NUM2INT(arg1);
1170
- y = (GLint)NUM2INT(arg2);
1171
- z = (GLint)NUM2INT(arg3);
1172
- w = (GLint)NUM2INT(arg4);
1173
- glVertex4i(x,y,z,w);
1174
- return Qnil;
1175
- }
1176
-
1177
- static VALUE
1178
- gl_Vertex4s(obj,arg1,arg2,arg3,arg4)
1179
- VALUE obj,arg1,arg2,arg3,arg4;
1180
- {
1181
- GLshort x;
1182
- GLshort y;
1183
- GLshort z;
1184
- GLshort w;
1185
- x = (GLshort)NUM2INT(arg1);
1186
- y = (GLshort)NUM2INT(arg2);
1187
- z = (GLshort)NUM2INT(arg3);
1188
- w = (GLshort)NUM2INT(arg4);
1189
- glVertex4s(x,y,z,w);
1190
- return Qnil;
1191
- }
1192
-
1193
- static VALUE
1194
- gl_ClipPlane(obj,arg1,arg2)
1195
- VALUE obj,arg1,arg2;
1196
- {
1197
- GLenum plane;
1198
- GLdouble equation[4];
1199
- plane = (GLenum)NUM2INT(arg1);
1200
- Check_Type(arg2,T_ARRAY);
1201
- ary2cdbl(arg2, equation, 4);
1202
- glClipPlane(plane,equation);
1203
- return Qnil;
1204
- }
1205
-
1206
- static VALUE
1207
- gl_ColorMaterial(obj,arg1,arg2)
1208
- VALUE obj,arg1,arg2;
1209
- {
1210
- GLenum face;
1211
- GLenum mode;
1212
- face = (GLenum)NUM2INT(arg1);
1213
- mode = (GLenum)NUM2INT(arg2);
1214
- glColorMaterial(face,mode);
1215
- return Qnil;
1216
- }
1217
-
1218
- static VALUE
1219
- gl_CullFace(obj,arg1)
1220
- VALUE obj,arg1;
1221
- {
1222
- GLenum mode;
1223
- mode = (GLenum)NUM2INT(arg1);
1224
- glCullFace(mode);
1225
- return Qnil;
1226
- }
1227
-
1228
- static VALUE
1229
- gl_Fogf(obj,arg1,arg2)
1230
- VALUE obj,arg1,arg2;
1231
- {
1232
- GLenum pname;
1233
- GLfloat param;
1234
- pname = (GLenum)NUM2INT(arg1);
1235
- param = (GLfloat)NUM2DBL(arg2);
1236
- glFogf(pname,param);
1237
- return Qnil;
1238
- }
1239
-
1240
- static VALUE
1241
- gl_Fogfv(obj,arg1,arg2)
1242
- VALUE obj,arg1,arg2;
1243
- {
1244
- GLenum pname;
1245
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
1246
- pname = (GLenum)NUM2INT(arg1);
1247
- Check_Type(arg2,T_ARRAY);
1248
- ary2cflt(arg2,params,4);
1249
- glFogfv(pname,params);
1250
- return Qnil;
1251
- }
1252
-
1253
- static VALUE
1254
- gl_Fogi(obj,arg1,arg2)
1255
- VALUE obj,arg1,arg2;
1256
- {
1257
- GLenum pname;
1258
- GLint param;
1259
- pname = (GLenum)NUM2INT(arg1);
1260
- param = (GLint)NUM2INT(arg2);
1261
- glFogi(pname,param);
1262
- return Qnil;
1263
- }
1264
-
1265
- static VALUE
1266
- gl_Fogiv(obj,arg1,arg2)
1267
- VALUE obj,arg1,arg2;
1268
- {
1269
- GLenum pname;
1270
- GLint params[4] = {0,0,0,0};
1271
- pname = (GLenum)NUM2INT(arg1);
1272
- Check_Type(arg2,T_ARRAY);
1273
- ary2cint(arg2,params,4);
1274
- glFogiv(pname,params);
1275
- return Qnil;
1276
- }
1277
-
1278
- static VALUE
1279
- gl_FrontFace(obj,arg1)
1280
- VALUE obj,arg1;
1281
- {
1282
- GLenum mode;
1283
- mode = (GLenum)NUM2INT(arg1);
1284
- glFrontFace(mode);
1285
- return Qnil;
1286
- }
1287
-
1288
- static VALUE
1289
- gl_Hint(obj,arg1,arg2)
1290
- VALUE obj,arg1,arg2;
1291
- {
1292
- GLenum target;
1293
- GLenum mode;
1294
- target = (GLenum)NUM2UINT(arg1);
1295
- mode = (GLenum)NUM2UINT(arg2);
1296
- glHint(target,mode);
1297
- return Qnil;
1298
- }
1299
-
1300
- static VALUE
1301
- gl_Lightf(obj,arg1,arg2,arg3)
1302
- VALUE obj,arg1,arg2,arg3;
1303
- {
1304
- GLenum light;
1305
- GLenum pname;
1306
- GLfloat param;
1307
- light = (GLenum)NUM2INT(arg1);
1308
- pname = (GLenum)NUM2INT(arg2);
1309
- param = (GLfloat)NUM2DBL(arg3);
1310
- glLightf(light,pname,param);
1311
- return Qnil;
1312
- }
1313
-
1314
- static VALUE
1315
- gl_Lightfv(obj,arg1,arg2,arg3)
1316
- VALUE obj,arg1,arg2,arg3;
1317
- {
1318
- GLenum light;
1319
- GLenum pname;
1320
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
1321
- light = (GLenum)NUM2INT(arg1);
1322
- pname = (GLenum)NUM2INT(arg2);
1323
- Check_Type(arg3,T_ARRAY);
1324
- ary2cflt(arg3,params,4);
1325
- glLightfv(light,pname,params);
1326
- return Qnil;
1327
- }
1328
-
1329
- static VALUE
1330
- gl_Lighti(obj,arg1,arg2,arg3)
1331
- VALUE obj,arg1,arg2,arg3;
1332
- {
1333
- GLenum light;
1334
- GLenum pname;
1335
- GLint param;
1336
- light = (GLenum)NUM2INT(arg1);
1337
- pname = (GLenum)NUM2INT(arg2);
1338
- param = (GLint)NUM2INT(arg3);
1339
- glLighti(light,pname,param);
1340
- return Qnil;
1341
- }
1342
-
1343
- static VALUE
1344
- gl_Lightiv(obj,arg1,arg2,arg3)
1345
- VALUE obj,arg1,arg2,arg3;
1346
- {
1347
- GLenum light;
1348
- GLenum pname;
1349
- GLint params[4]={0,0,0,0};
1350
- light = (GLenum)NUM2INT(arg1);
1351
- pname = (GLenum)NUM2INT(arg2);
1352
- Check_Type(arg3,T_ARRAY);
1353
- ary2cint(arg3,params,4);
1354
- glLightiv(light,pname,params);
1355
- return Qnil;
1356
- }
1357
-
1358
- static VALUE
1359
- gl_LightModelf(obj,arg1,arg2)
1360
- VALUE obj,arg1,arg2;
1361
- {
1362
- GLenum pname;
1363
- GLfloat param;
1364
- pname = (GLenum)NUM2INT(arg1);
1365
- param = (GLfloat)NUM2DBL(arg2);
1366
- glLightModelf(pname,param);
1367
- return Qnil;
1368
- }
1369
-
1370
- static VALUE
1371
- gl_LightModelfv(obj,arg1,arg2)
1372
- VALUE obj,arg1,arg2;
1373
- {
1374
- GLenum pname;
1375
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
1376
- pname = (GLenum)NUM2INT(arg1);
1377
- Check_Type(arg2,T_ARRAY);
1378
- ary2cflt(arg2,params,4);
1379
- glLightModelfv(pname,params);
1380
- return Qnil;
1381
- }
1382
-
1383
- static VALUE
1384
- gl_LightModeli(obj,arg1,arg2)
1385
- VALUE obj,arg1,arg2;
1386
- {
1387
- GLenum pname;
1388
- GLint param;
1389
- pname = (GLenum)NUM2INT(arg1);
1390
- param = (GLint)NUM2INT(arg2);
1391
- glLightModeli(pname,param);
1392
- return Qnil;
1393
- }
1394
-
1395
- static VALUE
1396
- gl_LightModeliv(obj,arg1,arg2)
1397
- VALUE obj,arg1,arg2;
1398
- {
1399
- GLenum pname;
1400
- GLint params[4] = {0,0,0,0};
1401
- pname = (GLenum)NUM2INT(arg1);
1402
- Check_Type(arg2,T_ARRAY);
1403
- ary2cint(arg2,params,4);
1404
- glLightModeliv(pname,params);
1405
- return Qnil;
1406
- }
1407
-
1408
- static VALUE
1409
- gl_LineStipple(obj,arg1,arg2)
1410
- VALUE obj,arg1,arg2;
1411
- {
1412
- GLint factor;
1413
- GLushort pattern;
1414
- factor = (GLint)NUM2INT(arg1);
1415
- pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF);
1416
- glLineStipple(factor,pattern);
1417
- return Qnil;
1418
- }
1419
-
1420
- static VALUE
1421
- gl_LineWidth(obj,arg1)
1422
- VALUE obj,arg1;
1423
- {
1424
- GLfloat width;
1425
- width = (GLfloat)NUM2DBL(arg1);
1426
- glLineWidth(width);
1427
- return Qnil;
1428
- }
1429
-
1430
- static VALUE
1431
- gl_Materialf(obj,arg1,arg2,arg3)
1432
- VALUE obj,arg1,arg2,arg3;
1433
- {
1434
- GLenum face;
1435
- GLenum pname;
1436
- GLfloat param;
1437
- face = (GLenum)NUM2INT(arg1);
1438
- pname = (GLenum)NUM2INT(arg2);
1439
- param = (GLfloat)NUM2DBL(arg3);
1440
- glMaterialf(face,pname,param);
1441
- return Qnil;
1442
- }
1443
-
1444
- static VALUE
1445
- gl_Materialfv(obj,arg1,arg2,arg3)
1446
- VALUE obj,arg1,arg2,arg3;
1447
- {
1448
- GLenum face;
1449
- GLenum pname;
1450
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
1451
- face = (GLenum)NUM2INT(arg1);
1452
- pname = (GLenum)NUM2INT(arg2);
1453
- Check_Type(arg3,T_ARRAY);
1454
- ary2cflt(arg3,params,4);
1455
- glMaterialfv(face,pname,params);
1456
- return Qnil;
1457
- }
1458
-
1459
- static VALUE
1460
- gl_Materiali(obj,arg1,arg2,arg3)
1461
- VALUE obj,arg1,arg2,arg3;
1462
- {
1463
- GLenum face;
1464
- GLenum pname;
1465
- GLint param;
1466
- face = (GLenum)NUM2INT(arg1);
1467
- pname = (GLenum)NUM2INT(arg2);
1468
- param = (GLint)NUM2INT(arg3);
1469
- glMateriali(face,pname,param);
1470
- return Qnil;
1471
- }
1472
-
1473
- static VALUE
1474
- gl_Materialiv(obj,arg1,arg2,arg3)
1475
- VALUE obj,arg1,arg2,arg3;
1476
- {
1477
- GLenum face;
1478
- GLenum pname;
1479
- GLint params[4] = {0,0,0,0};
1480
- face = (GLenum)NUM2INT(arg1);
1481
- pname = (GLenum)NUM2INT(arg2);
1482
- Check_Type(arg3,T_ARRAY);
1483
- ary2cint(arg3,params,4);
1484
- glMaterialiv(face,pname,params);
1485
- return Qnil;
1486
- }
1487
-
1488
- static VALUE
1489
- gl_PointSize(obj,arg1)
1490
- VALUE obj,arg1;
1491
- {
1492
- GLfloat size;
1493
- size = (GLfloat)NUM2DBL(arg1);
1494
- glPointSize(size);
1495
- return Qnil;
1496
- }
1497
-
1498
- static VALUE
1499
- gl_PolygonMode(obj,arg1,arg2)
1500
- VALUE obj,arg1,arg2;
527
+ gl_Materialiv(obj,arg1,arg2,arg3)
528
+ VALUE obj,arg1,arg2,arg3;
1501
529
  {
1502
530
  GLenum face;
1503
- GLenum mode;
531
+ GLenum pname;
532
+ GLint params[4] = {0,0,0,0};
1504
533
  face = (GLenum)NUM2INT(arg1);
1505
- mode = (GLenum)NUM2INT(arg2);
1506
- glPolygonMode(face,mode);
534
+ pname = (GLenum)NUM2INT(arg2);
535
+ Check_Type(arg3,T_ARRAY);
536
+ ary2cint(arg3,params,4);
537
+ glMaterialiv(face,pname,params);
1507
538
  return Qnil;
1508
539
  }
1509
540
 
@@ -1512,44 +543,23 @@ gl_PolygonStipple(obj,arg1)
1512
543
  VALUE obj,arg1;
1513
544
  {
1514
545
  GLubyte mask[128];
1515
- memset(mask, 0x0, sizeof(GLubyte)*128);
1516
- if (TYPE(arg1) == T_ARRAY) {
1517
- ary2cubyte(arg1,mask,128);
1518
- }
1519
- else if (TYPE(arg1) == T_STRING) {
1520
- if (RSTRING(arg1)->len < 128)
1521
- rb_raise(rb_eArgError, "string length:%d", RSTRING(arg1)->len);
1522
- memcpy(mask, RSTRING(arg1)->ptr, 128);
1523
- }
1524
- else
1525
- Check_Type(arg1,T_STRING); /* force exception */
1526
- glPolygonStipple(mask);
1527
- return Qnil;
1528
- }
1529
-
1530
- static VALUE
1531
- gl_Scissor(obj,arg1,arg2,arg3,arg4)
1532
- VALUE obj,arg1,arg2,arg3,arg4;
1533
- {
1534
- GLint x;
1535
- GLint y;
1536
- GLsizei width;
1537
- GLsizei height;
1538
- x = (GLint)NUM2INT(arg1);
1539
- y = (GLint)NUM2INT(arg2);
1540
- width = (GLsizei)NUM2UINT(arg3);
1541
- height = (GLsizei)NUM2UINT(arg4);
1542
- glScissor(x,y,width,height);
1543
- return Qnil;
1544
- }
1545
546
 
1546
- static VALUE
1547
- gl_ShadeModel(obj,arg1)
1548
- VALUE obj,arg1;
1549
- {
1550
- GLenum mode;
1551
- mode = (GLenum)NUM2INT(arg1);
1552
- glShadeModel(mode);
547
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
548
+ glPolygonStipple((GLvoid *)NUM2INT(arg1));
549
+ } else {
550
+ memset(mask, 0x0, sizeof(GLubyte)*128);
551
+ if (TYPE(arg1) == T_ARRAY) {
552
+ ary2cubyte(arg1,mask,128);
553
+ }
554
+ else if (TYPE(arg1) == T_STRING) {
555
+ if (RSTRING(arg1)->len < 128)
556
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg1)->len);
557
+ memcpy(mask, RSTRING(arg1)->ptr, 128);
558
+ }
559
+ else
560
+ Check_Type(arg1,T_STRING); /* force exception */
561
+ glPolygonStipple(mask);
562
+ }
1553
563
  return Qnil;
1554
564
  }
1555
565
 
@@ -1611,7 +621,6 @@ VALUE obj,arg1,arg2,arg3;
1611
621
  return Qnil;
1612
622
  }
1613
623
 
1614
- /* FIXME: spatna funkce ? */
1615
624
  static VALUE
1616
625
  gl_TexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
1617
626
  VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
@@ -1624,9 +633,6 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
1624
633
  GLenum format;
1625
634
  GLenum type;
1626
635
  const char *pixels;
1627
- int size;
1628
- int type_size;
1629
- int format_size;
1630
636
  target = (GLenum)NUM2INT(arg1);
1631
637
  level = (GLint)NUM2INT(arg2);
1632
638
  components = (GLint)NUM2INT(arg3);
@@ -1634,29 +640,18 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
1634
640
  border = (GLint)NUM2INT(arg5);
1635
641
  format = (GLenum)NUM2INT(arg6);
1636
642
  type = (GLenum)NUM2INT(arg7);
1637
- type_size = gltype_size(type);
1638
- format_size = glformat_size(format);
1639
643
 
1640
- if (type_size == -1 || format_size == -1)
644
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
645
+ glTexImage1D(target,level,components,width,border,format,type,(GLvoid *)NUM2INT(arg8));
1641
646
  return Qnil;
1642
- if (type==GL_BITMAP)
1643
- size = format_size*(width/8);
1644
- else
1645
- size = type_size*format_size*width;
647
+ }
1646
648
 
1647
649
  if (target == GL_PROXY_TEXTURE_1D || NIL_P(arg8)) { /* proxy texture, no data read */
1648
650
  pixels = NULL;
1649
651
  } else {
1650
- if (TYPE(arg8) == T_FIXNUM || TYPE(arg8) == T_BIGNUM) { /* arg8 is offset to unpack buffer */
1651
- pixels = (const char *)NUM2UINT(arg8);
1652
- } else if (TYPE(arg8) == T_STRING) { /* image data */
1653
- if (RSTRING(arg8)->len < size)
1654
- rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len);
1655
- pixels = RSTRING(arg8)->ptr;
1656
- } else {
1657
- Check_Type(arg8,T_STRING); /* force exception */
1658
- return Qnil;
1659
- }
652
+ Check_Type(arg8,T_STRING);
653
+ CheckDataSize(type,format,width,arg8);
654
+ pixels = RSTRING(arg8)->ptr;
1660
655
  }
1661
656
  glTexImage1D(target,level,components,width,border,format,type,pixels);
1662
657
  return Qnil;
@@ -1675,9 +670,6 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
1675
670
  GLenum format;
1676
671
  GLenum type;
1677
672
  const char *pixels;
1678
- int size;
1679
- int type_size;
1680
- int format_size;
1681
673
  target = (GLenum)NUM2INT(arg1);
1682
674
  level = (GLint)NUM2INT(arg2);
1683
675
  components = (GLint)NUM2INT(arg3);
@@ -1686,29 +678,18 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
1686
678
  border = (GLint)NUM2INT(arg6);
1687
679
  format = (GLenum)NUM2INT(arg7);
1688
680
  type = (GLenum)NUM2INT(arg8);
1689
- type_size = gltype_size(type);
1690
- format_size = glformat_size(format);
1691
681
 
1692
- if (type_size == -1 || format_size == -1)
682
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
683
+ glTexImage2D(target,level,components,width,height,border,format,type,(GLvoid *)NUM2INT(arg9));
1693
684
  return Qnil;
1694
- if (type==GL_BITMAP)
1695
- size = format_size*((height*width)/8);
1696
- else
1697
- size = type_size*format_size*height*width;
685
+ }
1698
686
 
1699
- if (target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_CUBE_MAP || NIL_P(arg9)) { /* proxy texture, no data read */
687
+ 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 */
1700
688
  pixels = NULL;
1701
689
  } else {
1702
- if (TYPE(arg9) == T_FIXNUM || TYPE(arg9) == T_BIGNUM) { /* arg9 is offset to unpack buffer */
1703
- pixels = (const char *)NUM2UINT(arg9);
1704
- } else if (TYPE(arg9) == T_STRING) { /* image data */
1705
- if (RSTRING(arg9)->len < size)
1706
- rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
1707
- pixels = RSTRING(arg9)->ptr;
1708
- } else {
1709
- Check_Type(arg9,T_STRING); /* force exception */
1710
- return Qnil;
1711
- }
690
+ Check_Type(arg9,T_STRING);
691
+ CheckDataSize(type,format,width*height,arg9);
692
+ pixels = RSTRING(arg9)->ptr;
1712
693
  }
1713
694
  glTexImage2D(target,level,components,width,height,border,format,type,pixels);
1714
695
  return Qnil;
@@ -1753,388 +734,160 @@ VALUE obj,arg1,arg2,arg3;
1753
734
  target = (GLenum)NUM2INT(arg1);
1754
735
  pname = (GLenum)NUM2INT(arg2);
1755
736
  param = (GLint)NUM2INT(arg3);
1756
- glTexEnvi(target,pname,param);
1757
- return Qnil;
1758
- }
1759
-
1760
- static VALUE
1761
- gl_TexEnviv(obj,arg1,arg2,arg3)
1762
- VALUE obj,arg1,arg2,arg3;
1763
- {
1764
- GLenum target;
1765
- GLenum pname;
1766
- GLint params[4] = {0,0,0,0};
1767
- target = (GLenum)NUM2INT(arg1);
1768
- pname = (GLenum)NUM2INT(arg2);
1769
- Check_Type(arg3,T_ARRAY);
1770
- ary2cint(arg3,params,4);
1771
- glTexEnviv(target,pname,params);
1772
- return Qnil;
1773
- }
1774
-
1775
- static VALUE
1776
- gl_TexGend(obj,arg1,arg2,arg3)
1777
- VALUE obj,arg1,arg2,arg3;
1778
- {
1779
- GLenum coord;
1780
- GLenum pname;
1781
- GLdouble param;
1782
- coord = (GLenum)NUM2INT(arg1);
1783
- pname = (GLenum)NUM2INT(arg2);
1784
- param = (GLdouble)NUM2DBL(arg3);
1785
- glTexGend(coord,pname,param);
1786
- return Qnil;
1787
- }
1788
-
1789
- static VALUE
1790
- gl_TexGendv(obj,arg1,arg2,arg3)
1791
- VALUE obj,arg1,arg2,arg3;
1792
- {
1793
- GLenum coord;
1794
- GLenum pname;
1795
- GLdouble params[4] = {0.0,0.0,0.0,0.0};
1796
- coord = (GLenum)NUM2INT(arg1);
1797
- pname = (GLenum)NUM2INT(arg2);
1798
- Check_Type(arg3,T_ARRAY);
1799
- ary2cdbl(arg3,params,4);
1800
- glTexGendv(coord,pname,params);
1801
- return Qnil;
1802
- }
1803
-
1804
-
1805
- static VALUE
1806
- gl_TexGenf(obj,arg1,arg2,arg3)
1807
- VALUE obj,arg1,arg2,arg3;
1808
- {
1809
- GLenum coord;
1810
- GLenum pname;
1811
- GLfloat param;
1812
- coord = (GLenum)NUM2INT(arg1);
1813
- pname = (GLenum)NUM2INT(arg2);
1814
- param = (GLfloat)NUM2DBL(arg3);
1815
- glTexGenf(coord,pname,param);
1816
- return Qnil;
1817
- }
1818
-
1819
- static VALUE
1820
- gl_TexGenfv(obj,arg1,arg2,arg3)
1821
- VALUE obj,arg1,arg2,arg3;
1822
- {
1823
- GLenum coord;
1824
- GLenum pname;
1825
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
1826
- coord = (GLenum)NUM2INT(arg1);
1827
- pname = (GLenum)NUM2INT(arg2);
1828
- Check_Type(arg3,T_ARRAY);
1829
- ary2cflt(arg3,params,4);
1830
- glTexGenfv(coord,pname,params);
1831
- return Qnil;
1832
- }
1833
-
1834
- static VALUE
1835
- gl_TexGeni(obj,arg1,arg2,arg3)
1836
- VALUE obj,arg1,arg2,arg3;
1837
- {
1838
- GLenum coord;
1839
- GLenum pname;
1840
- GLint param;
1841
- coord = (GLenum)NUM2INT(arg1);
1842
- pname = (GLenum)NUM2INT(arg2);
1843
- param = (GLint)NUM2INT(arg3);
1844
- glTexGeni(coord,pname,param);
1845
- return Qnil;
1846
- }
1847
-
1848
- static VALUE
1849
- gl_TexGeniv(obj,arg1,arg2,arg3)
1850
- VALUE obj,arg1,arg2,arg3;
1851
- {
1852
- GLenum coord;
1853
- GLenum pname;
1854
- GLint params[4] = {0,0,0,0};
1855
- coord = (GLenum)NUM2INT(arg1);
1856
- pname = (GLenum)NUM2INT(arg2);
1857
- Check_Type(arg3,T_ARRAY);
1858
- ary2cint(arg3,params,4);
1859
- glTexGeniv(coord,pname,params);
1860
- return Qnil;
1861
- }
1862
- static VALUE g_current_feed_buffer;
1863
- static VALUE
1864
- gl_FeedbackBuffer(obj,arg1,arg2)
1865
- VALUE obj,arg1,arg2;
1866
- {
1867
- GLsizei size;
1868
- GLenum type;
1869
- size = (GLsizei)NUM2UINT(arg1);
1870
- type = (GLenum)NUM2INT(arg2);
1871
- g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
1872
- rb_str_freeze(g_current_feed_buffer);
1873
- glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr);
1874
- return g_current_feed_buffer;
1875
- }
1876
-
1877
- static VALUE g_current_sel_buffer;
1878
- static VALUE
1879
- gl_SelectBuffer(obj,arg1)
1880
- VALUE obj,arg1;
1881
- {
1882
- GLsizei size;
1883
- size = (GLsizei)NUM2UINT(arg1);
1884
- g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
1885
- rb_str_freeze(g_current_sel_buffer);
1886
- glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr);
1887
- return g_current_sel_buffer;
1888
- }
1889
-
1890
- static VALUE
1891
- gl_RenderMode(obj,arg1)
1892
- VALUE obj,arg1;
1893
- {
1894
- GLenum mode;
1895
- GLint ret;
1896
- mode = (GLenum)NUM2INT(arg1);
1897
- ret = glRenderMode(mode);
1898
- return INT2NUM(ret);
1899
- }
1900
-
1901
- static VALUE
1902
- gl_InitNames(obj)
1903
- VALUE obj;
1904
- {
1905
- glInitNames();
1906
- return Qnil;
1907
- }
1908
-
1909
- static VALUE
1910
- gl_LoadName(obj,arg1)
1911
- VALUE obj,arg1;
1912
- {
1913
- GLuint name;
1914
- name = (GLuint)NUM2UINT(arg1);
1915
- glLoadName(name);
1916
- return Qnil;
1917
- }
1918
-
1919
- static VALUE
1920
- gl_PassThrough(obj,arg1)
1921
- VALUE obj,arg1;
1922
- {
1923
- GLfloat token;
1924
- token = (GLfloat)NUM2DBL(arg1);
1925
- glPassThrough(token);
1926
- return Qnil;
1927
- }
1928
-
1929
- static VALUE
1930
- gl_PopName(obj)
1931
- VALUE obj;
1932
- {
1933
- glPopName();
1934
- return Qnil;
1935
- }
1936
-
1937
- static VALUE
1938
- gl_PushName(obj,arg1)
1939
- VALUE obj,arg1;
1940
- {
1941
- GLuint name;
1942
- name = (GLuint)NUM2UINT(arg1);
1943
- glPushName(name);
1944
- return Qnil;
1945
- }
1946
-
1947
- static VALUE
1948
- gl_DrawBuffer(obj,arg1)
1949
- VALUE obj,arg1;
1950
- {
1951
- GLenum mode;
1952
- mode = (GLenum)NUM2INT(arg1);
1953
- glDrawBuffer(mode);
1954
- return Qnil;
1955
- }
1956
-
1957
- static VALUE
1958
- gl_Clear(obj,arg1)
1959
- VALUE obj,arg1;
1960
- {
1961
- GLbitfield mask;
1962
- mask = (GLbitfield)NUM2UINT(arg1);
1963
- glClear(mask);
1964
- return Qnil;
1965
- }
1966
-
1967
- static VALUE
1968
- gl_ClearAccum(obj,arg1,arg2,arg3,arg4)
1969
- VALUE obj,arg1,arg2,arg3,arg4;
1970
- {
1971
- GLfloat red;
1972
- GLfloat green;
1973
- GLfloat blue;
1974
- GLfloat alpha;
1975
- red = (GLfloat)NUM2DBL(arg1);
1976
- green = (GLfloat)NUM2DBL(arg2);
1977
- blue = (GLfloat)NUM2DBL(arg3);
1978
- alpha = (GLfloat)NUM2DBL(arg4);
1979
- glClearAccum(red,green,blue,alpha);
1980
- return Qnil;
1981
- }
1982
-
1983
- static VALUE
1984
- gl_ClearIndex(obj,arg1)
1985
- VALUE obj,arg1;
1986
- {
1987
- GLfloat c;
1988
- c = (GLfloat)NUM2DBL(arg1);
1989
- glClearIndex(c);
1990
- return Qnil;
1991
- }
1992
-
1993
- static VALUE
1994
- gl_ClearColor(obj,arg1,arg2,arg3,arg4)
1995
- VALUE obj,arg1,arg2,arg3,arg4;
1996
- {
1997
- GLclampf red;
1998
- GLclampf green;
1999
- GLclampf blue;
2000
- GLclampf alpha;
2001
- red = (GLclampf)NUM2DBL(arg1);
2002
- green = (GLclampf)NUM2DBL(arg2);
2003
- blue = (GLclampf)NUM2DBL(arg3);
2004
- alpha = (GLclampf)NUM2DBL(arg4);
2005
- glClearColor(red,green,blue,alpha);
2006
- return Qnil;
2007
- }
2008
-
2009
- static VALUE
2010
- gl_ClearStencil(obj,arg1)
2011
- VALUE obj,arg1;
2012
- {
2013
- GLint s;
2014
- s = (GLint)NUM2INT(arg1);
2015
- glClearStencil(s);
737
+ glTexEnvi(target,pname,param);
2016
738
  return Qnil;
2017
739
  }
2018
740
 
2019
741
  static VALUE
2020
- gl_ClearDepth(obj,arg1)
2021
- VALUE obj,arg1;
742
+ gl_TexEnviv(obj,arg1,arg2,arg3)
743
+ VALUE obj,arg1,arg2,arg3;
2022
744
  {
2023
- GLclampd depth;
2024
- depth = (GLclampd)NUM2DBL(arg1);
2025
- glClearDepth(depth);
745
+ GLenum target;
746
+ GLenum pname;
747
+ GLint params[4] = {0,0,0,0};
748
+ target = (GLenum)NUM2INT(arg1);
749
+ pname = (GLenum)NUM2INT(arg2);
750
+ Check_Type(arg3,T_ARRAY);
751
+ ary2cint(arg3,params,4);
752
+ glTexEnviv(target,pname,params);
2026
753
  return Qnil;
2027
754
  }
2028
755
 
2029
756
  static VALUE
2030
- gl_StencilMask(obj,arg1)
2031
- VALUE obj,arg1;
757
+ gl_TexGend(obj,arg1,arg2,arg3)
758
+ VALUE obj,arg1,arg2,arg3;
2032
759
  {
2033
- GLuint mask;
2034
- mask = (GLuint)NUM2UINT(arg1);
2035
- glStencilMask(mask);
760
+ GLenum coord;
761
+ GLenum pname;
762
+ GLdouble param;
763
+ coord = (GLenum)NUM2INT(arg1);
764
+ pname = (GLenum)NUM2INT(arg2);
765
+ param = (GLdouble)NUM2DBL(arg3);
766
+ glTexGend(coord,pname,param);
2036
767
  return Qnil;
2037
768
  }
2038
769
 
2039
770
  static VALUE
2040
- gl_ColorMask(obj,arg1,arg2,arg3,arg4)
2041
- VALUE obj,arg1,arg2,arg3,arg4;
771
+ gl_TexGendv(obj,arg1,arg2,arg3)
772
+ VALUE obj,arg1,arg2,arg3;
2042
773
  {
2043
- GLboolean red;
2044
- GLboolean green;
2045
- GLboolean blue;
2046
- GLboolean alpha;
2047
- red = (GLboolean)NUM2INT(arg1);
2048
- green = (GLboolean)NUM2INT(arg2);
2049
- blue = (GLboolean)NUM2INT(arg3);
2050
- alpha = (GLboolean)NUM2INT(arg4);
2051
- glColorMask(red,green,blue,alpha);
774
+ GLenum coord;
775
+ GLenum pname;
776
+ GLdouble params[4] = {0.0,0.0,0.0,0.0};
777
+ coord = (GLenum)NUM2INT(arg1);
778
+ pname = (GLenum)NUM2INT(arg2);
779
+ Check_Type(arg3,T_ARRAY);
780
+ ary2cdbl(arg3,params,4);
781
+ glTexGendv(coord,pname,params);
2052
782
  return Qnil;
2053
783
  }
2054
784
 
2055
- static VALUE
2056
- gl_DepthMask(obj,arg1)
2057
- VALUE obj,arg1;
2058
- {
2059
- GLboolean flag;
2060
- flag = (GLboolean)NUM2INT(arg1);
2061
- glDepthMask(flag);
2062
- return Qnil;
2063
- }
2064
785
 
2065
786
  static VALUE
2066
- gl_IndexMask(obj,arg1)
2067
- VALUE obj,arg1;
787
+ gl_TexGenf(obj,arg1,arg2,arg3)
788
+ VALUE obj,arg1,arg2,arg3;
2068
789
  {
2069
- GLuint mask;
2070
- mask = (GLuint)NUM2UINT(arg1);
2071
- glIndexMask(mask);
790
+ GLenum coord;
791
+ GLenum pname;
792
+ GLfloat param;
793
+ coord = (GLenum)NUM2INT(arg1);
794
+ pname = (GLenum)NUM2INT(arg2);
795
+ param = (GLfloat)NUM2DBL(arg3);
796
+ glTexGenf(coord,pname,param);
2072
797
  return Qnil;
2073
798
  }
2074
799
 
2075
800
  static VALUE
2076
- gl_Accum(obj,arg1,arg2)
2077
- VALUE obj,arg1,arg2;
801
+ gl_TexGenfv(obj,arg1,arg2,arg3)
802
+ VALUE obj,arg1,arg2,arg3;
2078
803
  {
2079
- GLenum op;
2080
- GLfloat value;
2081
- op = (GLenum)NUM2INT(arg1);
2082
- value = (GLfloat)NUM2DBL(arg2);
2083
- glAccum(op,value);
804
+ GLenum coord;
805
+ GLenum pname;
806
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
807
+ coord = (GLenum)NUM2INT(arg1);
808
+ pname = (GLenum)NUM2INT(arg2);
809
+ Check_Type(arg3,T_ARRAY);
810
+ ary2cflt(arg3,params,4);
811
+ glTexGenfv(coord,pname,params);
2084
812
  return Qnil;
2085
813
  }
2086
814
 
2087
815
  static VALUE
2088
- gl_Disable(obj,arg1)
2089
- VALUE obj,arg1;
816
+ gl_TexGeni(obj,arg1,arg2,arg3)
817
+ VALUE obj,arg1,arg2,arg3;
2090
818
  {
2091
- GLenum cap;
2092
- cap = (GLenum)NUM2INT(arg1);
2093
- glDisable(cap);
819
+ GLenum coord;
820
+ GLenum pname;
821
+ GLint param;
822
+ coord = (GLenum)NUM2INT(arg1);
823
+ pname = (GLenum)NUM2INT(arg2);
824
+ param = (GLint)NUM2INT(arg3);
825
+ glTexGeni(coord,pname,param);
2094
826
  return Qnil;
2095
827
  }
2096
828
 
2097
829
  static VALUE
2098
- gl_Enable(obj,arg1)
2099
- VALUE obj,arg1;
830
+ gl_TexGeniv(obj,arg1,arg2,arg3)
831
+ VALUE obj,arg1,arg2,arg3;
2100
832
  {
2101
- GLenum cap;
2102
- cap = (GLenum)NUM2INT(arg1);
2103
- glEnable(cap);
833
+ GLenum coord;
834
+ GLenum pname;
835
+ GLint params[4] = {0,0,0,0};
836
+ coord = (GLenum)NUM2INT(arg1);
837
+ pname = (GLenum)NUM2INT(arg2);
838
+ Check_Type(arg3,T_ARRAY);
839
+ ary2cint(arg3,params,4);
840
+ glTexGeniv(coord,pname,params);
2104
841
  return Qnil;
2105
842
  }
2106
-
843
+ static VALUE g_current_feed_buffer;
2107
844
  static VALUE
2108
- gl_Finish(obj)
2109
- VALUE obj;
845
+ gl_FeedbackBuffer(obj,arg1,arg2)
846
+ VALUE obj,arg1,arg2;
2110
847
  {
2111
- glFinish();
2112
- return Qnil;
848
+ GLsizei size;
849
+ GLenum type;
850
+ size = (GLsizei)NUM2UINT(arg1);
851
+ type = (GLenum)NUM2INT(arg2);
852
+ g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
853
+ rb_str_freeze(g_current_feed_buffer);
854
+ glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr);
855
+ return g_current_feed_buffer;
2113
856
  }
2114
857
 
858
+ static VALUE g_current_sel_buffer;
2115
859
  static VALUE
2116
- gl_Flush(obj)
2117
- VALUE obj;
860
+ gl_SelectBuffer(obj,arg1)
861
+ VALUE obj,arg1;
2118
862
  {
2119
- glFlush();
2120
- return Qnil;
863
+ GLsizei size;
864
+ size = (GLsizei)NUM2UINT(arg1);
865
+ g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
866
+ rb_str_freeze(g_current_sel_buffer);
867
+ glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr);
868
+ return g_current_sel_buffer;
2121
869
  }
2122
870
 
2123
871
  static VALUE
2124
- gl_PopAttrib(obj)
2125
- VALUE obj;
872
+ gl_RenderMode(obj,arg1)
873
+ VALUE obj,arg1;
2126
874
  {
2127
- glPopAttrib();
2128
- return Qnil;
875
+ GLenum mode;
876
+ GLint ret;
877
+ mode = (GLenum)NUM2INT(arg1);
878
+ ret = glRenderMode(mode);
879
+ return INT2NUM(ret);
2129
880
  }
2130
881
 
2131
882
  static VALUE
2132
- gl_PushAttrib(obj,arg1)
2133
- VALUE obj,arg1;
883
+ gl_Accum(obj,arg1,arg2)
884
+ VALUE obj,arg1,arg2;
2134
885
  {
2135
- GLbitfield mask;
2136
- mask = (GLbitfield)NUM2UINT(arg1);
2137
- glPushAttrib(mask);
886
+ GLenum op;
887
+ GLfloat value;
888
+ op = (GLenum)NUM2INT(arg1);
889
+ value = (GLfloat)NUM2DBL(arg2);
890
+ glAccum(op,value);
2138
891
  return Qnil;
2139
892
  }
2140
893
 
@@ -2330,16 +1083,6 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2330
1083
  return Qnil;
2331
1084
  }
2332
1085
 
2333
- static VALUE
2334
- gl_EvalCoord1d(obj,arg1)
2335
- VALUE obj,arg1;
2336
- {
2337
- GLdouble u;
2338
- u = (GLdouble)NUM2DBL(arg1);
2339
- glEvalCoord1d(u);
2340
- return Qnil;
2341
- }
2342
-
2343
1086
  static VALUE
2344
1087
  gl_EvalCoord1dv(obj,arg1)
2345
1088
  VALUE obj,arg1;
@@ -2351,16 +1094,6 @@ VALUE obj,arg1;
2351
1094
  return Qnil;
2352
1095
  }
2353
1096
 
2354
- static VALUE
2355
- gl_EvalCoord1f(obj,arg1)
2356
- VALUE obj,arg1;
2357
- {
2358
- GLfloat u;
2359
- u = (GLfloat)NUM2DBL(arg1);
2360
- glEvalCoord1f(u);
2361
- return Qnil;
2362
- }
2363
-
2364
1097
  static VALUE
2365
1098
  gl_EvalCoord1fv(obj,arg1)
2366
1099
  VALUE obj,arg1;
@@ -2372,18 +1105,6 @@ VALUE obj,arg1;
2372
1105
  return Qnil;
2373
1106
  }
2374
1107
 
2375
- static VALUE
2376
- gl_EvalCoord2d(obj,arg1,arg2)
2377
- VALUE obj,arg1,arg2;
2378
- {
2379
- GLdouble u;
2380
- GLdouble v;
2381
- u = (GLdouble)NUM2DBL(arg1);
2382
- v = (GLdouble)NUM2DBL(arg2);
2383
- glEvalCoord2d(u,v);
2384
- return Qnil;
2385
- }
2386
-
2387
1108
  static VALUE
2388
1109
  gl_EvalCoord2dv(obj,arg1)
2389
1110
  VALUE obj,arg1;
@@ -2395,18 +1116,6 @@ VALUE obj,arg1;
2395
1116
  return Qnil;
2396
1117
  }
2397
1118
 
2398
- static VALUE
2399
- gl_EvalCoord2f(obj,arg1,arg2)
2400
- VALUE obj,arg1,arg2;
2401
- {
2402
- GLfloat u;
2403
- GLfloat v;
2404
- u = (GLfloat)NUM2DBL(arg1);
2405
- v = (GLfloat)NUM2DBL(arg2);
2406
- glEvalCoord2f(u,v);
2407
- return Qnil;
2408
- }
2409
-
2410
1119
  static VALUE
2411
1120
  gl_EvalCoord2fv(obj,arg1)
2412
1121
  VALUE obj,arg1;
@@ -2432,16 +1141,6 @@ VALUE obj,arg1,arg2,arg3;
2432
1141
  return Qnil;
2433
1142
  }
2434
1143
 
2435
- static VALUE
2436
- gl_EvalPoint1(obj,arg1)
2437
- VALUE obj,arg1;
2438
- {
2439
- GLint i;
2440
- i = (GLint)NUM2INT(arg1);
2441
- glEvalPoint1(i);
2442
- return Qnil;
2443
- }
2444
-
2445
1144
  static VALUE
2446
1145
  gl_EvalMesh2(obj,arg1,arg2,arg3,arg4,arg5)
2447
1146
  VALUE obj,arg1,arg2,arg3,arg4,arg5;
@@ -2460,18 +1159,6 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2460
1159
  return Qnil;
2461
1160
  }
2462
1161
 
2463
- static VALUE
2464
- gl_EvalPoint2(obj,arg1,arg2)
2465
- VALUE obj,arg1,arg2;
2466
- {
2467
- GLint i;
2468
- GLint j;
2469
- i = (GLint)NUM2INT(arg1);
2470
- j = (GLint)NUM2INT(arg2);
2471
- glEvalPoint2(i,j);
2472
- return Qnil;
2473
- }
2474
-
2475
1162
  static VALUE
2476
1163
  gl_AlphaFunc(obj,arg1,arg2)
2477
1164
  VALUE obj,arg1,arg2;
@@ -2484,28 +1171,6 @@ VALUE obj,arg1,arg2;
2484
1171
  return Qnil;
2485
1172
  }
2486
1173
 
2487
- static VALUE
2488
- gl_BlendFunc(obj,arg1,arg2)
2489
- VALUE obj,arg1,arg2;
2490
- {
2491
- GLenum sfactor;
2492
- GLenum dfactor;
2493
- sfactor = (GLenum)NUM2INT(arg1);
2494
- dfactor = (GLenum)NUM2INT(arg2);
2495
- glBlendFunc(sfactor,dfactor);
2496
- return Qnil;
2497
- }
2498
-
2499
- static VALUE
2500
- gl_LogicOp(obj,arg1)
2501
- VALUE obj,arg1;
2502
- {
2503
- GLenum opcode;
2504
- opcode = (GLenum)NUM2INT(arg1);
2505
- glLogicOp(opcode);
2506
- return Qnil;
2507
- }
2508
-
2509
1174
  static VALUE
2510
1175
  gl_StencilFunc(obj,arg1,arg2,arg3)
2511
1176
  VALUE obj,arg1,arg2,arg3;
@@ -2520,42 +1185,6 @@ VALUE obj,arg1,arg2,arg3;
2520
1185
  return Qnil;
2521
1186
  }
2522
1187
 
2523
- static VALUE
2524
- gl_StencilOp(obj,arg1,arg2,arg3)
2525
- VALUE obj,arg1,arg2,arg3;
2526
- {
2527
- GLenum fail;
2528
- GLenum zfail;
2529
- GLenum zpass;
2530
- fail = (GLenum)NUM2INT(arg1);
2531
- zfail = (GLenum)NUM2INT(arg2);
2532
- zpass = (GLenum)NUM2INT(arg3);
2533
- glStencilOp(fail,zfail,zpass);
2534
- return Qnil;
2535
- }
2536
-
2537
- static VALUE
2538
- gl_DepthFunc(obj,arg1)
2539
- VALUE obj,arg1;
2540
- {
2541
- GLenum func;
2542
- func = (GLenum)NUM2INT(arg1);
2543
- glDepthFunc(func);
2544
- return Qnil;
2545
- }
2546
-
2547
- static VALUE
2548
- gl_PixelZoom(obj,arg1,arg2)
2549
- VALUE obj,arg1,arg2;
2550
- {
2551
- GLfloat xfactor;
2552
- GLfloat yfactor;
2553
- xfactor = (GLfloat)NUM2DBL(arg1);
2554
- yfactor = (GLfloat)NUM2DBL(arg2);
2555
- glPixelZoom(xfactor,yfactor);
2556
- return Qnil;
2557
- }
2558
-
2559
1188
  static VALUE
2560
1189
  gl_PixelTransferf(obj,arg1,arg2)
2561
1190
  VALUE obj,arg1,arg2;
@@ -2604,66 +1233,45 @@ VALUE obj,arg1,arg2;
2604
1233
  return Qnil;
2605
1234
  }
2606
1235
 
2607
- static VALUE
2608
- gl_PixelMapfv(obj,arg1,arg2)
2609
- VALUE obj,arg1,arg2;
2610
- {
2611
- GLenum map;
2612
- GLfloat *values;
2613
- GLsizei size;
2614
- map = (GLenum)NUM2INT(arg1);
2615
- Check_Type(arg2,T_ARRAY);
2616
- size = RARRAY(arg2)->len;
2617
- values = ALLOC_N(GLfloat,size);
2618
- ary2cflt(arg2,values,size);
2619
- glPixelMapfv(map,size,values);
2620
- xfree(values);
2621
- return Qnil;
2622
- }
2623
-
2624
- static VALUE
2625
- gl_PixelMapuiv(obj,arg1,arg2)
2626
- VALUE obj,arg1,arg2;
2627
- {
2628
- GLenum map;
2629
- GLuint *values;
2630
- GLsizei size;
2631
- map = (GLenum)NUM2INT(arg1);
2632
- Check_Type(arg2,T_ARRAY);
2633
- size = RARRAY(arg2)->len;
2634
- values = ALLOC_N(GLuint,size);
2635
- ary2cuint(arg2,values,size);
2636
- glPixelMapuiv(map,size,values);
2637
- xfree(values);
2638
- return Qnil;
2639
- }
2640
-
2641
- static VALUE
2642
- gl_PixelMapusv(obj,arg1,arg2)
2643
- VALUE obj,arg1,arg2;
2644
- {
2645
- GLenum map;
2646
- GLushort *values;
2647
- GLsizei size;
2648
- map = (GLenum)NUM2INT(arg1);
2649
- Check_Type(arg2,T_ARRAY);
2650
- size = RARRAY(arg2)->len;
2651
- values = ALLOC_N(GLushort,size);
2652
- ary2cushort(arg2,values,size);
2653
- glPixelMapusv(map,size,values);
2654
- xfree(values);
2655
- return Qnil;
1236
+ #define GLPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
1237
+ static VALUE \
1238
+ gl_PixelMap##_type_##v(argc,argv,obj) \
1239
+ int argc; \
1240
+ VALUE *argv; \
1241
+ VALUE obj; \
1242
+ { \
1243
+ GLenum map; \
1244
+ _vartype_ *values; \
1245
+ GLsizei size; \
1246
+ VALUE args[4]; \
1247
+ switch(rb_scan_args(argc, argv, "21", &args[0], &args[1], &args[2])) { \
1248
+ default: \
1249
+ case 2: \
1250
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) \
1251
+ rb_raise(rb_eArgError, "Pixel unpack buffer bound, but offset argument missing"); \
1252
+ map = (GLenum)NUM2INT(args[0]); \
1253
+ Check_Type(args[1],T_ARRAY); \
1254
+ size = RARRAY(args[1])->len; \
1255
+ values = ALLOC_N(_vartype_,size); \
1256
+ _convert_(args[1],values,size); \
1257
+ glPixelMap##_type_##v(map,size,values); \
1258
+ xfree(values); \
1259
+ break; \
1260
+ case 3: \
1261
+ if (!CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) \
1262
+ rb_raise(rb_eArgError, "Pixel unpack buffer not bound"); \
1263
+ map = (GLenum)NUM2INT(args[0]); \
1264
+ size = (GLsizei)NUM2INT(args[1]); \
1265
+ glPixelMap##_type_##v(map,size,(GLvoid *)NUM2INT(args[2])); \
1266
+ break; \
1267
+ } \
1268
+ return Qnil; \
2656
1269
  }
2657
1270
 
2658
- static VALUE
2659
- gl_ReadBuffer(obj,arg1)
2660
- VALUE obj,arg1;
2661
- {
2662
- GLenum mode;
2663
- mode = (GLenum)NUM2INT(arg1);
2664
- glReadBuffer(mode);
2665
- return Qnil;
2666
- }
1271
+ GLPIXELMAP_FUNC(f,GLfloat,ary2cflt)
1272
+ GLPIXELMAP_FUNC(ui,GLuint,ary2cuint)
1273
+ GLPIXELMAP_FUNC(us,GLushort,ary2cushort)
1274
+ #undef GLPIXELMAP_FUNC
2667
1275
 
2668
1276
  static VALUE
2669
1277
  gl_CopyPixels(obj,arg1,arg2,arg3,arg4,arg5)
@@ -2684,8 +1292,10 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2684
1292
  }
2685
1293
 
2686
1294
  static VALUE
2687
- gl_ReadPixels(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2688
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
1295
+ gl_ReadPixels(argc,argv,obj)
1296
+ int argc;
1297
+ VALUE *argv;
1298
+ VALUE obj;
2689
1299
  {
2690
1300
  GLint x;
2691
1301
  GLint y;
@@ -2694,29 +1304,36 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2694
1304
  int format;
2695
1305
  int type;
2696
1306
  VALUE pixels;
2697
- GLsizei type_size;
2698
- GLsizei format_size;
2699
- GLsizei size;
2700
- x = (GLint)NUM2INT(arg1);
2701
- y = (GLint)NUM2INT(arg2);
2702
- width = (GLsizei)NUM2UINT(arg3);
2703
- height = (GLsizei)NUM2UINT(arg4);
2704
- format = NUM2INT(arg5);
2705
- type = NUM2INT(arg6);
2706
- type_size = gltype_size(type);
2707
- format_size = glformat_size(format);
2708
- if (type_size == -1 || format_size == -1)
2709
- return Qnil;
2710
-
2711
- if (type==GL_BITMAP)
2712
- size = format_size*((width*height)/8);
2713
- else
2714
- size = width*height*format_size*type_size;
2715
- pixels = allocate_buffer_with_string(size);
2716
- FORCE_PIXEL_STORE_MODE
2717
- glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr);
2718
- RESTORE_PIXEL_STORE_MODE
2719
- return pixels;
1307
+ VALUE args[7];
1308
+ int numargs;
1309
+ numargs = rb_scan_args(argc, argv, "61", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5], &args[6]);
1310
+ x = (GLint)NUM2INT(args[0]);
1311
+ y = (GLint)NUM2INT(args[1]);
1312
+ width = (GLsizei)NUM2UINT(args[2]);
1313
+ height = (GLsizei)NUM2UINT(args[3]);
1314
+ format = NUM2INT(args[4]);
1315
+ type = NUM2INT(args[5]);
1316
+
1317
+ switch(numargs) {
1318
+ default:
1319
+ case 6:
1320
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1321
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
1322
+ pixels = allocate_buffer_with_string(GetDataSize(type,format,width*height));
1323
+ FORCE_PIXEL_STORE_MODE
1324
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr);
1325
+ RESTORE_PIXEL_STORE_MODE
1326
+ return pixels;
1327
+ break;
1328
+ case 7:
1329
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1330
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound");
1331
+ FORCE_PIXEL_STORE_MODE
1332
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)NUM2INT(args[6]));
1333
+ RESTORE_PIXEL_STORE_MODE
1334
+ return Qnil;
1335
+ break;
1336
+ }
2720
1337
  }
2721
1338
 
2722
1339
  static VALUE
@@ -2728,26 +1345,18 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2728
1345
  GLenum format;
2729
1346
  GLenum type;
2730
1347
  const char *pixels;
2731
- GLsizei size;
2732
- GLsizei type_size;
2733
- GLsizei format_size;
2734
1348
  width = (GLsizei)NUM2UINT(arg1);
2735
1349
  height = (GLsizei)NUM2UINT(arg2);
2736
1350
  format = (GLenum)NUM2INT(arg3);
2737
1351
  type = (GLenum)NUM2INT(arg4);
2738
- Check_Type(arg5,T_STRING);
2739
- type_size = gltype_size(type);
2740
- format_size = glformat_size(format);
2741
- if (type_size == -1 || format_size == -1)
2742
- rb_raise(rb_eArgError, "type/format mismatch");
2743
- if (type==GL_BITMAP)
2744
- size = format_size*(width/8);
2745
- else
2746
- size = type_size*format_size*width*height;
2747
- if (RSTRING(arg5)->len < size)
2748
- rb_raise(rb_eArgError, "string length:%d", RSTRING(arg5)->len);
2749
- pixels = RSTRING(arg5)->ptr;
2750
- glDrawPixels(width,height,format,type,pixels);
1352
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
1353
+ glDrawPixels(width,height,format,type,(GLvoid *)NUM2INT(arg5));
1354
+ } else {
1355
+ Check_Type(arg5,T_STRING);
1356
+ CheckDataSize(type,format,width*height,arg5);
1357
+ pixels = RSTRING(arg5)->ptr;
1358
+ glDrawPixels(width,height,format,type,pixels);
1359
+ }
2751
1360
  return Qnil;
2752
1361
  }
2753
1362
 
@@ -2776,7 +1385,7 @@ VALUE obj,arg1; \
2776
1385
  int nitems; \
2777
1386
  VALUE ary, ary2; \
2778
1387
  int i,j; \
2779
- _type_ items[32]; \
1388
+ _type_ items[64]; \
2780
1389
  pname = NUM2INT(arg1); \
2781
1390
  switch(pname) { \
2782
1391
  case GL_ACCUM_CLEAR_VALUE: \
@@ -2796,10 +1405,25 @@ VALUE obj,arg1; \
2796
1405
  case GL_SCISSOR_BOX: \
2797
1406
  case GL_TEXTURE_ENV_COLOR: \
2798
1407
  case GL_VIEWPORT: \
1408
+ case GL_REFERENCE_PLANE_EQUATION_SGIX: \
1409
+ case GL_FOG_OFFSET_VALUE_SGIX: \
1410
+ case GL_TEXTURE_ENV_BIAS_SGIX: \
1411
+ case GL_CULL_VERTEX_OBJECT_POSITION_EXT: \
1412
+ case GL_CULL_VERTEX_EYE_POSITION_EXT: \
1413
+ case GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX: \
1414
+ case GL_CONSTANT_COLOR0_NV: \
1415
+ case GL_CONSTANT_COLOR1_NV: \
1416
+ case GL_TEXTURE_COLOR_WRITEMASK_SGIS: \
1417
+ case GL_FLOAT_CLEAR_COLOR_VALUE_NV: \
2799
1418
  nitems = 4; \
2800
1419
  break; \
2801
1420
  case GL_CURRENT_NORMAL: \
2802
1421
  case GL_POINT_DISTANCE_ATTENUATION: \
1422
+ case GL_SPRITE_AXIS_SGIX: \
1423
+ case GL_SPRITE_TRANSLATION_SGIX: \
1424
+ case GL_CURRENT_RASTER_NORMAL_SGIX: \
1425
+ case GL_CURRENT_TANGENT_EXT: \
1426
+ case GL_CURRENT_BINORMAL_EXT: \
2803
1427
  nitems = 3; \
2804
1428
  break; \
2805
1429
  case GL_DEPTH_RANGE: \
@@ -2811,11 +1435,56 @@ VALUE obj,arg1; \
2811
1435
  case GL_POLYGON_MODE: \
2812
1436
  case GL_ALIASED_LINE_WIDTH_RANGE: \
2813
1437
  case GL_ALIASED_POINT_SIZE_RANGE: \
1438
+ case GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX: \
1439
+ case GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX: \
1440
+ case GL_FOG_FUNC_SGIS: \
1441
+ case GL_DEPTH_BOUNDS_EXT: \
2814
1442
  nitems = 2; \
2815
1443
  break; \
2816
1444
  case GL_MODELVIEW_MATRIX: \
2817
1445
  case GL_PROJECTION_MATRIX: \
2818
1446
  case GL_TEXTURE_MATRIX: \
1447
+ case GL_COLOR_MATRIX: \
1448
+ case GL_TRANSPOSE_MODELVIEW_MATRIX: \
1449
+ case GL_TRANSPOSE_PROJECTION_MATRIX: \
1450
+ case GL_TRANSPOSE_TEXTURE_MATRIX: \
1451
+ case GL_TRANSPOSE_COLOR_MATRIX: \
1452
+ case GL_MODELVIEW0_ARB: \
1453
+ case GL_MODELVIEW1_ARB: \
1454
+ case GL_MODELVIEW2_ARB: \
1455
+ case GL_MODELVIEW3_ARB: \
1456
+ case GL_MODELVIEW4_ARB: \
1457
+ case GL_MODELVIEW5_ARB: \
1458
+ case GL_MODELVIEW6_ARB: \
1459
+ case GL_MODELVIEW7_ARB: \
1460
+ case GL_MODELVIEW8_ARB: \
1461
+ case GL_MODELVIEW9_ARB: \
1462
+ case GL_MODELVIEW10_ARB: \
1463
+ case GL_MODELVIEW11_ARB: \
1464
+ case GL_MODELVIEW12_ARB: \
1465
+ case GL_MODELVIEW13_ARB: \
1466
+ case GL_MODELVIEW14_ARB: \
1467
+ case GL_MODELVIEW15_ARB: \
1468
+ case GL_MODELVIEW16_ARB: \
1469
+ case GL_MODELVIEW17_ARB: \
1470
+ case GL_MODELVIEW18_ARB: \
1471
+ case GL_MODELVIEW19_ARB: \
1472
+ case GL_MODELVIEW20_ARB: \
1473
+ case GL_MODELVIEW21_ARB: \
1474
+ case GL_MODELVIEW22_ARB: \
1475
+ case GL_MODELVIEW23_ARB: \
1476
+ case GL_MODELVIEW24_ARB: \
1477
+ case GL_MODELVIEW25_ARB: \
1478
+ case GL_MODELVIEW26_ARB: \
1479
+ case GL_MODELVIEW27_ARB: \
1480
+ case GL_MODELVIEW28_ARB: \
1481
+ case GL_MODELVIEW29_ARB: \
1482
+ case GL_MODELVIEW30_ARB: \
1483
+ case GL_MODELVIEW31_ARB: \
1484
+ case GL_MATRIX_PALETTE_ARB: \
1485
+ case GL_PIXEL_TRANSFORM_2D_MATRIX_EXT: \
1486
+ case GL_MODELVIEW1_MATRIX_EXT: \
1487
+ case GL_CURRENT_MATRIX_NV: \
2819
1488
  glGet##_name_##v(pname, items); \
2820
1489
  ary = rb_ary_new2(4); \
2821
1490
  for (i = 0; i < 4; i++) { \
@@ -2828,6 +1497,11 @@ VALUE obj,arg1; \
2828
1497
  case GL_POLYGON_STIPPLE: \
2829
1498
  glGet##_name_##v(pname, items); \
2830
1499
  return rb_str_new((const char*)items, 32); \
1500
+ case GL_COMPRESSED_TEXTURE_FORMATS: \
1501
+ glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &nitems); \
1502
+ if (nitems<=0||nitems>64) \
1503
+ return INT2NUM(0); \
1504
+ break; \
2831
1505
  default: /* size=1 */ \
2832
1506
  glGet##_name_##v(pname, items); \
2833
1507
  return _conv_(items[0]); \
@@ -3190,124 +1864,89 @@ VALUE obj,arg1,arg2;
3190
1864
  return retary;
3191
1865
  }
3192
1866
 
3193
- static VALUE
3194
- gl_GetPixelMapfv(obj,arg1)
3195
- VALUE obj,arg1;
3196
- {
3197
- GLenum map;
3198
- GLenum map_size;
3199
- GLint size = 0;
3200
- GLfloat *values;
3201
- VALUE retary;
3202
- int i;
3203
- map = (GLenum)NUM2INT(arg1);
3204
- switch(map) {
3205
- case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3206
- case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3207
- case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3208
- case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3209
- case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3210
- case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3211
- case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3212
- case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3213
- case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3214
- case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3215
- default:
3216
- rb_raise(rb_eArgError, "unknown map:%d",map);
3217
- break; /* not reached */
3218
- }
3219
- glGetIntegerv(map_size,&size);
3220
- values = ALLOC_N(GLfloat,size);
3221
- glGetPixelMapfv(map,values);
3222
- retary = rb_ary_new2(size);
3223
- for(i=0;i<size;i++)
3224
- rb_ary_push(retary, rb_float_new(values[i]));
3225
- xfree(values);
3226
- return retary;
3227
- }
3228
-
3229
- static VALUE
3230
- gl_GetPixelMapuiv(obj,arg1)
3231
- VALUE obj,arg1;
3232
- {
3233
- GLenum map;
3234
- GLenum map_size;
3235
- GLint size = 0;
3236
- GLuint *values;
3237
- VALUE retary;
3238
- int i;
3239
- map = (GLenum)NUM2INT(arg1);
3240
- switch(map) {
3241
- case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3242
- case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3243
- case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3244
- case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3245
- case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3246
- case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3247
- case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3248
- case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3249
- case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3250
- case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3251
- default:
3252
- rb_raise(rb_eArgError, "unknown map:%d",map);
3253
- break; /* not reached */
3254
- }
3255
- glGetIntegerv(map_size,&size);
3256
- values = ALLOC_N(GLuint,size);
3257
- glGetPixelMapuiv(map,values);
3258
- retary = rb_ary_new2(size);
3259
- for(i=0;i<size;i++)
3260
- rb_ary_push(retary, INT2NUM(values[i]));
3261
- xfree(values);
3262
- return retary;
1867
+ #define GLGETPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
1868
+ static VALUE \
1869
+ gl_GetPixelMap##_type_##v(argc,argv,obj) \
1870
+ int argc; \
1871
+ VALUE *argv; \
1872
+ VALUE obj; \
1873
+ { \
1874
+ GLenum map; \
1875
+ GLenum map_size; \
1876
+ GLint size = 0; \
1877
+ _vartype_ *values; \
1878
+ VALUE retary; \
1879
+ VALUE args[2]; \
1880
+ int i; \
1881
+ switch (rb_scan_args(argc, argv, "11", &args[0], &args[1])) { \
1882
+ default: \
1883
+ case 1: \
1884
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING)) \
1885
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing"); \
1886
+ \
1887
+ map = (GLenum)NUM2INT(args[0]); \
1888
+ switch(map) { \
1889
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break; \
1890
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break; \
1891
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break; \
1892
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break; \
1893
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break; \
1894
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break; \
1895
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break; \
1896
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break; \
1897
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break; \
1898
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break; \
1899
+ default: \
1900
+ rb_raise(rb_eArgError, "unknown map:%d",map); \
1901
+ break; \
1902
+ } \
1903
+ glGetIntegerv(map_size,&size); \
1904
+ values = ALLOC_N(_vartype_,size); \
1905
+ glGetPixelMap##_type_##v(map,values); \
1906
+ retary = rb_ary_new2(size); \
1907
+ for(i=0;i<size;i++) \
1908
+ rb_ary_push(retary, _convert_(values[i])); \
1909
+ xfree(values); \
1910
+ return retary; \
1911
+ case 2: \
1912
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING)) \
1913
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound"); \
1914
+ \
1915
+ map = (GLenum)NUM2INT(args[0]); \
1916
+ glGetPixelMap##_type_##v(map,(GLvoid*)NUM2INT(args[1])); \
1917
+ return Qnil; \
1918
+ } \
3263
1919
  }
3264
1920
 
3265
- static VALUE
3266
- gl_GetPixelMapusv(obj,arg1)
3267
- VALUE obj,arg1;
3268
- {
3269
- GLenum map;
3270
- GLenum map_size;
3271
- GLint size = 0;
3272
- GLushort *values;
3273
- VALUE retary;
3274
- int i;
3275
- map = (GLenum)NUM2INT(arg1);
3276
- switch(map) {
3277
- case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3278
- case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3279
- case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3280
- case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3281
- case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3282
- case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3283
- case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3284
- case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3285
- case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3286
- case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3287
- default:
3288
- rb_raise(rb_eArgError, "unknown map:%d",map);
3289
- break; /* not reached */
3290
- }
3291
- glGetIntegerv(map_size,&size);
3292
- values = ALLOC_N(GLushort,size);
3293
- glGetPixelMapusv(map,values);
3294
- retary = rb_ary_new2(size);
3295
- for(i=0;i<size;i++)
3296
- rb_ary_push(retary, INT2NUM(values[i]));
3297
- xfree(values);
3298
- return retary;
3299
- }
1921
+ GLGETPIXELMAP_FUNC(f,GLfloat,rb_float_new)
1922
+ GLGETPIXELMAP_FUNC(ui,GLuint,INT2NUM)
1923
+ GLGETPIXELMAP_FUNC(us,GLushort,INT2NUM)
1924
+ #undef GLGETPIXELMAP_FUNC
3300
1925
 
3301
1926
  static VALUE
3302
- gl_GetPolygonStipple(obj)
1927
+ gl_GetPolygonStipple(argc,argv,obj)
1928
+ int argc;
1929
+ VALUE *argv;
3303
1930
  VALUE obj;
3304
1931
  {
1932
+ VALUE args[1];
3305
1933
  GLubyte mask[128];
3306
- memset(mask, 0x0, sizeof(GLubyte)*128);
3307
- FORCE_PIXEL_STORE_MODE
3308
- glGetPolygonStipple(mask);
3309
- RESTORE_PIXEL_STORE_MODE
3310
- return rb_str_new((const char*)mask, 128);
1934
+ switch(rb_scan_args(argc, argv, "01", &args[0])) {
1935
+ default:
1936
+ case 0:
1937
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1938
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
1939
+ memset(mask, 0x0, sizeof(GLubyte)*128);
1940
+ FORCE_PIXEL_STORE_MODE
1941
+ glGetPolygonStipple(mask);
1942
+ RESTORE_PIXEL_STORE_MODE
1943
+ return rb_str_new((const char*)mask, 128);
1944
+ case 1:
1945
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1946
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound");
1947
+ glGetPolygonStipple((GLvoid *)NUM2INT(args[0]));
1948
+ return Qnil;
1949
+ }
3311
1950
  }
3312
1951
 
3313
1952
  static VALUE
@@ -3335,32 +1974,17 @@ VALUE obj,arg1,arg2;
3335
1974
  pname = (GLenum)NUM2INT(arg2);
3336
1975
  switch(pname) {
3337
1976
  case GL_TEXTURE_ENV_COLOR:
1977
+ case GL_TEXTURE_ENV_BIAS_SGIX:
1978
+ case GL_CULL_MODES_NV:
1979
+ case GL_OFFSET_TEXTURE_MATRIX_NV:
3338
1980
  size = 4;
3339
1981
  break;
3340
- case GL_TEXTURE_ENV_MODE:
3341
- case GL_COORD_REPLACE:
3342
- case GL_TEXTURE_LOD_BIAS:
3343
- case GL_COMBINE_RGB:
3344
- case GL_COMBINE_ALPHA:
3345
- case GL_SRC0_RGB:
3346
- case GL_SRC1_RGB:
3347
- case GL_SRC2_RGB:
3348
- case GL_SRC0_ALPHA:
3349
- case GL_SRC1_ALPHA:
3350
- case GL_SRC2_ALPHA:
3351
- case GL_OPERAND0_RGB:
3352
- case GL_OPERAND1_RGB:
3353
- case GL_OPERAND2_RGB:
3354
- case GL_OPERAND0_ALPHA:
3355
- case GL_OPERAND1_ALPHA:
3356
- case GL_OPERAND2_ALPHA:
3357
- case GL_RGB_SCALE:
3358
- case GL_ALPHA_SCALE:
3359
- size = 1;
1982
+ case GL_CONST_EYE_NV:
1983
+ size = 3;
3360
1984
  break;
3361
1985
  default:
3362
- rb_raise(rb_eArgError, "unknown pname:%d",pname);
3363
- break; /* not reached */
1986
+ size = 1;
1987
+ break;
3364
1988
  }
3365
1989
  glGetTexEnvfv(target,pname,params);
3366
1990
  retary = rb_ary_new2(size);
@@ -3383,32 +2007,17 @@ VALUE obj,arg1,arg2;
3383
2007
  pname = (GLenum)NUM2INT(arg2);
3384
2008
  switch(pname) {
3385
2009
  case GL_TEXTURE_ENV_COLOR:
2010
+ case GL_TEXTURE_ENV_BIAS_SGIX:
2011
+ case GL_CULL_MODES_NV:
2012
+ case GL_OFFSET_TEXTURE_MATRIX_NV:
3386
2013
  size = 4;
3387
2014
  break;
3388
- case GL_TEXTURE_ENV_MODE:
3389
- case GL_COORD_REPLACE:
3390
- case GL_TEXTURE_LOD_BIAS:
3391
- case GL_COMBINE_RGB:
3392
- case GL_COMBINE_ALPHA:
3393
- case GL_SRC0_RGB:
3394
- case GL_SRC1_RGB:
3395
- case GL_SRC2_RGB:
3396
- case GL_SRC0_ALPHA:
3397
- case GL_SRC1_ALPHA:
3398
- case GL_SRC2_ALPHA:
3399
- case GL_OPERAND0_RGB:
3400
- case GL_OPERAND1_RGB:
3401
- case GL_OPERAND2_RGB:
3402
- case GL_OPERAND0_ALPHA:
3403
- case GL_OPERAND1_ALPHA:
3404
- case GL_OPERAND2_ALPHA:
3405
- case GL_RGB_SCALE:
3406
- case GL_ALPHA_SCALE:
3407
- size = 1;
2015
+ case GL_CONST_EYE_NV:
2016
+ size = 3;
3408
2017
  break;
3409
2018
  default:
3410
- rb_raise(rb_eArgError, "unknown pname:%d",pname);
3411
- break; /* not reached */
2019
+ size = 1;
2020
+ break;
3412
2021
  }
3413
2022
  glGetTexEnviv(target,pname,params);
3414
2023
  retary = rb_ary_new2(size);
@@ -3434,12 +2043,9 @@ VALUE obj,arg1,arg2;
3434
2043
  case GL_EYE_PLANE:
3435
2044
  size = 4;
3436
2045
  break;
3437
- case GL_TEXTURE_GEN_MODE:
2046
+ default:
3438
2047
  size = 1;
3439
2048
  break;
3440
- default:
3441
- rb_raise(rb_eArgError, "unknown pname:%d",pname);
3442
- break; /* not reached */
3443
2049
  }
3444
2050
  glGetTexGendv(coord,pname,params);
3445
2051
  retary = rb_ary_new2(size);
@@ -3465,12 +2071,9 @@ VALUE obj,arg1,arg2;
3465
2071
  case GL_EYE_PLANE:
3466
2072
  size = 4;
3467
2073
  break;
3468
- case GL_TEXTURE_GEN_MODE:
2074
+ default:
3469
2075
  size = 1;
3470
2076
  break;
3471
- default:
3472
- rb_raise(rb_eArgError, "unknown pname:%d",pname);
3473
- break; /* not reached */
3474
2077
  }
3475
2078
  glGetTexGenfv(coord,pname,params);
3476
2079
  retary = rb_ary_new2(size);
@@ -3496,12 +2099,9 @@ VALUE obj,arg1,arg2;
3496
2099
  case GL_EYE_PLANE:
3497
2100
  size = 4;
3498
2101
  break;
3499
- case GL_TEXTURE_GEN_MODE:
2102
+ default:
3500
2103
  size = 1;
3501
2104
  break;
3502
- default:
3503
- rb_raise(rb_eArgError, "unknown pname:%d",pname);
3504
- break; /* not reached */
3505
2105
  }
3506
2106
  glGetTexGeniv(coord,pname,params);
3507
2107
  retary = rb_ary_new2(size);
@@ -3510,10 +2110,11 @@ VALUE obj,arg1,arg2;
3510
2110
  return retary;
3511
2111
  }
3512
2112
 
3513
-
3514
2113
  static VALUE
3515
- gl_GetTexImage(obj,arg1,arg2,arg3,arg4)
3516
- VALUE obj,arg1,arg2,arg3,arg4;
2114
+ gl_GetTexImage(argc,argv,obj)
2115
+ int argc;
2116
+ VALUE *argv;
2117
+ VALUE obj;
3517
2118
  {
3518
2119
  GLenum tex;
3519
2120
  GLint lod;
@@ -3522,46 +2123,71 @@ VALUE obj,arg1,arg2,arg3,arg4;
3522
2123
  GLint width = 0;
3523
2124
  GLint height = 0;
3524
2125
  GLint depth = 0;
2126
+ GLint size4d = 0;
3525
2127
  GLint size;
3526
- GLint format_size;
3527
- GLint type_size;
3528
2128
  VALUE pixels;
3529
- tex = (GLenum)NUM2INT(arg1);
3530
- lod = (GLint)NUM2INT(arg2);
3531
- format = (GLenum)NUM2INT(arg3);
3532
- type = (GLenum)NUM2INT(arg4);
3533
- format_size = glformat_size(format);
3534
- type_size = gltype_size(type);
3535
- if (type_size == -1 && format_size == -1)
3536
- return Qnil;
2129
+ VALUE args[5];
2130
+ int numargs;
2131
+ numargs = rb_scan_args(argc, argv, "41", &args[0], &args[1], &args[2], &args[3], &args[4]);
2132
+ tex = (GLenum)NUM2INT(args[0]);
2133
+ lod = (GLint)NUM2INT(args[1]);
2134
+ format = (GLenum)NUM2INT(args[2]);
2135
+ type = (GLenum)NUM2INT(args[3]);
2136
+ switch(numargs) {
2137
+ default:
2138
+ case 4:
2139
+ if (CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
2140
+ rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
3537
2141
 
3538
- size = 1;
3539
- switch(tex) {
3540
- case GL_TEXTURE_3D:
3541
- glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_DEPTH,&depth);
3542
- size *= depth;
3543
- /* fall through */
3544
- case GL_TEXTURE_2D:
3545
- glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_HEIGHT,&height);
3546
- size *= height;
3547
- /* fall through */
3548
- case GL_TEXTURE_1D:
3549
- glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_WIDTH,&width);
3550
- size *= width;
2142
+ size = 1;
2143
+ switch(tex) {
2144
+ case GL_TEXTURE_4D_SGIS:
2145
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_4DSIZE_SGIS,&size4d);
2146
+ size *= size4d;
2147
+ /* fall through */
2148
+ case GL_TEXTURE_3D:
2149
+ case GL_TEXTURE_1D_STACK_MESAX:
2150
+ case GL_TEXTURE_2D_STACK_MESAX:
2151
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_DEPTH,&depth);
2152
+ size *= depth;
2153
+ /* fall through */
2154
+ case GL_TEXTURE_2D:
2155
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
2156
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
2157
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
2158
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
2159
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
2160
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
2161
+ case GL_TEXTURE_RECTANGLE_ARB:
2162
+ case GL_DETAIL_TEXTURE_2D_SGIS:
2163
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_HEIGHT,&height);
2164
+ size *= height;
2165
+ /* fall through */
2166
+ case GL_TEXTURE_1D:
2167
+ glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_WIDTH,&width);
2168
+ size *= width;
2169
+ break;
2170
+ default:
2171
+ rb_raise(rb_eArgError, "Target type not supported");
2172
+ }
2173
+ pixels = allocate_buffer_with_string(GetDataSize(type,format,size));
2174
+
2175
+ FORCE_PIXEL_STORE_MODE
2176
+ glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING(pixels)->ptr);
2177
+ RESTORE_PIXEL_STORE_MODE
2178
+ return pixels;
3551
2179
  break;
3552
- default:
3553
- return Qnil;
3554
- }
3555
- size *= format_size*type_size;
3556
- pixels = allocate_buffer_with_string(size);
2180
+ case 5:
2181
+ if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
2182
+ rb_raise(rb_eArgError, "Pixel pack buffer not bound");
3557
2183
 
3558
- FORCE_PIXEL_STORE_MODE
3559
- glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING(pixels)->ptr);
3560
- RESTORE_PIXEL_STORE_MODE
3561
- return pixels;
2184
+ FORCE_PIXEL_STORE_MODE
2185
+ glGetTexImage(tex,lod,format,type,(GLvoid*)NUM2INT(args[4]));
2186
+ RESTORE_PIXEL_STORE_MODE
2187
+ return Qnil;
2188
+ }
3562
2189
  }
3563
2190
 
3564
-
3565
2191
  static VALUE
3566
2192
  gl_GetTexParameterfv(obj,arg1,arg2)
3567
2193
  VALUE obj,arg1,arg2;
@@ -3576,6 +2202,9 @@ VALUE obj,arg1,arg2;
3576
2202
  pname = (GLenum)NUM2INT(arg2);
3577
2203
  switch(pname) {
3578
2204
  case GL_TEXTURE_BORDER_COLOR:
2205
+ case GL_TEXTURE_BORDER_VALUES_NV:
2206
+ case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
2207
+ case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
3579
2208
  size = 4;
3580
2209
  break;
3581
2210
  default:
@@ -3603,6 +2232,9 @@ VALUE obj,arg1,arg2;
3603
2232
  pname = (GLenum)NUM2INT(arg2);
3604
2233
  switch(pname) {
3605
2234
  case GL_TEXTURE_BORDER_COLOR:
2235
+ case GL_TEXTURE_BORDER_VALUES_NV:
2236
+ case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
2237
+ case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
3606
2238
  size = 4;
3607
2239
  break;
3608
2240
  default:
@@ -3674,46 +2306,6 @@ VALUE obj,arg1;
3674
2306
  return INT2NUM(ret);
3675
2307
  }
3676
2308
 
3677
- static VALUE
3678
- gl_DepthRange(obj,arg1,arg2)
3679
- VALUE obj,arg1,arg2;
3680
- {
3681
- GLclampd near_val;
3682
- GLclampd far_val;
3683
- near_val = (GLclampd)NUM2DBL(arg1);
3684
- far_val = (GLclampd)NUM2DBL(arg2);
3685
- glDepthRange(near_val,far_val);
3686
- return Qnil;
3687
- }
3688
-
3689
- static VALUE
3690
- gl_Frustum(obj,arg1,arg2,arg3,arg4,arg5,arg6)
3691
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
3692
- {
3693
- GLdouble left;
3694
- GLdouble right;
3695
- GLdouble bottom;
3696
- GLdouble top;
3697
- GLdouble near_val;
3698
- GLdouble far_val;
3699
- left = (GLdouble)NUM2DBL(arg1);
3700
- right = (GLdouble)NUM2DBL(arg2);
3701
- bottom = (GLdouble)NUM2DBL(arg3);
3702
- top = (GLdouble)NUM2DBL(arg4);
3703
- near_val = (GLdouble)NUM2DBL(arg5);
3704
- far_val = (GLdouble)NUM2DBL(arg6);
3705
- glFrustum(left,right,bottom,top,near_val,far_val);
3706
- return Qnil;
3707
- }
3708
-
3709
- static VALUE
3710
- gl_LoadIdentity(obj)
3711
- VALUE obj;
3712
- {
3713
- glLoadIdentity();
3714
- return Qnil;
3715
- }
3716
-
3717
2309
  static VALUE
3718
2310
  gl_LoadMatrixf(obj,arg1)
3719
2311
  VALUE obj,arg1;
@@ -3734,16 +2326,6 @@ VALUE obj,arg1;
3734
2326
  return Qnil;
3735
2327
  }
3736
2328
 
3737
- static VALUE
3738
- gl_MatrixMode(obj,arg1)
3739
- VALUE obj,arg1;
3740
- {
3741
- GLenum mode;
3742
- mode = (GLenum)NUM2INT(arg1);
3743
- glMatrixMode(mode);
3744
- return Qnil;
3745
- }
3746
-
3747
2329
  static VALUE
3748
2330
  gl_MultMatrixf(obj,arg1)
3749
2331
  VALUE obj,arg1;
@@ -3764,155 +2346,6 @@ VALUE obj,arg1;
3764
2346
  return Qnil;
3765
2347
  }
3766
2348
 
3767
- static VALUE
3768
- gl_Ortho(obj,arg1,arg2,arg3,arg4,arg5,arg6)
3769
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
3770
- {
3771
- GLdouble left;
3772
- GLdouble right;
3773
- GLdouble bottom;
3774
- GLdouble top;
3775
- GLdouble near_val;
3776
- GLdouble far_val;
3777
- left = (GLdouble)NUM2DBL(arg1);
3778
- right = (GLdouble)NUM2DBL(arg2);
3779
- bottom = (GLdouble)NUM2DBL(arg3);
3780
- top = (GLdouble)NUM2DBL(arg4);
3781
- near_val = (GLdouble)NUM2DBL(arg5);
3782
- far_val = (GLdouble)NUM2DBL(arg6);
3783
- glOrtho(left,right,bottom,top,near_val,far_val);
3784
- return Qnil;
3785
- }
3786
-
3787
- static VALUE
3788
- gl_PopMatrix(obj)
3789
- VALUE obj;
3790
- {
3791
- glPopMatrix();
3792
- return Qnil;
3793
- }
3794
-
3795
- static VALUE
3796
- gl_PushMatrix(obj)
3797
- VALUE obj;
3798
- {
3799
- glPushMatrix();
3800
- return Qnil;
3801
- }
3802
-
3803
- static VALUE
3804
- gl_Rotated(obj,arg1,arg2,arg3,arg4)
3805
- VALUE obj,arg1,arg2,arg3,arg4;
3806
- {
3807
- GLdouble angle;
3808
- GLdouble x;
3809
- GLdouble y;
3810
- GLdouble z;
3811
- angle = (GLdouble)NUM2DBL(arg1);
3812
- x = (GLdouble)NUM2DBL(arg2);
3813
- y = (GLdouble)NUM2DBL(arg3);
3814
- z = (GLdouble)NUM2DBL(arg4);
3815
- glRotated(angle,x,y,z);
3816
- return Qnil;
3817
- }
3818
-
3819
- static VALUE
3820
- gl_Rotatef(obj,arg1,arg2,arg3,arg4)
3821
- VALUE obj,arg1,arg2,arg3,arg4;
3822
- {
3823
- GLfloat angle;
3824
- GLfloat x;
3825
- GLfloat y;
3826
- GLfloat z;
3827
- angle = (GLfloat)NUM2DBL(arg1);
3828
- x = (GLfloat)NUM2DBL(arg2);
3829
- y = (GLfloat)NUM2DBL(arg3);
3830
- z = (GLfloat)NUM2DBL(arg4);
3831
- glRotatef(angle,x,y,z);
3832
- return Qnil;
3833
- }
3834
-
3835
- static VALUE
3836
- gl_Scaled(obj,arg1,arg2,arg3)
3837
- VALUE obj,arg1,arg2,arg3;
3838
- {
3839
- GLdouble x;
3840
- GLdouble y;
3841
- GLdouble z;
3842
- x = (GLdouble)NUM2DBL(arg1);
3843
- y = (GLdouble)NUM2DBL(arg2);
3844
- z = (GLdouble)NUM2DBL(arg3);
3845
- glScaled(x,y,z);
3846
- return Qnil;
3847
- }
3848
-
3849
- static VALUE
3850
- gl_Scalef(obj,arg1,arg2,arg3)
3851
- VALUE obj,arg1,arg2,arg3;
3852
- {
3853
- GLfloat x;
3854
- GLfloat y;
3855
- GLfloat z;
3856
- x = (GLfloat)NUM2DBL(arg1);
3857
- y = (GLfloat)NUM2DBL(arg2);
3858
- z = (GLfloat)NUM2DBL(arg3);
3859
- glScalef(x,y,z);
3860
- return Qnil;
3861
- }
3862
-
3863
- static VALUE
3864
- gl_Translated(obj,arg1,arg2,arg3)
3865
- VALUE obj,arg1,arg2,arg3;
3866
- {
3867
- GLdouble x;
3868
- GLdouble y;
3869
- GLdouble z;
3870
- x = (GLdouble)NUM2DBL(arg1);
3871
- y = (GLdouble)NUM2DBL(arg2);
3872
- z = (GLdouble)NUM2DBL(arg3);
3873
- glTranslated(x,y,z);
3874
- return Qnil;
3875
- }
3876
-
3877
- static VALUE
3878
- gl_Translatef(obj,arg1,arg2,arg3)
3879
- VALUE obj,arg1,arg2,arg3;
3880
- {
3881
- GLfloat x;
3882
- GLfloat y;
3883
- GLfloat z;
3884
- x = (GLfloat)NUM2DBL(arg1);
3885
- y = (GLfloat)NUM2DBL(arg2);
3886
- z = (GLfloat)NUM2DBL(arg3);
3887
- glTranslatef(x,y,z);
3888
- return Qnil;
3889
- }
3890
-
3891
- static VALUE
3892
- gl_Viewport(obj,arg1,arg2,arg3,arg4)
3893
- VALUE obj,arg1,arg2,arg3,arg4;
3894
- {
3895
- GLint x;
3896
- GLint y;
3897
- GLsizei width;
3898
- GLsizei height;
3899
- x = (GLint)NUM2INT(arg1);
3900
- y = (GLint)NUM2INT(arg2);
3901
- width = (GLsizei)NUM2UINT(arg3);
3902
- height = (GLsizei)NUM2UINT(arg4);
3903
- glViewport(x,y,width,height);
3904
- return Qnil;
3905
- }
3906
-
3907
- static VALUE
3908
- gl_ArrayElement(obj,arg1)
3909
- VALUE obj,arg1;
3910
- {
3911
- GLint i;
3912
- i = (GLint)NUM2INT(arg1);
3913
- glArrayElement(i);
3914
- return Qnil;
3915
- }
3916
2349
 
3917
2350
  static VALUE g_Vertex_ptr;
3918
2351
  static VALUE g_Normal_ptr;
@@ -3933,10 +2366,15 @@ VALUE obj, arg1, arg2, arg3, arg4; \
3933
2366
  size = (GLint)NUM2INT(arg1); \
3934
2367
  type = (GLenum)NUM2INT(arg2); \
3935
2368
  stride = (GLsizei)NUM2UINT(arg3); \
3936
- Check_Type(arg4, T_STRING); \
3937
- rb_str_freeze(arg4); \
3938
- g_##_func_##_ptr = arg4; \
3939
- gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING(arg4)->ptr); \
2369
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) { \
2370
+ g_##_func_##_ptr = arg4; \
2371
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)NUM2INT(arg4)); \
2372
+ } else { \
2373
+ Check_Type(arg4, T_STRING); \
2374
+ rb_str_freeze(arg4); \
2375
+ g_##_func_##_ptr = arg4; \
2376
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING(arg4)->ptr); \
2377
+ } \
3940
2378
  return Qnil; \
3941
2379
  }
3942
2380
 
@@ -3946,16 +2384,6 @@ POINTER_FUNC(TexCoord)
3946
2384
 
3947
2385
  #undef POINTER_FUNC
3948
2386
 
3949
- static VALUE
3950
- gl_DisableClientState(obj,arg1)
3951
- VALUE obj,arg1;
3952
- {
3953
- GLenum cap;
3954
- cap = (GLenum)NUM2INT(arg1);
3955
- glDisableClientState(cap);
3956
- return Qnil;
3957
- }
3958
-
3959
2387
  static VALUE
3960
2388
  gl_DrawArrays(obj,arg1,arg2,arg3)
3961
2389
  VALUE obj,arg1,arg2,arg3;
@@ -3980,8 +2408,12 @@ VALUE obj,arg1,arg2,arg3,arg4;
3980
2408
  mode = (GLenum)NUM2INT(arg1);
3981
2409
  count = (GLsizei)NUM2UINT(arg2);
3982
2410
  type = (GLenum)NUM2INT(arg3);
3983
- Check_Type(arg4, T_STRING);
3984
- glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr);
2411
+ if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
2412
+ glDrawElements(mode, count, type, (const GLvoid*)NUM2INT(arg4));
2413
+ } else {
2414
+ Check_Type(arg4, T_STRING);
2415
+ glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr);
2416
+ }
3985
2417
  return Qnil;
3986
2418
  }
3987
2419
 
@@ -3991,20 +2423,15 @@ VALUE obj,arg1,arg2;
3991
2423
  {
3992
2424
  GLsizei stride;
3993
2425
  stride = (GLsizei)NUM2UINT(arg1);
3994
- Check_Type(arg2, T_STRING);
3995
- rb_str_freeze(arg2);
3996
- g_EdgeFlag_ptr = arg2;
3997
- glEdgeFlagPointer(stride, (const GLboolean*)RSTRING(arg2)->ptr);
3998
- return Qnil;
3999
- }
4000
-
4001
- static VALUE
4002
- gl_EnableClientState(obj,arg1)
4003
- VALUE obj,arg1;
4004
- {
4005
- GLenum cap;
4006
- cap = (GLenum)NUM2INT(arg1);
4007
- glEnableClientState(cap);
2426
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
2427
+ g_EdgeFlag_ptr = arg2;
2428
+ glEdgeFlagPointer(stride, (const GLboolean*) NUM2INT(arg2));
2429
+ } else {
2430
+ Check_Type(arg2, T_STRING);
2431
+ rb_str_freeze(arg2);
2432
+ g_EdgeFlag_ptr = arg2;
2433
+ glEdgeFlagPointer(stride, (const GLboolean*)RSTRING(arg2)->ptr);
2434
+ }
4008
2435
  return Qnil;
4009
2436
  }
4010
2437
 
@@ -4050,10 +2477,15 @@ VALUE obj,arg1,arg2,arg3;
4050
2477
  GLsizei stride;
4051
2478
  type = (GLenum)NUM2INT(arg1);
4052
2479
  stride = (GLsizei)NUM2UINT(arg2);
4053
- Check_Type(arg3, T_STRING);
4054
- rb_str_freeze(arg3);
4055
- g_Index_ptr = arg3;
4056
- glIndexPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
2480
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
2481
+ g_Index_ptr = arg3;
2482
+ glIndexPointer(type, stride, (const GLvoid*)NUM2INT(arg3));
2483
+ } else {
2484
+ Check_Type(arg3, T_STRING);
2485
+ rb_str_freeze(arg3);
2486
+ g_Index_ptr = arg3;
2487
+ glIndexPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
2488
+ }
4057
2489
  return Qnil;
4058
2490
  }
4059
2491
 
@@ -4066,6 +2498,7 @@ VALUE obj,arg1,arg2,arg3;
4066
2498
  format = (GLenum)NUM2INT(arg1);
4067
2499
  stride = (GLsizei)NUM2UINT(arg2);
4068
2500
  Check_Type(arg3, T_STRING);
2501
+ rb_str_freeze(arg3);
4069
2502
  glInterleavedArrays(format, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4070
2503
  return Qnil;
4071
2504
  }
@@ -4078,24 +2511,19 @@ VALUE obj,arg1,arg2,arg3;
4078
2511
  GLsizei stride;
4079
2512
  type = (GLenum)NUM2INT(arg1);
4080
2513
  stride = (GLsizei)NUM2UINT(arg2);
4081
- Check_Type(arg3, T_STRING);
4082
- rb_str_freeze(arg3);
4083
- g_Normal_ptr = arg3;
4084
- glNormalPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
2514
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
2515
+ g_Normal_ptr = arg3;
2516
+ glNormalPointer(type, stride, (const GLvoid*)NUM2INT(arg3));
2517
+ } else {
2518
+ Check_Type(arg3, T_STRING);
2519
+ rb_str_freeze(arg3);
2520
+ g_Normal_ptr = arg3;
2521
+ glNormalPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
2522
+ }
4085
2523
  return Qnil;
4086
2524
  }
4087
2525
 
4088
- static VALUE
4089
- gl_PolygonOffset(obj,arg1,arg2)
4090
- VALUE obj,arg1,arg2;
4091
- {
4092
- GLfloat factor;
4093
- GLfloat units;
4094
- factor = (GLfloat)NUM2DBL(arg1);
4095
- units = (GLfloat)NUM2DBL(arg2);
4096
- glPolygonOffset(factor,units);
4097
- return Qnil;
4098
- }
2526
+ GL_SIMPLE_FUNC(PolygonOffset,2,GLfloat,NUM2DBL)
4099
2527
 
4100
2528
  static VALUE
4101
2529
  gl_CopyTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
@@ -4197,37 +2625,22 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
4197
2625
  GLsizei width;
4198
2626
  GLenum format;
4199
2627
  GLenum type;
4200
- const char *pixels;
4201
- int size;
4202
- int type_size;
4203
- int format_size;
4204
2628
  target = (GLenum)NUM2INT(arg1);
4205
2629
  level = (GLint)NUM2INT(arg2);
4206
2630
  xoffset = (GLint)NUM2INT(arg3);
4207
2631
  width = (GLsizei)NUM2UINT(arg4);
4208
2632
  format = (GLenum)NUM2INT(arg5);
4209
2633
  type = (GLenum)NUM2INT(arg6);
4210
- type_size = gltype_size(type);
4211
- format_size = glformat_size(format);
4212
- if (type_size == -1 || format_size == -1)
4213
- return Qnil;
4214
2634
 
4215
- if (type==GL_BITMAP)
4216
- size = format_size*(width/8);
4217
- else
4218
- size = type_size*format_size*width;
4219
-
4220
- if (TYPE(arg7) == T_STRING) {
4221
- if (RSTRING(arg7)->len < size)
4222
- rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len);
4223
- pixels = RSTRING(arg7)->ptr;
4224
- } else if (TYPE(arg7) == T_FIXNUM || TYPE(arg7) == T_BIGNUM) { /* arg7 is offset to unpack buffer */
4225
- pixels = (const char *)NUM2UINT(arg7);
4226
- } else {
4227
- Check_Type(arg7,T_STRING); /* force exception */
2635
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
2636
+ glTexSubImage1D(target,level,xoffset,width,format,type,(GLvoid *)NUM2INT(arg7));
4228
2637
  return Qnil;
4229
2638
  }
4230
- glTexSubImage1D(target,level,xoffset,width,format,type,pixels);
2639
+
2640
+ Check_Type(arg7,T_STRING);
2641
+ CheckDataSize(type,format,width,arg7);
2642
+
2643
+ glTexSubImage1D(target,level,xoffset,width,format,type,RSTRING(arg7)->ptr);
4231
2644
  return Qnil;
4232
2645
  }
4233
2646
 
@@ -4243,10 +2656,6 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
4243
2656
  GLsizei height;
4244
2657
  GLenum format;
4245
2658
  GLenum type;
4246
- const char *pixels;
4247
- int size;
4248
- int type_size;
4249
- int format_size;
4250
2659
  target = (GLenum)NUM2INT(arg1);
4251
2660
  level = (GLint)NUM2INT(arg2);
4252
2661
  xoffset = (GLint)NUM2INT(arg3);
@@ -4255,25 +2664,16 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
4255
2664
  height = (GLsizei)NUM2UINT(arg6);
4256
2665
  format = (GLenum)NUM2INT(arg7);
4257
2666
  type = (GLenum)NUM2INT(arg8);
4258
- type_size = gltype_size(type);
4259
- format_size = glformat_size(format);
4260
- if (type_size == -1 || format_size == -1)
4261
- return Qnil;
4262
- if (type==GL_BITMAP)
4263
- size = format_size*((height*width)/8);
4264
- else
4265
- size = type_size*format_size*height*width;
4266
- if (TYPE(arg9) == T_STRING) {
4267
- if (RSTRING(arg9)->len < size)
4268
- rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
4269
- pixels = RSTRING(arg9)->ptr;
4270
- } else if (TYPE(arg9) == T_FIXNUM || TYPE(arg9) == T_BIGNUM) { /* arg9 is offset to unpack buffer */
4271
- pixels = (const char *)NUM2UINT(arg9);
4272
- } else {
4273
- Check_Type(arg9,T_STRING); /* force exception */
2667
+
2668
+ if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
2669
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,(GLvoid *)NUM2INT(arg9));
4274
2670
  return Qnil;
4275
2671
  }
4276
- glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
2672
+
2673
+ Check_Type(arg9,T_STRING);
2674
+ CheckDataSize(type,format,width*height,arg9);
2675
+
2676
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,(RSTRING(arg9)->ptr));
4277
2677
  return Qnil;
4278
2678
  }
4279
2679
 
@@ -4324,12 +2724,17 @@ VALUE obj,arg1;
4324
2724
  {
4325
2725
  GLsizei n;
4326
2726
  GLuint *textures;
4327
- Check_Type(arg1,T_ARRAY);
4328
- n = RARRAY(arg1)->len;
4329
- textures = ALLOC_N(GLuint,n);
4330
- ary2cuint(arg1,textures,n);
4331
- glDeleteTextures( n, textures);
4332
- xfree(textures);
2727
+ if (TYPE(arg1)==T_ARRAY) {
2728
+ n = RARRAY(arg1)->len;
2729
+ textures = ALLOC_N(GLuint,n);
2730
+ ary2cuint(arg1,textures,n);
2731
+ glDeleteTextures( n, textures);
2732
+ xfree(textures);
2733
+ } else {
2734
+ GLuint texture;
2735
+ texture = NUM2INT(arg1);
2736
+ glDeleteTextures( 1, &texture);
2737
+ }
4333
2738
  return Qnil;
4334
2739
  }
4335
2740
 
@@ -4383,16 +2788,6 @@ VALUE obj,arg1,arg2;
4383
2788
  return Qnil;
4384
2789
  }
4385
2790
 
4386
- static VALUE
4387
- gl_Indexub(obj,arg1)
4388
- VALUE obj,arg1;
4389
- {
4390
- GLubyte c;
4391
- c = (GLubyte)NUM2INT(arg1);
4392
- glIndexub(c);
4393
- return Qnil;
4394
- }
4395
-
4396
2791
  static VALUE
4397
2792
  gl_Indexubv(obj,arg1)
4398
2793
  VALUE obj,arg1;
@@ -4404,23 +2799,6 @@ VALUE obj,arg1;
4404
2799
  return Qnil;
4405
2800
  }
4406
2801
 
4407
- static VALUE
4408
- gl_PopClientAttrib(obj)
4409
- VALUE obj;
4410
- {
4411
- glPopClientAttrib();
4412
- return Qnil;
4413
- }
4414
-
4415
- static VALUE
4416
- gl_PushClientAttrib(obj,arg1)
4417
- VALUE obj,arg1;
4418
- {
4419
- GLbitfield mask;
4420
- mask = (GLbitfield)NUM2UINT(arg1);
4421
- glPushClientAttrib(mask);
4422
- return Qnil;
4423
- }
4424
2802
 
4425
2803
  /* additional functions */
4426
2804
 
@@ -4995,12 +3373,12 @@ void gl_init_functions_1_0__1_1(VALUE module)
4995
3373
  rb_define_module_function(module, "glPixelTransferi", gl_PixelTransferi, 2);
4996
3374
  rb_define_module_function(module, "glPixelStoref", gl_PixelStoref, 2);
4997
3375
  rb_define_module_function(module, "glPixelStorei", gl_PixelStorei, 2);
4998
- rb_define_module_function(module, "glPixelMapfv", gl_PixelMapfv, 2);
4999
- rb_define_module_function(module, "glPixelMapuiv", gl_PixelMapuiv, 2);
5000
- rb_define_module_function(module, "glPixelMapusv", gl_PixelMapusv, 2);
3376
+ rb_define_module_function(module, "glPixelMapfv", gl_PixelMapfv, -1);
3377
+ rb_define_module_function(module, "glPixelMapuiv", gl_PixelMapuiv, -1);
3378
+ rb_define_module_function(module, "glPixelMapusv", gl_PixelMapusv, -1);
5001
3379
  rb_define_module_function(module, "glReadBuffer", gl_ReadBuffer, 1);
5002
3380
  rb_define_module_function(module, "glCopyPixels", gl_CopyPixels, 5);
5003
- rb_define_module_function(module, "glReadPixels", gl_ReadPixels, 6);
3381
+ rb_define_module_function(module, "glReadPixels", gl_ReadPixels, -1);
5004
3382
  rb_define_module_function(module, "glDrawPixels", gl_DrawPixels, 5);
5005
3383
  rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv, 1);
5006
3384
  rb_define_module_function(module, "glGetClipPlane", gl_GetClipPlane, 1);
@@ -5015,17 +3393,17 @@ void gl_init_functions_1_0__1_1(VALUE module)
5015
3393
  rb_define_module_function(module, "glGetMapiv", gl_GetMapiv, 2);
5016
3394
  rb_define_module_function(module, "glGetMaterialfv", gl_GetMaterialfv, 2);
5017
3395
  rb_define_module_function(module, "glGetMaterialiv", gl_GetMaterialiv, 2);
5018
- rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, 1);
5019
- rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, 1);
5020
- rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, 1);
5021
- rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, 0);
3396
+ rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, -1);
3397
+ rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, -1);
3398
+ rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, -1);
3399
+ rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, -1);
5022
3400
  rb_define_module_function(module, "glGetString", gl_GetString, 1);
5023
3401
  rb_define_module_function(module, "glGetTexEnvfv", gl_GetTexEnvfv, 2);
5024
3402
  rb_define_module_function(module, "glGetTexEnviv", gl_GetTexEnviv, 2);
5025
3403
  rb_define_module_function(module, "glGetTexGendv", gl_GetTexGendv, 2);
5026
3404
  rb_define_module_function(module, "glGetTexGenfv", gl_GetTexGenfv, 2);
5027
3405
  rb_define_module_function(module, "glGetTexGeniv", gl_GetTexGeniv, 2);
5028
- rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, 4);
3406
+ rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, -1);
5029
3407
  rb_define_module_function(module, "glGetTexParameterfv", gl_GetTexParameterfv, 2);
5030
3408
  rb_define_module_function(module, "glGetTexParameteriv", gl_GetTexParameteriv, 2);
5031
3409
  rb_define_module_function(module, "glGetTexLevelParameterfv", gl_GetTexLevelParameterfv, 3);