ruby-opengl 0.50.0 → 0.60.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/Rakefile +15 -11
  2. data/doc/build_install.txt +10 -6
  3. data/doc/extensions.txt.in +348 -0
  4. data/doc/history.txt +4 -0
  5. data/doc/roadmap.txt +4 -6
  6. data/doc/scientific_use.txt +7 -0
  7. data/doc/supplies/page_template.html +2 -1
  8. data/doc/thanks.txt +5 -0
  9. data/doc/tutorial.txt +431 -121
  10. data/examples/NeHe/nehe_lesson02.rb +1 -1
  11. data/examples/NeHe/nehe_lesson03.rb +1 -1
  12. data/examples/NeHe/nehe_lesson04.rb +1 -1
  13. data/examples/NeHe/nehe_lesson05.rb +1 -1
  14. data/examples/NeHe/nehe_lesson36.rb +1 -1
  15. data/examples/OrangeBook/brick.rb +3 -15
  16. data/examples/OrangeBook/particle.rb +2 -20
  17. data/examples/RedBook/aapoly.rb +1 -1
  18. data/examples/RedBook/aargb.rb +2 -2
  19. data/examples/RedBook/accanti.rb +1 -1
  20. data/examples/RedBook/accpersp.rb +1 -1
  21. data/examples/RedBook/alpha.rb +2 -2
  22. data/examples/RedBook/alpha3D.rb +1 -1
  23. data/examples/RedBook/bezcurve.rb +1 -1
  24. data/examples/RedBook/bezmesh.rb +1 -1
  25. data/examples/RedBook/checker.rb +1 -1
  26. data/examples/RedBook/clip.rb +1 -1
  27. data/examples/RedBook/colormat.rb +1 -1
  28. data/examples/RedBook/cube.rb +1 -1
  29. data/examples/RedBook/depthcue.rb +1 -1
  30. data/examples/RedBook/dof.rb +1 -1
  31. data/examples/RedBook/double.rb +1 -1
  32. data/examples/RedBook/drawf.rb +1 -1
  33. data/examples/RedBook/feedback.rb +1 -1
  34. data/examples/RedBook/fog.rb +1 -1
  35. data/examples/RedBook/font.rb +2 -2
  36. data/examples/RedBook/hello.rb +1 -1
  37. data/examples/RedBook/image.rb +4 -4
  38. data/examples/RedBook/lines.rb +1 -1
  39. data/examples/RedBook/list.rb +1 -1
  40. data/examples/RedBook/material.rb +1 -1
  41. data/examples/RedBook/mipmap.rb +1 -1
  42. data/examples/RedBook/model.rb +1 -1
  43. data/examples/RedBook/movelight.rb +1 -1
  44. data/examples/RedBook/pickdepth.rb +1 -1
  45. data/examples/RedBook/planet.rb +5 -5
  46. data/examples/RedBook/quadric.rb +1 -1
  47. data/examples/RedBook/robot.rb +5 -5
  48. data/examples/RedBook/select.rb +1 -1
  49. data/examples/RedBook/smooth.rb +1 -1
  50. data/examples/RedBook/stencil.rb +1 -1
  51. data/examples/RedBook/stroke.rb +2 -2
  52. data/examples/RedBook/surface.rb +1 -1
  53. data/examples/RedBook/teaambient.rb +1 -1
  54. data/examples/RedBook/teapots.rb +1 -1
  55. data/examples/RedBook/tess.rb +1 -1
  56. data/examples/RedBook/texbind.rb +1 -1
  57. data/examples/RedBook/texgen.rb +5 -5
  58. data/examples/RedBook/texturesurf.rb +1 -1
  59. data/examples/RedBook/varray.rb +1 -1
  60. data/examples/RedBook/wrap.rb +5 -5
  61. data/examples/misc/OGLBench.rb +337 -0
  62. data/examples/misc/anisotropic.rb +1 -1
  63. data/examples/misc/fbo_test.rb +356 -0
  64. data/examples/misc/font-glut.rb +1 -1
  65. data/examples/misc/glfwtest.rb +30 -0
  66. data/examples/misc/md2model.rb +15 -0
  67. data/examples/misc/plane.rb +1 -1
  68. data/examples/misc/readpixel.rb +1 -1
  69. data/examples/misc/sdltest.rb +34 -0
  70. data/examples/misc/trislam.rb +828 -0
  71. data/ext/common/common.h +126 -218
  72. data/ext/common/conv.h +244 -0
  73. data/ext/common/funcdef.h +280 -0
  74. data/ext/common/gl-error.h +23 -0
  75. data/ext/common/gl-types.h +14 -0
  76. data/ext/gl/gl-1.0-1.1.c +497 -1255
  77. data/ext/gl/gl-1.2.c +121 -304
  78. data/ext/gl/gl-1.3.c +78 -339
  79. data/ext/gl/gl-1.4.c +102 -164
  80. data/ext/gl/gl-1.5.c +42 -173
  81. data/ext/gl/gl-2.0.c +273 -1039
  82. data/ext/gl/gl-2.1.c +15 -19
  83. data/ext/gl/gl-enums.c +3 -2
  84. data/ext/gl/gl-error.c +104 -0
  85. data/ext/gl/gl-ext-3dfx.c +27 -0
  86. data/ext/gl/gl-ext-arb.c +812 -12
  87. data/ext/gl/gl-ext-ati.c +41 -0
  88. data/ext/gl/gl-ext-ext.c +791 -119
  89. data/ext/gl/gl-ext-gremedy.c +41 -0
  90. data/ext/gl/gl-ext-nv.c +679 -0
  91. data/ext/gl/gl.c +48 -28
  92. data/ext/gl/mkrf_conf.rb +13 -10
  93. data/ext/glu/glu-enums.c +3 -2
  94. data/ext/glu/glu.c +136 -41
  95. data/ext/glu/mkrf_conf.rb +15 -12
  96. data/ext/glut/glut.c +37 -80
  97. data/ext/glut/mkrf_conf.rb +17 -13
  98. data/lib/opengl.rb +29 -53
  99. data/test/tc_common.rb +9 -3
  100. data/test/tc_ext_arb.rb +397 -3
  101. data/test/tc_ext_ati.rb +33 -0
  102. data/test/tc_ext_ext.rb +479 -2
  103. data/test/tc_ext_gremedy.rb +36 -0
  104. data/test/tc_ext_nv.rb +357 -0
  105. data/test/tc_func_10_11.rb +93 -67
  106. data/test/tc_func_12.rb +11 -11
  107. data/test/tc_func_13.rb +38 -18
  108. data/test/tc_func_14.rb +2 -2
  109. data/test/tc_func_15.rb +10 -10
  110. data/test/tc_func_20.rb +20 -20
  111. data/test/tc_func_21.rb +53 -22
  112. data/test/tc_glu.rb +9 -4
  113. data/test/tc_misc.rb +15 -2
  114. metadata +22 -8
  115. data/doc/extensions.txt +0 -361
  116. data/examples/RedBook/aaindex.rb +0 -97
  117. data/examples/misc/smooth.rb +0 -42
  118. data/examples/misc/test.rb +0 -65
@@ -0,0 +1,280 @@
1
+ /*
2
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
3
+ *
4
+ * This program is distributed under the terms of the MIT license.
5
+ * See the included MIT-LICENSE file for the terms of this license.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
10
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
11
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
12
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
13
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ */
15
+
16
+ /* These macros are for simplification of function definition, as passing
17
+ arguments from/to OpenGL usually follows the same few patterns. It would
18
+ be probably wise to adapt the whole bindings to C++ (templates, overloaded
19
+ functions, etc.), but for now supporting ruby extension for Windows means
20
+ MSVC6, and that in turn means unspeakable horrors and pains for everyone
21
+ attempting to merely write, much less debug or maintain any template-based
22
+ code.
23
+ */
24
+
25
+ /* Will load function pointer for function _NAME_ on first call to the
26
+ function, or raise if the OpenGL version is less then required or the
27
+ required extension is not supported */
28
+ #define LOAD_GL_FUNC(_NAME_,_VEREXT_) \
29
+ if (fptr_##_NAME_==NULL) { \
30
+ if (CheckVersionExtension(_VEREXT_)==GL_FALSE) { \
31
+ if (isdigit(_VEREXT_[0])) \
32
+ rb_raise(rb_eNotImpError,"OpenGL version %s is not available on this system",_VEREXT_); \
33
+ else \
34
+ rb_raise(rb_eNotImpError,"Extension %s is not available on this system",_VEREXT_); \
35
+ } \
36
+ fptr_##_NAME_ = load_gl_function(#_NAME_, 1); \
37
+ }
38
+
39
+ /* Macroset for defining simple functions, i.e. functions that take n arguments and
40
+ pass them to GL API function without any additional processing.
41
+
42
+ Some checking is implicit in _conversion_ argument - e.g. NUM2INT makes sure that
43
+ user is really passing type that can be converted to INT, otherwire raises.
44
+
45
+ *_LOAD version of macros are for defining functions where we load function pointer
46
+ instead of direct call - that means all functions above OpenGL 1.1 (including all extensions)
47
+ */
48
+
49
+ #define ARGLIST0
50
+ #define ARGLIST1 ,arg1
51
+ #define ARGLIST2 ,arg1,arg2
52
+ #define ARGLIST3 ,arg1,arg2,arg3
53
+ #define ARGLIST4 ,arg1,arg2,arg3,arg4
54
+ #define ARGLIST5 ,arg1,arg2,arg3,arg4,arg5
55
+ #define ARGLIST6 ,arg1,arg2,arg3,arg4,arg5,arg6
56
+ #define ARGLIST7 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7
57
+ #define ARGLIST8 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8
58
+ #define ARGLIST9 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9
59
+ #define ARGLIST10 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10
60
+
61
+ #define CONV_GLenum (GLenum)NUM2UINT
62
+ #define CONV_GLboolean (GLboolean)NUM2UINT
63
+ #define CONV_GLbitfield (GLbitfield)NUM2UINT
64
+ #define CONV_GLbyte (GLbyte)NUM2INT
65
+ #define CONV_GLshort (GLshort)NUM2INT
66
+ #define CONV_GLint (GLint)NUM2INT
67
+ #define CONV_GLubyte (GLubyte)NUM2UINT
68
+ #define CONV_GLushort (GLushort)NUM2UINT
69
+ #define CONV_GLuint (GLuint)NUM2UINT
70
+ #define CONV_GLsizei (GLsizei)NUM2INT
71
+ #define CONV_GLfloat (GLfloat)NUM2DBL
72
+ #define CONV_GLclampf (GLclampf)NUM2DBL
73
+ #define CONV_GLdouble (GLdouble)NUM2DBL
74
+ #define CONV_GLclampd (GLclampd)NUM2DBL
75
+
76
+ #define RETDECL_BASE(_t_) _t_ ret = (_t_) 0;
77
+ #define RETDECL_GLvoid
78
+ #define RETDECL_void
79
+ #define RETDECL_GLenum RETDECL_BASE(GLenum)
80
+ #define RETDECL_GLboolean RETDECL_BASE(GLboolean)
81
+ #define RETDECL_GLbitfield RETDECL_BASE(GLbitfield)
82
+ #define RETDECL_GLbyte RETDECL_BASE(GLbyte)
83
+ #define RETDECL_GLshort RETDECL_BASE(GLshort)
84
+ #define RETDECL_GLint RETDECL_BASE(GLint)
85
+ #define RETDECL_GLubyte RETDECL_BASE(GLubyte)
86
+ #define RETDECL_GLushort RETDECL_BASE(GLushort)
87
+ #define RETDECL_GLuint RETDECL_BASE(GLuint)
88
+ #define RETDECL_GLsizei RETDECL_BASE(GLsizei)
89
+ #define RETDECL_GLfloat RETDECL_BASE(GLfloat)
90
+ #define RETDECL_GLclampf RETDECL_BASE(GLclampf)
91
+ #define RETDECL_GLdouble RETDECL_BASE(GLdouble)
92
+ #define RETDECL_GLclampd RETDECL_BASE(GLclampd)
93
+
94
+ #define RETSTAT_GLvoid
95
+ #define RETSTAT_void
96
+ #define RETSTAT_GLenum ret=
97
+ #define RETSTAT_GLboolean ret=
98
+ #define RETSTAT_GLbitfield ret=
99
+ #define RETSTAT_GLbyte ret=
100
+ #define RETSTAT_GLshort ret=
101
+ #define RETSTAT_GLint ret=
102
+ #define RETSTAT_GLubyte ret=
103
+ #define RETSTAT_GLushort ret=
104
+ #define RETSTAT_GLuint ret=
105
+ #define RETSTAT_GLsizei ret=
106
+ #define RETSTAT_GLfloat ret=
107
+ #define RETSTAT_GLclampf ret=
108
+ #define RETSTAT_GLdouble ret=
109
+ #define RETSTAT_GLclampd ret=
110
+
111
+ #define RETCONV_GLvoid(x) Qnil
112
+ #define RETCONV_void(x) Qnil
113
+ #define RETCONV_GLenum(x) UINT2NUM(x)
114
+ #define RETCONV_GLboolean(x) GLBOOL2RUBY(x)
115
+ #define RETCONV_GLbitfield(x) UINT2NUM(x)
116
+ #define RETCONV_GLbyte(x) INT2NUM(x)
117
+ #define RETCONV_GLshort(x) INT2NUM(x)
118
+ #define RETCONV_GLint(x) INT2NUM(x)
119
+ #define RETCONV_GLubyte(x) UINT2NUM(x)
120
+ #define RETCONV_GLushort(x) UINT2NUM(x)
121
+ #define RETCONV_GLuint(x) UINT2NUM(x)
122
+ #define RETCONV_GLsizei(x) INT2NUM(x)
123
+ #define RETCONV_GLfloat(x) rb_float_new(x)
124
+ #define RETCONV_GLclampf(x) rb_float_new(x)
125
+ #define RETCONV_GLdouble(x) rb_float_new(x)
126
+ #define RETCONV_GLclampd(x) rb_float_new(x)
127
+
128
+ #define PROTOPARAM0(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) void
129
+ #define PROTOPARAM1(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1
130
+ #define PROTOPARAM2(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2
131
+ #define PROTOPARAM3(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3
132
+ #define PROTOPARAM4(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4
133
+ #define PROTOPARAM5(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5
134
+ #define PROTOPARAM6(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6
135
+ #define PROTOPARAM7(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7
136
+ #define PROTOPARAM8(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7,p8
137
+ #define PROTOPARAM9(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7,p8,p9
138
+ #define PROTOPARAM10(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
139
+
140
+ #define CALLCONV0(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10)
141
+ #define CALLCONV1(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1)
142
+ #define CALLCONV2(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2)
143
+ #define CALLCONV3(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3)
144
+ #define CALLCONV4(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4)
145
+ #define CALLCONV5(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5)
146
+ #define CALLCONV6(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6)
147
+ #define CALLCONV7(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7)
148
+ #define CALLCONV8(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8)
149
+ #define CALLCONV9(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8),CONV_##cv9(arg9)
150
+ #define CALLCONV10(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8),CONV_##cv9(arg9),CONV_##cv10(arg10)
151
+
152
+ #define GL_FUNC_LOAD(_num_,_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_) \
153
+ static _returntype_ (APIENTRY * fptr_gl##_name_)(PROTOPARAM##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
154
+ static VALUE \
155
+ gl_##_name_(obj ARGLIST##_num_) \
156
+ VALUE obj ARGLIST##_num_; \
157
+ { \
158
+ RETDECL_##_returntype_ \
159
+ LOAD_GL_FUNC(gl##_name_,_ver_) \
160
+ RETSTAT_##_returntype_ fptr_gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
161
+ CHECK_GLERROR \
162
+ return RETCONV_##_returntype_(ret) ; \
163
+ }
164
+
165
+ #define GL_FUNC_STATIC(_num_,_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10) \
166
+ static VALUE \
167
+ gl_##_name_(obj ARGLIST##_num_) \
168
+ VALUE obj ARGLIST##_num_; \
169
+ { \
170
+ RETDECL_##_returntype_ \
171
+ RETSTAT_##_returntype_ gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
172
+ CHECK_GLERROR \
173
+ return RETCONV_##_returntype_(ret) ; \
174
+ }
175
+
176
+ #define GL_FUNC_LOAD_0(_name_,_returntype_,_ver_) GL_FUNC_LOAD(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0,_ver_)
177
+ #define GL_FUNC_LOAD_1(_name_,_returntype_,targ1,_ver_) GL_FUNC_LOAD(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0,_ver_)
178
+ #define GL_FUNC_LOAD_2(_name_,_returntype_,targ1,targ2,_ver_) GL_FUNC_LOAD(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0,_ver_)
179
+ #define GL_FUNC_LOAD_3(_name_,_returntype_,targ1,targ2,targ3,_ver_) GL_FUNC_LOAD(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0,_ver_)
180
+ #define GL_FUNC_LOAD_4(_name_,_returntype_,targ1,targ2,targ3,targ4,_ver_) GL_FUNC_LOAD(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0,_ver_)
181
+ #define GL_FUNC_LOAD_5(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,_ver_) GL_FUNC_LOAD(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0,_ver_)
182
+ #define GL_FUNC_LOAD_6(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,_ver_) GL_FUNC_LOAD(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0,_ver_)
183
+ #define GL_FUNC_LOAD_7(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,_ver_) GL_FUNC_LOAD(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0,_ver_)
184
+ #define GL_FUNC_LOAD_8(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,_ver_) GL_FUNC_LOAD(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0,_ver_)
185
+ #define GL_FUNC_LOAD_9(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,_ver_) GL_FUNC_LOAD(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0,_ver_)
186
+ #define GL_FUNC_LOAD_10(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_) GL_FUNC_LOAD(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_)
187
+
188
+ #define GL_FUNC_STATIC_0(_name_,_returntype_) GL_FUNC_STATIC(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0)
189
+ #define GL_FUNC_STATIC_1(_name_,_returntype_,targ1) GL_FUNC_STATIC(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0)
190
+ #define GL_FUNC_STATIC_2(_name_,_returntype_,targ1,targ2) GL_FUNC_STATIC(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0)
191
+ #define GL_FUNC_STATIC_3(_name_,_returntype_,targ1,targ2,targ3) GL_FUNC_STATIC(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0)
192
+ #define GL_FUNC_STATIC_4(_name_,_returntype_,targ1,targ2,targ3,targ4) GL_FUNC_STATIC(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0)
193
+ #define GL_FUNC_STATIC_5(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5) GL_FUNC_STATIC(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0)
194
+ #define GL_FUNC_STATIC_6(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6) GL_FUNC_STATIC(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0)
195
+ #define GL_FUNC_STATIC_7(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7) GL_FUNC_STATIC(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0)
196
+ #define GL_FUNC_STATIC_8(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8) GL_FUNC_STATIC(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0)
197
+ #define GL_FUNC_STATIC_9(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9) GL_FUNC_STATIC(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0)
198
+ #define GL_FUNC_STATIC_10(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10_ver_) GL_FUNC_STATIC(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)
199
+
200
+ /* Templates for glGen* and glDelete* */
201
+
202
+ #define GL_FUNC_GENOBJECTS_LOAD(_name_,_ver_) \
203
+ static void (APIENTRY * fptr_gl##_name_)(GLsizei,GLuint *); \
204
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
205
+ { \
206
+ GLsizei n; \
207
+ GLuint *objects; \
208
+ VALUE ret; \
209
+ unsigned int i; \
210
+ LOAD_GL_FUNC(gl##_name_,_ver_) \
211
+ n = CONV_GLsizei(arg1); \
212
+ objects = ALLOC_N(GLuint, n); \
213
+ fptr_gl##_name_(n,objects); \
214
+ ret = rb_ary_new2(n); \
215
+ for (i = 0; i < n; i++) \
216
+ rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
217
+ xfree(objects); \
218
+ CHECK_GLERROR \
219
+ return ret; \
220
+ }
221
+
222
+ #define GL_FUNC_GENOBJECTS(_name_) \
223
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
224
+ { \
225
+ GLsizei n; \
226
+ GLuint *objects; \
227
+ VALUE ret; \
228
+ unsigned int i; \
229
+ n = CONV_GLsizei(arg1); \
230
+ objects = ALLOC_N(GLuint, n); \
231
+ gl##_name_(n,objects); \
232
+ ret = rb_ary_new2(n); \
233
+ for (i = 0; i < n; i++) \
234
+ rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
235
+ xfree(objects); \
236
+ CHECK_GLERROR \
237
+ return ret; \
238
+ }
239
+
240
+ #define GL_FUNC_DELETEOBJECTS_LOAD(_name_,_ver_) \
241
+ static void (APIENTRY * fptr_gl##_name_)(GLsizei,const GLuint *); \
242
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
243
+ { \
244
+ GLsizei n; \
245
+ LOAD_GL_FUNC(gl##_name_,_ver_) \
246
+ if (TYPE(arg1)==T_ARRAY) { \
247
+ GLuint *objects; \
248
+ n = RARRAY(arg1)->len; \
249
+ objects = ALLOC_N(GLuint,n); \
250
+ ary2cuint(arg1,objects,n); \
251
+ fptr_gl##_name_(n,objects); \
252
+ xfree(objects); \
253
+ } else { \
254
+ GLuint object; \
255
+ object = CONV_GLsizei(arg1); \
256
+ fptr_gl##_name_(1,&object); \
257
+ } \
258
+ CHECK_GLERROR \
259
+ return Qnil; \
260
+ }
261
+
262
+ #define GL_FUNC_DELETEOBJECTS(_name_) \
263
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
264
+ { \
265
+ GLsizei n; \
266
+ if (TYPE(arg1)==T_ARRAY) { \
267
+ GLuint *objects; \
268
+ n = RARRAY(arg1)->len; \
269
+ objects = ALLOC_N(GLuint,n); \
270
+ ary2cuint(arg1,objects,n); \
271
+ gl##_name_(n,objects); \
272
+ xfree(objects); \
273
+ } else { \
274
+ GLuint object; \
275
+ object = CONV_GLsizei(arg1); \
276
+ gl##_name_(1,&object); \
277
+ } \
278
+ CHECK_GLERROR \
279
+ return Qnil; \
280
+ }
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
3
+ *
4
+ * This program is distributed under the terms of the MIT license.
5
+ * See the included MIT-LICENSE file for the terms of this license.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
10
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
11
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
12
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
13
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ */
15
+
16
+ void gl_init_error(VALUE);
17
+
18
+ extern VALUE error_checking;
19
+ extern VALUE inside_begin_end;
20
+
21
+ void check_for_glerror(void);
22
+
23
+ #define CHECK_GLERROR if (error_checking==Qtrue && inside_begin_end==Qfalse) check_for_glerror();
@@ -16,6 +16,15 @@
16
16
  /* GL types - define if system GLheaders are not recent
17
17
  Note: must be included before gl-enums.h */
18
18
 
19
+ #if defined(_WIN32) && defined(__GNUC__)
20
+ #include <stdint.h>
21
+ #elif defined(_WIN32)
22
+ typedef __int64 int64_t;
23
+ typedef unsigned __int64 uint64_t;
24
+ #else
25
+ #include <inttypes.h>
26
+ #endif
27
+
19
28
  /* GL base */
20
29
  #ifndef GL_VERSION_1_5
21
30
  typedef ptrdiff_t GLintptr;
@@ -45,3 +54,8 @@ typedef ptrdiff_t GLsizeiptrARB;
45
54
  #ifndef GL_NV_half_float
46
55
  typedef unsigned short GLhalfNV;
47
56
  #endif
57
+
58
+ #ifndef GL_EXT_timer_query
59
+ typedef int64_t GLint64EXT;
60
+ typedef uint64_t GLuint64EXT;
61
+ #endif
@@ -23,192 +23,222 @@
23
23
 
24
24
  /* OpenGL 1.0 + 1.1 functions */
25
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
-
167
- static VALUE
168
- gl_NewList(obj,arg1,arg2)
169
- VALUE obj,arg1,arg2;
26
+ GL_FUNC_STATIC_2(Accum,GLvoid, GLenum,GLfloat)
27
+ GL_FUNC_STATIC_2(AlphaFunc,GLvoid, GLenum,GLclampf)
28
+ GL_FUNC_STATIC_1(ArrayElement,GLvoid, GLint)
29
+ GL_FUNC_STATIC_2(BindTexture,GLvoid, GLenum,GLuint)
30
+ GL_FUNC_STATIC_2(BlendFunc,GLvoid, GLenum,GLenum)
31
+ GL_FUNC_STATIC_1(CallList,GLvoid, GLuint)
32
+ GL_FUNC_STATIC_1(Clear,GLvoid, GLbitfield)
33
+ GL_FUNC_STATIC_4(ClearAccum,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
34
+ GL_FUNC_STATIC_4(ClearColor,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
35
+ GL_FUNC_STATIC_1(ClearDepth,GLvoid, GLclampd)
36
+ GL_FUNC_STATIC_1(ClearIndex,GLvoid, GLfloat)
37
+ GL_FUNC_STATIC_1(ClearStencil,GLvoid, GLint)
38
+ GL_FUNC_STATIC_3(Color3b,GLvoid, GLbyte,GLbyte,GLbyte)
39
+ GL_FUNC_STATIC_3(Color3d,GLvoid, GLdouble,GLdouble,GLdouble)
40
+ GL_FUNC_STATIC_3(Color3f,GLvoid, GLfloat,GLfloat,GLfloat)
41
+ GL_FUNC_STATIC_3(Color3i,GLvoid, GLint,GLint,GLint)
42
+ GL_FUNC_STATIC_3(Color3s,GLvoid, GLshort,GLshort,GLshort)
43
+ GL_FUNC_STATIC_3(Color3ub,GLvoid, GLubyte,GLubyte,GLubyte)
44
+ GL_FUNC_STATIC_3(Color3ui,GLvoid, GLuint,GLuint,GLuint)
45
+ GL_FUNC_STATIC_3(Color3us,GLvoid, GLushort,GLushort,GLushort)
46
+ GL_FUNC_STATIC_4(Color4b,GLvoid, GLbyte,GLbyte,GLbyte,GLbyte)
47
+ GL_FUNC_STATIC_4(Color4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
48
+ GL_FUNC_STATIC_4(Color4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
49
+ GL_FUNC_STATIC_4(Color4i,GLvoid, GLint,GLint,GLint,GLint)
50
+ GL_FUNC_STATIC_4(Color4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
51
+ GL_FUNC_STATIC_4(Color4ub,GLvoid, GLubyte,GLubyte,GLubyte,GLubyte)
52
+ GL_FUNC_STATIC_4(Color4ui,GLvoid, GLuint,GLuint,GLuint,GLuint)
53
+ GL_FUNC_STATIC_4(Color4us,GLvoid, GLushort,GLushort,GLushort,GLushort)
54
+ GL_FUNC_STATIC_4(ColorMask,GLvoid, GLboolean,GLboolean,GLboolean,GLboolean)
55
+ GL_FUNC_STATIC_2(ColorMaterial,GLvoid, GLenum,GLenum)
56
+ GL_FUNC_STATIC_5(CopyPixels,GLvoid, GLint,GLint,GLsizei,GLsizei,GLenum)
57
+ GL_FUNC_STATIC_7(CopyTexImage1D,GLvoid, GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint)
58
+ GL_FUNC_STATIC_8(CopyTexImage2D,GLvoid, GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint)
59
+ GL_FUNC_STATIC_6(CopyTexSubImage1D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLsizei)
60
+ GL_FUNC_STATIC_8(CopyTexSubImage2D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei)
61
+ GL_FUNC_STATIC_1(CullFace,GLvoid, GLenum)
62
+ GL_FUNC_STATIC_2(DeleteLists,GLvoid, GLuint,GLuint)
63
+ GL_FUNC_STATIC_1(DepthFunc,GLvoid, GLenum)
64
+ GL_FUNC_STATIC_1(DepthMask,GLvoid, GLboolean)
65
+ GL_FUNC_STATIC_2(DepthRange,GLvoid, GLclampd,GLclampd)
66
+ GL_FUNC_STATIC_1(Disable,GLvoid, GLenum)
67
+ GL_FUNC_STATIC_1(DisableClientState,GLvoid, GLenum)
68
+ GL_FUNC_STATIC_3(DrawArrays,GLvoid, GLenum,GLint,GLsizei)
69
+ GL_FUNC_STATIC_1(DrawBuffer,GLvoid, GLenum)
70
+ GL_FUNC_STATIC_1(EdgeFlag,GLvoid, GLboolean)
71
+ GL_FUNC_STATIC_1(Enable,GLvoid, GLenum)
72
+ GL_FUNC_STATIC_1(EnableClientState,GLvoid, GLenum)
73
+ GL_FUNC_STATIC_0(EndList,GLvoid)
74
+ GL_FUNC_STATIC_1(EvalCoord1d,GLvoid, GLdouble)
75
+ GL_FUNC_STATIC_1(EvalCoord1f,GLvoid, GLfloat)
76
+ GL_FUNC_STATIC_2(EvalCoord2d,GLvoid, GLdouble,GLdouble)
77
+ GL_FUNC_STATIC_2(EvalCoord2f,GLvoid, GLfloat,GLfloat)
78
+ GL_FUNC_STATIC_3(EvalMesh1,GLvoid, GLenum,GLint,GLint)
79
+ GL_FUNC_STATIC_5(EvalMesh2,GLvoid, GLenum,GLint,GLint,GLint,GLint)
80
+ GL_FUNC_STATIC_1(EvalPoint1,GLvoid, GLint)
81
+ GL_FUNC_STATIC_2(EvalPoint2,GLvoid, GLint,GLint)
82
+ GL_FUNC_STATIC_0(Finish,GLvoid)
83
+ GL_FUNC_STATIC_0(Flush,GLvoid)
84
+ GL_FUNC_STATIC_2(Fogi,GLvoid, GLenum,GLint)
85
+ GL_FUNC_STATIC_2(Fogf,GLvoid, GLenum,GLfloat)
86
+ GL_FUNC_STATIC_1(FrontFace,GLvoid, GLenum)
87
+ GL_FUNC_STATIC_6(Frustum,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble)
88
+ GL_FUNC_STATIC_1(GenLists,GLuint, GLsizei)
89
+ GL_FUNC_STATIC_0(GetError,GLenum)
90
+ GL_FUNC_STATIC_2(Hint,GLvoid, GLenum,GLenum)
91
+ GL_FUNC_STATIC_1(Indexd,GLvoid, GLdouble)
92
+ GL_FUNC_STATIC_1(Indexf,GLvoid, GLfloat)
93
+ GL_FUNC_STATIC_1(Indexi,GLvoid, GLint)
94
+ GL_FUNC_STATIC_1(IndexMask,GLvoid, GLuint)
95
+ GL_FUNC_STATIC_1(Indexs,GLvoid, GLshort)
96
+ GL_FUNC_STATIC_1(Indexub,GLvoid, GLubyte)
97
+ GL_FUNC_STATIC_0(InitNames,GLvoid)
98
+ GL_FUNC_STATIC_1(IsEnabled,GLboolean, GLenum)
99
+ GL_FUNC_STATIC_1(IsList,GLboolean, GLuint)
100
+ GL_FUNC_STATIC_1(IsTexture,GLboolean, GLuint)
101
+ GL_FUNC_STATIC_2(LightModelf,GLvoid, GLenum,GLfloat)
102
+ GL_FUNC_STATIC_2(LightModeli,GLvoid, GLenum,GLint)
103
+ GL_FUNC_STATIC_3(Lightf,GLvoid, GLenum,GLenum,GLfloat)
104
+ GL_FUNC_STATIC_3(Lighti,GLvoid, GLenum,GLenum,GLint)
105
+ GL_FUNC_STATIC_2(LineStipple,GLvoid, GLint,GLushort)
106
+ GL_FUNC_STATIC_1(LineWidth,GLvoid, GLfloat)
107
+ GL_FUNC_STATIC_1(ListBase,GLvoid, GLuint)
108
+ GL_FUNC_STATIC_0(LoadIdentity,GLvoid)
109
+ GL_FUNC_STATIC_1(LoadName,GLvoid, GLuint)
110
+ GL_FUNC_STATIC_1(LogicOp,GLvoid, GLenum)
111
+ GL_FUNC_STATIC_3(MapGrid1d,GLvoid, GLint,GLdouble,GLdouble)
112
+ GL_FUNC_STATIC_3(MapGrid1f,GLvoid, GLint,GLfloat,GLfloat)
113
+ GL_FUNC_STATIC_6(MapGrid2d,GLvoid, GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble)
114
+ GL_FUNC_STATIC_6(MapGrid2f,GLvoid, GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat)
115
+ GL_FUNC_STATIC_3(Materialf,GLvoid, GLenum,GLenum,GLfloat)
116
+ GL_FUNC_STATIC_3(Materiali,GLvoid, GLenum,GLenum,GLint)
117
+ GL_FUNC_STATIC_1(MatrixMode,GLvoid, GLenum)
118
+ GL_FUNC_STATIC_2(NewList,GLvoid, GLuint,GLenum)
119
+ GL_FUNC_STATIC_3(Normal3b,GLvoid, GLbyte,GLbyte,GLbyte)
120
+ GL_FUNC_STATIC_3(Normal3d,GLvoid, GLdouble,GLdouble,GLdouble)
121
+ GL_FUNC_STATIC_3(Normal3f,GLvoid, GLfloat,GLfloat,GLfloat)
122
+ GL_FUNC_STATIC_3(Normal3i,GLvoid, GLint,GLint,GLint)
123
+ GL_FUNC_STATIC_3(Normal3s,GLvoid, GLshort,GLshort,GLshort)
124
+ GL_FUNC_STATIC_6(Ortho,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble)
125
+ GL_FUNC_STATIC_1(PassThrough,GLvoid, GLfloat)
126
+ GL_FUNC_STATIC_2(PixelStoref,GLvoid, GLenum,GLfloat)
127
+ GL_FUNC_STATIC_2(PixelStorei,GLvoid, GLenum,GLint)
128
+ GL_FUNC_STATIC_2(PixelTransferf,GLvoid, GLenum,GLfloat)
129
+ GL_FUNC_STATIC_2(PixelTransferi,GLvoid, GLenum,GLint)
130
+ GL_FUNC_STATIC_2(PixelZoom,GLvoid, GLfloat,GLfloat)
131
+ GL_FUNC_STATIC_1(PointSize,GLvoid, GLfloat)
132
+ GL_FUNC_STATIC_2(PolygonMode,GLvoid, GLenum,GLenum)
133
+ GL_FUNC_STATIC_2(PolygonOffset,GLvoid, GLfloat,GLfloat)
134
+ GL_FUNC_STATIC_0(PopAttrib,GLvoid)
135
+ GL_FUNC_STATIC_0(PopClientAttrib,GLvoid)
136
+ GL_FUNC_STATIC_0(PopMatrix,GLvoid)
137
+ GL_FUNC_STATIC_0(PopName,GLvoid)
138
+ GL_FUNC_STATIC_1(PushAttrib,GLvoid, GLbitfield)
139
+ GL_FUNC_STATIC_1(PushClientAttrib,GLvoid, GLbitfield)
140
+ GL_FUNC_STATIC_0(PushMatrix,GLvoid)
141
+ GL_FUNC_STATIC_1(PushName,GLvoid, GLuint)
142
+ GL_FUNC_STATIC_2(RasterPos2d,GLvoid, GLdouble,GLdouble)
143
+ GL_FUNC_STATIC_2(RasterPos2f,GLvoid, GLfloat,GLfloat)
144
+ GL_FUNC_STATIC_2(RasterPos2i,GLvoid, GLint,GLint)
145
+ GL_FUNC_STATIC_2(RasterPos2s,GLvoid, GLshort,GLshort)
146
+ GL_FUNC_STATIC_3(RasterPos3d,GLvoid, GLdouble,GLdouble,GLdouble)
147
+ GL_FUNC_STATIC_3(RasterPos3f,GLvoid, GLfloat,GLfloat,GLfloat)
148
+ GL_FUNC_STATIC_3(RasterPos3i,GLvoid, GLint,GLint,GLint)
149
+ GL_FUNC_STATIC_3(RasterPos3s,GLvoid, GLshort,GLshort,GLshort)
150
+ GL_FUNC_STATIC_4(RasterPos4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
151
+ GL_FUNC_STATIC_4(RasterPos4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
152
+ GL_FUNC_STATIC_4(RasterPos4i,GLvoid, GLint,GLint,GLint,GLint)
153
+ GL_FUNC_STATIC_4(RasterPos4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
154
+ GL_FUNC_STATIC_1(ReadBuffer,GLvoid, GLenum)
155
+ GL_FUNC_STATIC_4(Rectd,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
156
+ GL_FUNC_STATIC_4(Rectf,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
157
+ GL_FUNC_STATIC_4(Recti,GLvoid, GLint,GLint,GLint,GLint)
158
+ GL_FUNC_STATIC_4(Rects,GLvoid, GLshort,GLshort,GLshort,GLshort)
159
+ GL_FUNC_STATIC_1(RenderMode,GLint, GLenum)
160
+ GL_FUNC_STATIC_4(Rotated,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
161
+ GL_FUNC_STATIC_4(Rotatef,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
162
+ GL_FUNC_STATIC_3(Scaled,GLvoid, GLdouble,GLdouble,GLdouble)
163
+ GL_FUNC_STATIC_3(Scalef,GLvoid, GLdouble,GLdouble,GLdouble)
164
+ GL_FUNC_STATIC_4(Scissor,GLvoid, GLint,GLint,GLint,GLint)
165
+ GL_FUNC_STATIC_1(ShadeModel,GLvoid, GLenum)
166
+ GL_FUNC_STATIC_3(StencilFunc,GLvoid, GLenum,GLint,GLuint)
167
+ GL_FUNC_STATIC_1(StencilMask,GLvoid, GLuint)
168
+ GL_FUNC_STATIC_3(StencilOp,GLvoid, GLenum,GLenum,GLenum)
169
+ GL_FUNC_STATIC_1(TexCoord1d,GLvoid, GLdouble)
170
+ GL_FUNC_STATIC_1(TexCoord1f,GLvoid, GLfloat)
171
+ GL_FUNC_STATIC_1(TexCoord1i,GLvoid, GLint)
172
+ GL_FUNC_STATIC_1(TexCoord1s,GLvoid, GLshort)
173
+ GL_FUNC_STATIC_2(TexCoord2d,GLvoid, GLdouble,GLdouble)
174
+ GL_FUNC_STATIC_2(TexCoord2f,GLvoid, GLfloat,GLfloat)
175
+ GL_FUNC_STATIC_2(TexCoord2i,GLvoid, GLint,GLint)
176
+ GL_FUNC_STATIC_2(TexCoord2s,GLvoid, GLshort,GLshort)
177
+ GL_FUNC_STATIC_3(TexCoord3d,GLvoid, GLdouble,GLdouble,GLdouble)
178
+ GL_FUNC_STATIC_3(TexCoord3f,GLvoid, GLfloat,GLfloat,GLfloat)
179
+ GL_FUNC_STATIC_3(TexCoord3i,GLvoid, GLint,GLint,GLint)
180
+ GL_FUNC_STATIC_3(TexCoord3s,GLvoid, GLshort,GLshort,GLshort)
181
+ GL_FUNC_STATIC_4(TexCoord4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
182
+ GL_FUNC_STATIC_4(TexCoord4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
183
+ GL_FUNC_STATIC_4(TexCoord4i,GLvoid, GLint,GLint,GLint,GLint)
184
+ GL_FUNC_STATIC_4(TexCoord4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
185
+ GL_FUNC_STATIC_3(TexEnvf,GLvoid, GLenum,GLenum,GLfloat)
186
+ GL_FUNC_STATIC_3(TexEnvi,GLvoid, GLenum,GLenum,GLint)
187
+ GL_FUNC_STATIC_3(TexGend,GLvoid, GLenum,GLenum,GLdouble)
188
+ GL_FUNC_STATIC_3(TexGenf,GLvoid, GLenum,GLenum,GLfloat)
189
+ GL_FUNC_STATIC_3(TexGeni,GLvoid, GLenum,GLenum,GLint)
190
+ GL_FUNC_STATIC_3(TexParameterf,GLvoid, GLenum,GLenum,GLfloat)
191
+ GL_FUNC_STATIC_3(TexParameteri,GLvoid, GLenum,GLenum,GLint)
192
+ GL_FUNC_STATIC_3(Translated,GLvoid, GLdouble,GLdouble,GLdouble)
193
+ GL_FUNC_STATIC_3(Translatef,GLvoid, GLdouble,GLdouble,GLdouble)
194
+ GL_FUNC_STATIC_2(Vertex2d,GLvoid, GLdouble,GLdouble)
195
+ GL_FUNC_STATIC_2(Vertex2f,GLvoid, GLfloat,GLfloat)
196
+ GL_FUNC_STATIC_2(Vertex2i,GLvoid, GLint,GLint)
197
+ GL_FUNC_STATIC_2(Vertex2s,GLvoid, GLshort,GLshort)
198
+ GL_FUNC_STATIC_3(Vertex3d,GLvoid, GLdouble,GLdouble,GLdouble)
199
+ GL_FUNC_STATIC_3(Vertex3f,GLvoid, GLfloat,GLfloat,GLfloat)
200
+ GL_FUNC_STATIC_3(Vertex3i,GLvoid, GLint,GLint,GLint)
201
+ GL_FUNC_STATIC_3(Vertex3s,GLvoid, GLshort,GLshort,GLshort)
202
+ GL_FUNC_STATIC_4(Vertex4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
203
+ GL_FUNC_STATIC_4(Vertex4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
204
+ GL_FUNC_STATIC_4(Vertex4i,GLvoid, GLint,GLint,GLint,GLint)
205
+ GL_FUNC_STATIC_4(Vertex4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
206
+ GL_FUNC_STATIC_4(Viewport,GLvoid, GLuint,GLuint,GLuint,GLuint)
207
+
208
+ VALUE inside_begin_end = Qfalse;
209
+
210
+ static VALUE
211
+ gl_Begin(obj,arg1)
212
+ VALUE obj,arg1;
170
213
  {
171
- GLuint list;
172
- GLenum mode;
173
- list = (GLuint)NUM2UINT(arg1);
174
- mode = (GLenum)NUM2INT(arg2);
175
- glNewList(list,mode);
176
- return Qnil;
214
+ glBegin(CONV_GLenum(arg1));
215
+ inside_begin_end = Qtrue;
216
+ return Qnil;
177
217
  }
178
218
 
179
219
  static VALUE
180
- gl_CallLists(obj,arg1)
181
- VALUE obj,arg1;
220
+ gl_End(obj)
221
+ VALUE obj;
182
222
  {
183
- GLsizei n;
184
- GLenum type;
185
- GLvoid *lists;
186
- if (TYPE(arg1) == T_STRING) {
187
- type = GL_BYTE;
188
- lists = RSTRING(arg1)->ptr;
189
- n = RSTRING(arg1)->len;
190
- } else if (TYPE(arg1) == T_ARRAY) {
191
- type = GL_INT;
192
- lists = ALLOC_N(GLint, RARRAY(arg1)->len);
193
- n = ary2cint(arg1,lists,0);
194
- } else {
195
- Check_Type(arg1,T_ARRAY); /* force exception */
196
- return Qnil; /* not reached */
197
- }
198
- glCallLists(n, type, lists);
199
- if (type == GL_INT) xfree(lists);
200
- return Qnil;
223
+ inside_begin_end = Qfalse;
224
+ glEnd();
225
+ CHECK_GLERROR
226
+ return Qnil;
201
227
  }
202
228
 
203
229
  static VALUE
204
- gl_GenLists(obj,arg1)
205
- VALUE obj,arg1;
230
+ gl_CallLists(obj,arg1,arg2)
231
+ VALUE obj,arg1,arg2;
206
232
  {
207
- GLsizei range;
208
- GLuint ret;
209
- range = (GLsizei)NUM2UINT(arg1);
210
- ret = glGenLists(range);
211
- return INT2NUM(ret);
233
+ GLsizei n;
234
+ GLenum type;
235
+ VALUE lists;
236
+ type = CONV_GLenum(arg1);
237
+ lists = pack_array_or_pass_string(type,arg2);
238
+ n = RSTRING_LEN(lists) / gltype_glformat_unit_size(type,1);
239
+ glCallLists(n, type, RSTRING_PTR(lists));
240
+ CHECK_GLERROR
241
+ return Qnil;
212
242
  }
213
243
 
214
244
  static VALUE
@@ -230,15 +260,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
230
260
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
231
261
  glBitmap(width, height, xorig, yorig, xmove, ymove, (GLvoid *)NUM2INT(arg7));
232
262
  } else {
233
- const GLubyte *bitmap;
234
- Check_Type(arg7,T_STRING);
263
+ VALUE data;
264
+ data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg7);
235
265
 
236
- if (RSTRING(arg7)->len < (width * height / 8))
237
- rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
266
+ if ((RSTRING_LEN(data)*8) < (width * height))
267
+ rb_raise(rb_eArgError, "string length:%li", RSTRING_LEN(data));
238
268
 
239
- bitmap = (const GLubyte*)RSTRING(arg7)->ptr;
240
- glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
269
+ glBitmap(width, height, xorig, yorig, xmove, ymove, (const GLubyte *)RSTRING_PTR(data));
241
270
  }
271
+ CHECK_GLERROR
242
272
  return Qnil;
243
273
  }
244
274
 
@@ -250,6 +280,7 @@ VALUE obj,arg1;
250
280
  Check_Type(arg1,T_ARRAY);
251
281
  ary2cboolean(arg1,flag,1);
252
282
  glEdgeFlagv(flag);
283
+ CHECK_GLERROR
253
284
  return Qnil;
254
285
  }
255
286
 
@@ -261,6 +292,7 @@ VALUE obj,arg1;
261
292
  Check_Type(arg1,T_ARRAY);
262
293
  ary2cdbl(arg1,c,1);
263
294
  glIndexdv(c);
295
+ CHECK_GLERROR
264
296
  return Qnil;
265
297
  }
266
298
 
@@ -272,6 +304,7 @@ VALUE obj,arg1;
272
304
  Check_Type(arg1,T_ARRAY);
273
305
  ary2cflt(arg1,c,1);
274
306
  glIndexfv(c);
307
+ CHECK_GLERROR
275
308
  return Qnil;
276
309
  }
277
310
 
@@ -283,6 +316,7 @@ VALUE obj,arg1;
283
316
  Check_Type(arg1,T_ARRAY);
284
317
  ary2cint(arg1,c,1);
285
318
  glIndexiv(c);
319
+ CHECK_GLERROR
286
320
  return Qnil;
287
321
  }
288
322
 
@@ -294,6 +328,7 @@ VALUE obj,arg1;
294
328
  Check_Type(arg1,T_ARRAY);
295
329
  ary2cshort(arg1,c,1);
296
330
  glIndexsv(c);
331
+ CHECK_GLERROR
297
332
  return Qnil;
298
333
  }
299
334
 
@@ -307,18 +342,7 @@ VALUE obj,arg1,arg2;
307
342
  Check_Type(arg2,T_ARRAY);
308
343
  ary2cdbl(arg2, equation, 4);
309
344
  glClipPlane(plane,equation);
310
- return Qnil;
311
- }
312
-
313
- static VALUE
314
- gl_Fogf(obj,arg1,arg2)
315
- VALUE obj,arg1,arg2;
316
- {
317
- GLenum pname;
318
- GLfloat param;
319
- pname = (GLenum)NUM2INT(arg1);
320
- param = (GLfloat)NUM2DBL(arg2);
321
- glFogf(pname,param);
345
+ CHECK_GLERROR
322
346
  return Qnil;
323
347
  }
324
348
 
@@ -332,18 +356,7 @@ VALUE obj,arg1,arg2;
332
356
  Check_Type(arg2,T_ARRAY);
333
357
  ary2cflt(arg2,params,4);
334
358
  glFogfv(pname,params);
335
- return Qnil;
336
- }
337
-
338
- static VALUE
339
- gl_Fogi(obj,arg1,arg2)
340
- VALUE obj,arg1,arg2;
341
- {
342
- GLenum pname;
343
- GLint param;
344
- pname = (GLenum)NUM2INT(arg1);
345
- param = (GLint)NUM2INT(arg2);
346
- glFogi(pname,param);
359
+ CHECK_GLERROR
347
360
  return Qnil;
348
361
  }
349
362
 
@@ -357,20 +370,7 @@ VALUE obj,arg1,arg2;
357
370
  Check_Type(arg2,T_ARRAY);
358
371
  ary2cint(arg2,params,4);
359
372
  glFogiv(pname,params);
360
- return Qnil;
361
- }
362
-
363
- static VALUE
364
- gl_Lightf(obj,arg1,arg2,arg3)
365
- VALUE obj,arg1,arg2,arg3;
366
- {
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);
373
+ CHECK_GLERROR
374
374
  return Qnil;
375
375
  }
376
376
 
@@ -386,20 +386,7 @@ VALUE obj,arg1,arg2,arg3;
386
386
  Check_Type(arg3,T_ARRAY);
387
387
  ary2cflt(arg3,params,4);
388
388
  glLightfv(light,pname,params);
389
- return Qnil;
390
- }
391
-
392
- static VALUE
393
- gl_Lighti(obj,arg1,arg2,arg3)
394
- VALUE obj,arg1,arg2,arg3;
395
- {
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);
389
+ CHECK_GLERROR
403
390
  return Qnil;
404
391
  }
405
392
 
@@ -415,18 +402,7 @@ VALUE obj,arg1,arg2,arg3;
415
402
  Check_Type(arg3,T_ARRAY);
416
403
  ary2cint(arg3,params,4);
417
404
  glLightiv(light,pname,params);
418
- return Qnil;
419
- }
420
-
421
- static VALUE
422
- gl_LightModelf(obj,arg1,arg2)
423
- VALUE obj,arg1,arg2;
424
- {
425
- GLenum pname;
426
- GLfloat param;
427
- pname = (GLenum)NUM2INT(arg1);
428
- param = (GLfloat)NUM2DBL(arg2);
429
- glLightModelf(pname,param);
405
+ CHECK_GLERROR
430
406
  return Qnil;
431
407
  }
432
408
 
@@ -440,18 +416,7 @@ VALUE obj,arg1,arg2;
440
416
  Check_Type(arg2,T_ARRAY);
441
417
  ary2cflt(arg2,params,4);
442
418
  glLightModelfv(pname,params);
443
- return Qnil;
444
- }
445
-
446
- static VALUE
447
- gl_LightModeli(obj,arg1,arg2)
448
- VALUE obj,arg1,arg2;
449
- {
450
- GLenum pname;
451
- GLint param;
452
- pname = (GLenum)NUM2INT(arg1);
453
- param = (GLint)NUM2INT(arg2);
454
- glLightModeli(pname,param);
419
+ CHECK_GLERROR
455
420
  return Qnil;
456
421
  }
457
422
 
@@ -465,34 +430,10 @@ VALUE obj,arg1,arg2;
465
430
  Check_Type(arg2,T_ARRAY);
466
431
  ary2cint(arg2,params,4);
467
432
  glLightModeliv(pname,params);
433
+ CHECK_GLERROR
468
434
  return Qnil;
469
435
  }
470
436
 
471
- static VALUE
472
- gl_LineStipple(obj,arg1,arg2)
473
- VALUE obj,arg1,arg2;
474
- {
475
- GLint factor;
476
- GLushort pattern;
477
- factor = (GLint)NUM2INT(arg1);
478
- pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF);
479
- glLineStipple(factor,pattern);
480
- return Qnil;
481
- }
482
-
483
- static VALUE
484
- gl_Materialf(obj,arg1,arg2,arg3)
485
- VALUE obj,arg1,arg2,arg3;
486
- {
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);
494
- return Qnil;
495
- }
496
437
 
497
438
  static VALUE
498
439
  gl_Materialfv(obj,arg1,arg2,arg3)
@@ -506,20 +447,7 @@ VALUE obj,arg1,arg2,arg3;
506
447
  Check_Type(arg3,T_ARRAY);
507
448
  ary2cflt(arg3,params,4);
508
449
  glMaterialfv(face,pname,params);
509
- return Qnil;
510
- }
511
-
512
- static VALUE
513
- gl_Materiali(obj,arg1,arg2,arg3)
514
- VALUE obj,arg1,arg2,arg3;
515
- {
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);
450
+ CHECK_GLERROR
523
451
  return Qnil;
524
452
  }
525
453
 
@@ -535,6 +463,7 @@ VALUE obj,arg1,arg2,arg3;
535
463
  Check_Type(arg3,T_ARRAY);
536
464
  ary2cint(arg3,params,4);
537
465
  glMaterialiv(face,pname,params);
466
+ CHECK_GLERROR
538
467
  return Qnil;
539
468
  }
540
469
 
@@ -542,40 +471,20 @@ static VALUE
542
471
  gl_PolygonStipple(obj,arg1)
543
472
  VALUE obj,arg1;
544
473
  {
545
- GLubyte mask[128];
546
-
547
474
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
548
475
  glPolygonStipple((GLvoid *)NUM2INT(arg1));
549
476
  } 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);
477
+ VALUE data;
478
+ data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg1);
479
+ if (RSTRING_LEN(data) < 128)
480
+ rb_raise(rb_eArgError, "string length:%li", RSTRING_LEN(data));
481
+
482
+ glPolygonStipple((GLubyte *)RSTRING_PTR(data));
562
483
  }
484
+ CHECK_GLERROR
563
485
  return Qnil;
564
486
  }
565
487
 
566
- static VALUE
567
- gl_TexParameterf(obj,arg1,arg2,arg3)
568
- VALUE obj,arg1,arg2,arg3;
569
- {
570
- GLenum target;
571
- GLenum pname;
572
- GLfloat param;
573
- target = (GLenum)NUM2INT(arg1);
574
- pname = (GLenum)NUM2INT(arg2);
575
- param = (GLfloat)NUM2DBL(arg3);
576
- glTexParameterf(target,pname,param);
577
- return Qnil;
578
- }
579
488
 
580
489
  static VALUE
581
490
  gl_TexParameterfv(obj,arg1,arg2,arg3)
@@ -589,20 +498,7 @@ VALUE obj,arg1,arg2,arg3;
589
498
  Check_Type(arg3,T_ARRAY);
590
499
  ary2cflt(arg3,params,4);
591
500
  glTexParameterfv(target,pname,params);
592
- return Qnil;
593
- }
594
-
595
- static VALUE
596
- gl_TexParameteri(obj,arg1,arg2,arg3)
597
- VALUE obj,arg1,arg2,arg3;
598
- {
599
- GLenum target;
600
- GLenum pname;
601
- GLint param;
602
- target = (GLenum)NUM2INT(arg1);
603
- pname = (GLenum)NUM2INT(arg2);
604
- param = (GLint)NUM2INT(arg3);
605
- glTexParameteri(target,pname,param);
501
+ CHECK_GLERROR
606
502
  return Qnil;
607
503
  }
608
504
 
@@ -618,6 +514,7 @@ VALUE obj,arg1,arg2,arg3;
618
514
  Check_Type(arg3,T_ARRAY);
619
515
  ary2cint(arg3,params,4);
620
516
  glTexParameteriv(target,pname,params);
517
+ CHECK_GLERROR
621
518
  return Qnil;
622
519
  }
623
520
 
@@ -643,17 +540,20 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
643
540
 
644
541
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
645
542
  glTexImage1D(target,level,components,width,border,format,type,(GLvoid *)NUM2INT(arg8));
543
+ CHECK_GLERROR
646
544
  return Qnil;
647
545
  }
648
546
 
649
547
  if (target == GL_PROXY_TEXTURE_1D || NIL_P(arg8)) { /* proxy texture, no data read */
650
548
  pixels = NULL;
651
549
  } else {
652
- Check_Type(arg8,T_STRING);
653
- CheckDataSize(type,format,width,arg8);
654
- pixels = RSTRING(arg8)->ptr;
550
+ VALUE data;
551
+ data = pack_array_or_pass_string(type,arg8);
552
+ CheckDataSize(type,format,width,data);
553
+ pixels = RSTRING_PTR(data);
655
554
  }
656
555
  glTexImage1D(target,level,components,width,border,format,type,pixels);
556
+ CHECK_GLERROR
657
557
  return Qnil;
658
558
  }
659
559
 
@@ -681,31 +581,20 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
681
581
 
682
582
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
683
583
  glTexImage2D(target,level,components,width,height,border,format,type,(GLvoid *)NUM2INT(arg9));
584
+ CHECK_GLERROR
684
585
  return Qnil;
685
586
  }
686
587
 
687
588
  if (target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_1D_ARRAY_EXT || target == GL_PROXY_TEXTURE_CUBE_MAP || NIL_P(arg9)) { /* proxy texture, no data read */
688
589
  pixels = NULL;
689
590
  } else {
690
- Check_Type(arg9,T_STRING);
691
- CheckDataSize(type,format,width*height,arg9);
692
- pixels = RSTRING(arg9)->ptr;
591
+ VALUE data;
592
+ data = pack_array_or_pass_string(type,arg9);
593
+ CheckDataSize(type,format,width*height,data);
594
+ pixels = RSTRING_PTR(data);
693
595
  }
694
596
  glTexImage2D(target,level,components,width,height,border,format,type,pixels);
695
- return Qnil;
696
- }
697
-
698
- static VALUE
699
- gl_TexEnvf(obj,arg1,arg2,arg3)
700
- VALUE obj,arg1,arg2,arg3;
701
- {
702
- GLenum target;
703
- GLenum pname;
704
- GLfloat param;
705
- target = (GLenum)NUM2INT(arg1);
706
- pname = (GLenum)NUM2INT(arg2);
707
- param = (GLfloat)NUM2DBL(arg3);
708
- glTexEnvf(target,pname,param);
597
+ CHECK_GLERROR
709
598
  return Qnil;
710
599
  }
711
600
 
@@ -721,20 +610,7 @@ VALUE obj,arg1,arg2,arg3;
721
610
  Check_Type(arg3,T_ARRAY);
722
611
  ary2cflt(arg3,params,4);
723
612
  glTexEnvfv(target,pname,params);
724
- return Qnil;
725
- }
726
-
727
- static VALUE
728
- gl_TexEnvi(obj,arg1,arg2,arg3)
729
- VALUE obj,arg1,arg2,arg3;
730
- {
731
- GLenum target;
732
- GLenum pname;
733
- GLint param;
734
- target = (GLenum)NUM2INT(arg1);
735
- pname = (GLenum)NUM2INT(arg2);
736
- param = (GLint)NUM2INT(arg3);
737
- glTexEnvi(target,pname,param);
613
+ CHECK_GLERROR
738
614
  return Qnil;
739
615
  }
740
616
 
@@ -750,22 +626,10 @@ VALUE obj,arg1,arg2,arg3;
750
626
  Check_Type(arg3,T_ARRAY);
751
627
  ary2cint(arg3,params,4);
752
628
  glTexEnviv(target,pname,params);
629
+ CHECK_GLERROR
753
630
  return Qnil;
754
631
  }
755
632
 
756
- static VALUE
757
- gl_TexGend(obj,arg1,arg2,arg3)
758
- VALUE obj,arg1,arg2,arg3;
759
- {
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);
767
- return Qnil;
768
- }
769
633
 
770
634
  static VALUE
771
635
  gl_TexGendv(obj,arg1,arg2,arg3)
@@ -779,24 +643,11 @@ VALUE obj,arg1,arg2,arg3;
779
643
  Check_Type(arg3,T_ARRAY);
780
644
  ary2cdbl(arg3,params,4);
781
645
  glTexGendv(coord,pname,params);
646
+ CHECK_GLERROR
782
647
  return Qnil;
783
648
  }
784
649
 
785
650
 
786
- static VALUE
787
- gl_TexGenf(obj,arg1,arg2,arg3)
788
- VALUE obj,arg1,arg2,arg3;
789
- {
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);
797
- return Qnil;
798
- }
799
-
800
651
  static VALUE
801
652
  gl_TexGenfv(obj,arg1,arg2,arg3)
802
653
  VALUE obj,arg1,arg2,arg3;
@@ -809,22 +660,10 @@ VALUE obj,arg1,arg2,arg3;
809
660
  Check_Type(arg3,T_ARRAY);
810
661
  ary2cflt(arg3,params,4);
811
662
  glTexGenfv(coord,pname,params);
663
+ CHECK_GLERROR
812
664
  return Qnil;
813
665
  }
814
666
 
815
- static VALUE
816
- gl_TexGeni(obj,arg1,arg2,arg3)
817
- VALUE obj,arg1,arg2,arg3;
818
- {
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);
826
- return Qnil;
827
- }
828
667
 
829
668
  static VALUE
830
669
  gl_TexGeniv(obj,arg1,arg2,arg3)
@@ -838,6 +677,7 @@ VALUE obj,arg1,arg2,arg3;
838
677
  Check_Type(arg3,T_ARRAY);
839
678
  ary2cint(arg3,params,4);
840
679
  glTexGeniv(coord,pname,params);
680
+ CHECK_GLERROR
841
681
  return Qnil;
842
682
  }
843
683
  static VALUE g_current_feed_buffer;
@@ -851,7 +691,8 @@ VALUE obj,arg1,arg2;
851
691
  type = (GLenum)NUM2INT(arg2);
852
692
  g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
853
693
  rb_str_freeze(g_current_feed_buffer);
854
- glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr);
694
+ glFeedbackBuffer(size, type, (GLfloat*)RSTRING_PTR(g_current_feed_buffer));
695
+ CHECK_GLERROR
855
696
  return g_current_feed_buffer;
856
697
  }
857
698
 
@@ -864,32 +705,11 @@ VALUE obj,arg1;
864
705
  size = (GLsizei)NUM2UINT(arg1);
865
706
  g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
866
707
  rb_str_freeze(g_current_sel_buffer);
867
- glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr);
708
+ glSelectBuffer(size, (GLuint*)RSTRING_PTR(g_current_sel_buffer));
709
+ CHECK_GLERROR
868
710
  return g_current_sel_buffer;
869
711
  }
870
712
 
871
- static VALUE
872
- gl_RenderMode(obj,arg1)
873
- VALUE obj,arg1;
874
- {
875
- GLenum mode;
876
- GLint ret;
877
- mode = (GLenum)NUM2INT(arg1);
878
- ret = glRenderMode(mode);
879
- return INT2NUM(ret);
880
- }
881
-
882
- static VALUE
883
- gl_Accum(obj,arg1,arg2)
884
- VALUE obj,arg1,arg2;
885
- {
886
- GLenum op;
887
- GLfloat value;
888
- op = (GLenum)NUM2INT(arg1);
889
- value = (GLfloat)NUM2DBL(arg2);
890
- glAccum(op,value);
891
- return Qnil;
892
- }
893
713
 
894
714
  static VALUE
895
715
  gl_Map1d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
@@ -910,11 +730,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
910
730
  stride = (GLint)NUM2INT(arg4);
911
731
  order = (GLint)NUM2INT(arg5);
912
732
  points = ALLOC_N(GLdouble, order*stride);
913
- work_ary = rb_ary_new();
914
- mary2ary(arg6, work_ary);
733
+ work_ary = rb_funcall(arg6,rb_intern("flatten"),0);
915
734
  ary2cdbl(work_ary, points, order*stride);
916
735
  glMap1d(target, u1, u2, stride, order, points);
917
736
  xfree(points);
737
+ CHECK_GLERROR
918
738
  return Qnil;
919
739
  }
920
740
 
@@ -937,11 +757,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
937
757
  stride = (GLint)NUM2INT(arg4);
938
758
  order = (GLint)NUM2INT(arg5);
939
759
  points = ALLOC_N(GLfloat, order*stride);
940
- work_ary = rb_ary_new();
941
- mary2ary(arg6, work_ary);
760
+ work_ary = rb_funcall(arg6,rb_intern("flatten"),0);
942
761
  ary2cflt(work_ary, points, order*stride);
943
762
  glMap1f(target, u1, u2, stride, order, points);
944
763
  xfree(points);
764
+ CHECK_GLERROR
945
765
  return Qnil;
946
766
  }
947
767
 
@@ -972,11 +792,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
972
792
  vstride = (GLint)NUM2INT(arg8);
973
793
  vorder = (GLint)NUM2INT(arg9);
974
794
  points = ALLOC_N(GLdouble, MAX(ustride*uorder, vstride*vorder));
975
- work_ary = rb_ary_new();
976
- mary2ary(arg10, work_ary);
977
- ary2cdbl(arg10, points, MAX(ustride*uorder, vstride*vorder));
795
+ work_ary = rb_funcall(arg10,rb_intern("flatten"),0);
796
+ ary2cdbl(work_ary, points, MAX(ustride*uorder, vstride*vorder));
978
797
  glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
979
798
  xfree(points);
799
+ CHECK_GLERROR
980
800
  return Qnil;
981
801
  }
982
802
 
@@ -1007,79 +827,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
1007
827
  vstride = (GLint)NUM2INT(arg8);
1008
828
  vorder = (GLint)NUM2INT(arg9);
1009
829
  points = ALLOC_N(GLfloat, MAX(ustride*uorder, vstride*vorder));
1010
- work_ary = rb_ary_new();
1011
- mary2ary(arg10, work_ary);
1012
- ary2cflt(arg10, points, MAX(ustride*uorder, vstride*vorder));
830
+ work_ary = rb_funcall(arg10,rb_intern("flatten"),0);
831
+ ary2cflt(work_ary, points, MAX(ustride*uorder, vstride*vorder));
1013
832
  glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
1014
833
  xfree(points);
1015
- return Qnil;
1016
- }
1017
-
1018
- static VALUE
1019
- gl_MapGrid1d(obj,arg1,arg2,arg3)
1020
- VALUE obj,arg1,arg2,arg3;
1021
- {
1022
- GLint un;
1023
- GLdouble u1;
1024
- GLdouble u2;
1025
- un = (GLint)NUM2INT(arg1);
1026
- u1 = (GLdouble)NUM2DBL(arg2);
1027
- u2 = (GLdouble)NUM2DBL(arg3);
1028
- glMapGrid1d(un,u1,u2);
1029
- return Qnil;
1030
- }
1031
-
1032
- static VALUE
1033
- gl_MapGrid1f(obj,arg1,arg2,arg3)
1034
- VALUE obj,arg1,arg2,arg3;
1035
- {
1036
- GLint un;
1037
- GLfloat u1;
1038
- GLfloat u2;
1039
- un = (GLint)NUM2INT(arg1);
1040
- u1 = (GLfloat)NUM2DBL(arg2);
1041
- u2 = (GLfloat)NUM2DBL(arg3);
1042
- glMapGrid1f(un,u1,u2);
1043
- return Qnil;
1044
- }
1045
-
1046
- static VALUE
1047
- gl_MapGrid2d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
1048
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
1049
- {
1050
- GLint un;
1051
- GLdouble u1;
1052
- GLdouble u2;
1053
- GLint vn;
1054
- GLdouble v1;
1055
- GLdouble v2;
1056
- un = (GLint)NUM2INT(arg1);
1057
- u1 = (GLdouble)NUM2DBL(arg2);
1058
- u2 = (GLdouble)NUM2DBL(arg3);
1059
- vn = (GLint)NUM2INT(arg4);
1060
- v1 = (GLdouble)NUM2DBL(arg5);
1061
- v2 = (GLdouble)NUM2DBL(arg6);
1062
- glMapGrid2d(un,u1,u2,vn,v1,v2);
1063
- return Qnil;
1064
- }
1065
-
1066
- static VALUE
1067
- gl_MapGrid2f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
1068
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
1069
- {
1070
- GLint un;
1071
- GLfloat u1;
1072
- GLfloat u2;
1073
- GLint vn;
1074
- GLfloat v1;
1075
- GLfloat v2;
1076
- un = (GLint)NUM2INT(arg1);
1077
- u1 = (GLfloat)NUM2DBL(arg2);
1078
- u2 = (GLfloat)NUM2DBL(arg3);
1079
- vn = (GLint)NUM2INT(arg4);
1080
- v1 = (GLfloat)NUM2DBL(arg5);
1081
- v2 = (GLfloat)NUM2DBL(arg6);
1082
- glMapGrid2f(un,u1,u2,vn,v1,v2);
834
+ CHECK_GLERROR
1083
835
  return Qnil;
1084
836
  }
1085
837
 
@@ -1091,6 +843,7 @@ VALUE obj,arg1;
1091
843
  Check_Type(arg1,T_ARRAY);
1092
844
  ary2cdbl(arg1,params,1);
1093
845
  glEvalCoord1dv(params);
846
+ CHECK_GLERROR
1094
847
  return Qnil;
1095
848
  }
1096
849
 
@@ -1102,6 +855,7 @@ VALUE obj,arg1;
1102
855
  Check_Type(arg1,T_ARRAY);
1103
856
  ary2cflt(arg1,params,1);
1104
857
  glEvalCoord1fv(params);
858
+ CHECK_GLERROR
1105
859
  return Qnil;
1106
860
  }
1107
861
 
@@ -1113,6 +867,7 @@ VALUE obj,arg1;
1113
867
  Check_Type(arg1,T_ARRAY);
1114
868
  ary2cdbl(arg1,params,2);
1115
869
  glEvalCoord2dv(params);
870
+ CHECK_GLERROR
1116
871
  return Qnil;
1117
872
  }
1118
873
 
@@ -1124,114 +879,10 @@ VALUE obj,arg1;
1124
879
  Check_Type(arg1,T_ARRAY);
1125
880
  ary2cflt(arg1,params,2);
1126
881
  glEvalCoord2fv(params);
882
+ CHECK_GLERROR
1127
883
  return Qnil;
1128
884
  }
1129
885
 
1130
- static VALUE
1131
- gl_EvalMesh1(obj,arg1,arg2,arg3)
1132
- VALUE obj,arg1,arg2,arg3;
1133
- {
1134
- GLenum mode;
1135
- GLint i1;
1136
- GLint i2;
1137
- mode = (GLenum)NUM2INT(arg1);
1138
- i1 = (GLint)NUM2INT(arg2);
1139
- i2 = (GLint)NUM2INT(arg3);
1140
- glEvalMesh1(mode,i1,i2);
1141
- return Qnil;
1142
- }
1143
-
1144
- static VALUE
1145
- gl_EvalMesh2(obj,arg1,arg2,arg3,arg4,arg5)
1146
- VALUE obj,arg1,arg2,arg3,arg4,arg5;
1147
- {
1148
- GLenum mode;
1149
- GLint i1;
1150
- GLint i2;
1151
- GLint j1;
1152
- GLint j2;
1153
- mode = (GLenum)NUM2INT(arg1);
1154
- i1 = (GLint)NUM2INT(arg2);
1155
- i2 = (GLint)NUM2INT(arg3);
1156
- j1 = (GLint)NUM2INT(arg4);
1157
- j2 = (GLint)NUM2INT(arg5);
1158
- glEvalMesh2(mode,i1,i2,j1,j2);
1159
- return Qnil;
1160
- }
1161
-
1162
- static VALUE
1163
- gl_AlphaFunc(obj,arg1,arg2)
1164
- VALUE obj,arg1,arg2;
1165
- {
1166
- GLenum func;
1167
- GLclampf ref;
1168
- func = (GLenum)NUM2INT(arg1);
1169
- ref = (GLclampf)NUM2DBL(arg2);
1170
- glAlphaFunc(func,ref);
1171
- return Qnil;
1172
- }
1173
-
1174
- static VALUE
1175
- gl_StencilFunc(obj,arg1,arg2,arg3)
1176
- VALUE obj,arg1,arg2,arg3;
1177
- {
1178
- GLenum func;
1179
- GLint ref;
1180
- GLuint mask;
1181
- func = (GLenum)NUM2INT(arg1);
1182
- ref = (GLint)NUM2INT(arg2);
1183
- mask = (GLuint)NUM2UINT(arg3);
1184
- glStencilFunc(func,ref,mask);
1185
- return Qnil;
1186
- }
1187
-
1188
- static VALUE
1189
- gl_PixelTransferf(obj,arg1,arg2)
1190
- VALUE obj,arg1,arg2;
1191
- {
1192
- GLenum pname;
1193
- GLfloat param;
1194
- pname = (GLenum)NUM2INT(arg1);
1195
- param = (GLfloat)NUM2DBL(arg2);
1196
- glPixelTransferf(pname,param);
1197
- return Qnil;
1198
- }
1199
-
1200
- static VALUE
1201
- gl_PixelTransferi(obj,arg1,arg2)
1202
- VALUE obj,arg1,arg2;
1203
- {
1204
- GLenum pname;
1205
- GLint param;
1206
- pname = (GLenum)NUM2INT(arg1);
1207
- param = (GLint)NUM2INT(arg2);
1208
- glPixelTransferi(pname,param);
1209
- return Qnil;
1210
- }
1211
-
1212
- static VALUE
1213
- gl_PixelStoref(obj,arg1,arg2)
1214
- VALUE obj,arg1,arg2;
1215
- {
1216
- GLenum pname;
1217
- GLfloat param;
1218
- pname = (GLenum)NUM2INT(arg1);
1219
- param = (GLfloat)NUM2DBL(arg2);
1220
- glPixelStoref(pname,param);
1221
- return Qnil;
1222
- }
1223
-
1224
- static VALUE
1225
- gl_PixelStorei(obj,arg1,arg2)
1226
- VALUE obj,arg1,arg2;
1227
- {
1228
- GLenum pname;
1229
- GLint param;
1230
- pname = (GLenum)NUM2INT(arg1);
1231
- param = (GLint)NUM2INT(arg2);
1232
- glPixelStorei(pname,param);
1233
- return Qnil;
1234
- }
1235
886
 
1236
887
  #define GLPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
1237
888
  static VALUE \
@@ -1265,6 +916,7 @@ VALUE obj; \
1265
916
  glPixelMap##_type_##v(map,size,(GLvoid *)NUM2INT(args[2])); \
1266
917
  break; \
1267
918
  } \
919
+ CHECK_GLERROR \
1268
920
  return Qnil; \
1269
921
  }
1270
922
 
@@ -1273,23 +925,6 @@ GLPIXELMAP_FUNC(ui,GLuint,ary2cuint)
1273
925
  GLPIXELMAP_FUNC(us,GLushort,ary2cushort)
1274
926
  #undef GLPIXELMAP_FUNC
1275
927
 
1276
- static VALUE
1277
- gl_CopyPixels(obj,arg1,arg2,arg3,arg4,arg5)
1278
- VALUE obj,arg1,arg2,arg3,arg4,arg5;
1279
- {
1280
- GLint x;
1281
- GLint y;
1282
- GLsizei width;
1283
- GLsizei height;
1284
- GLenum type;
1285
- x = (GLint)NUM2INT(arg1);
1286
- y = (GLint)NUM2INT(arg2);
1287
- width = (GLsizei)NUM2UINT(arg3);
1288
- height = (GLsizei)NUM2UINT(arg4);
1289
- type = (GLenum)NUM2INT(arg5);
1290
- glCopyPixels(x,y,width,height,type);
1291
- return Qnil;
1292
- }
1293
928
 
1294
929
  static VALUE
1295
930
  gl_ReadPixels(argc,argv,obj)
@@ -1321,8 +956,9 @@ VALUE obj;
1321
956
  rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
1322
957
  pixels = allocate_buffer_with_string(GetDataSize(type,format,width*height));
1323
958
  FORCE_PIXEL_STORE_MODE
1324
- glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr);
959
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING_PTR(pixels));
1325
960
  RESTORE_PIXEL_STORE_MODE
961
+ CHECK_GLERROR
1326
962
  return pixels;
1327
963
  break;
1328
964
  case 7:
@@ -1331,6 +967,7 @@ VALUE obj;
1331
967
  FORCE_PIXEL_STORE_MODE
1332
968
  glReadPixels(x,y,width,height,format,type,(GLvoid*)NUM2INT(args[6]));
1333
969
  RESTORE_PIXEL_STORE_MODE
970
+ CHECK_GLERROR
1334
971
  return Qnil;
1335
972
  break;
1336
973
  }
@@ -1352,11 +989,13 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
1352
989
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
1353
990
  glDrawPixels(width,height,format,type,(GLvoid *)NUM2INT(arg5));
1354
991
  } else {
1355
- Check_Type(arg5,T_STRING);
1356
- CheckDataSize(type,format,width*height,arg5);
1357
- pixels = RSTRING(arg5)->ptr;
992
+ VALUE data;
993
+ data = pack_array_or_pass_string(type,arg5);
994
+ CheckDataSize(type,format,width*height,data);
995
+ pixels = RSTRING_PTR(data);
1358
996
  glDrawPixels(width,height,format,type,pixels);
1359
997
  }
998
+ CHECK_GLERROR
1360
999
  return Qnil;
1361
1000
  }
1362
1001
 
@@ -1373,6 +1012,7 @@ VALUE obj,arg1;
1373
1012
  retary = rb_ary_new2(4);
1374
1013
  for(i=0;i<4;i++)
1375
1014
  rb_ary_push(retary, rb_float_new(equation[i]));
1015
+ CHECK_GLERROR
1376
1016
  return retary;
1377
1017
  }
1378
1018
 
@@ -1415,6 +1055,7 @@ VALUE obj,arg1; \
1415
1055
  case GL_CONSTANT_COLOR1_NV: \
1416
1056
  case GL_TEXTURE_COLOR_WRITEMASK_SGIS: \
1417
1057
  case GL_FLOAT_CLEAR_COLOR_VALUE_NV: \
1058
+ case GL_RGBA_SIGNED_COMPONENTS_EXT: \
1418
1059
  nitems = 4; \
1419
1060
  break; \
1420
1061
  case GL_CURRENT_NORMAL: \
@@ -1449,6 +1090,7 @@ VALUE obj,arg1; \
1449
1090
  case GL_TRANSPOSE_PROJECTION_MATRIX: \
1450
1091
  case GL_TRANSPOSE_TEXTURE_MATRIX: \
1451
1092
  case GL_TRANSPOSE_COLOR_MATRIX: \
1093
+ case GL_TRANSPOSE_CURRENT_MATRIX_ARB: \
1452
1094
  case GL_MODELVIEW0_ARB: \
1453
1095
  case GL_MODELVIEW1_ARB: \
1454
1096
  case GL_MODELVIEW2_ARB: \
@@ -1493,41 +1135,38 @@ VALUE obj,arg1; \
1493
1135
  for (j = 0; j < 4; j++) \
1494
1136
  rb_ary_push(ary2, _conv_(items[i*4+j])); \
1495
1137
  } \
1138
+ CHECK_GLERROR \
1496
1139
  return ary; \
1497
1140
  case GL_POLYGON_STIPPLE: \
1498
1141
  glGet##_name_##v(pname, items); \
1142
+ CHECK_GLERROR \
1499
1143
  return rb_str_new((const char*)items, 32); \
1500
1144
  case GL_COMPRESSED_TEXTURE_FORMATS: \
1501
1145
  glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &nitems); \
1146
+ CHECK_GLERROR \
1502
1147
  if (nitems<=0||nitems>64) \
1503
1148
  return INT2NUM(0); \
1504
1149
  break; \
1505
1150
  default: /* size=1 */ \
1506
1151
  glGet##_name_##v(pname, items); \
1152
+ CHECK_GLERROR \
1507
1153
  return _conv_(items[0]); \
1508
1154
  } \
1509
1155
  glGet##_name_##v(pname, items); \
1510
1156
  ary = rb_ary_new2(nitems); \
1511
1157
  for (i = 0; i < nitems; i++) \
1512
1158
  rb_ary_push(ary, _conv_(items[i])); \
1159
+ CHECK_GLERROR \
1513
1160
  return ary; \
1514
1161
  }
1515
1162
 
1516
1163
  GLGET_FUNC(Double,GLdouble,rb_float_new)
1517
1164
  GLGET_FUNC(Float,GLfloat,rb_float_new)
1518
1165
  GLGET_FUNC(Integer,GLint,INT2NUM)
1519
- GLGET_FUNC(Boolean,GLboolean,INT2NUM)
1166
+ GLGET_FUNC(Boolean,GLboolean,GLBOOL2RUBY)
1520
1167
 
1521
1168
  #undef GLGET_FUNC
1522
1169
 
1523
- static VALUE
1524
- gl_GetError(obj)
1525
- VALUE obj;
1526
- {
1527
- GLenum ret;
1528
- ret = glGetError();
1529
- return INT2NUM(ret);
1530
- }
1531
1170
 
1532
1171
  static VALUE
1533
1172
  gl_GetLightfv(obj,arg1,arg2)
@@ -1537,8 +1176,6 @@ VALUE obj,arg1,arg2;
1537
1176
  GLenum pname;
1538
1177
  GLsizei size;
1539
1178
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
1540
- VALUE retary;
1541
- int i;
1542
1179
  light = (GLenum)NUM2INT(arg1);
1543
1180
  pname = (GLenum)NUM2INT(arg2);
1544
1181
  switch(pname) {
@@ -1563,10 +1200,7 @@ VALUE obj,arg1,arg2;
1563
1200
  break; /* not reached */
1564
1201
  }
1565
1202
  glGetLightfv(light,pname,params);
1566
- retary = rb_ary_new2(size);
1567
- for(i=0;i<size;i++)
1568
- rb_ary_push(retary, rb_float_new(params[i]));
1569
- return retary;
1203
+ RET_ARRAY_OR_SINGLE(size,rb_float_new,params)
1570
1204
  }
1571
1205
 
1572
1206
  static VALUE
@@ -1577,8 +1211,6 @@ VALUE obj,arg1,arg2;
1577
1211
  GLenum pname;
1578
1212
  GLsizei size;
1579
1213
  GLint params[4] = {0,0,0,0};
1580
- VALUE retary;
1581
- int i;
1582
1214
  light = (GLenum)NUM2INT(arg1);
1583
1215
  pname = (GLenum)NUM2INT(arg2);
1584
1216
  switch(pname) {
@@ -1603,194 +1235,71 @@ VALUE obj,arg1,arg2;
1603
1235
  break; /* not reached */
1604
1236
  }
1605
1237
  glGetLightiv(light,pname,params);
1606
- retary = rb_ary_new2(size);
1607
- for(i=0;i<size;i++)
1608
- rb_ary_push(retary, INT2NUM(params[i]));
1609
- return retary;
1610
- }
1611
-
1612
- static VALUE
1613
- gl_GetMapdv(obj,arg1,arg2)
1614
- VALUE obj,arg1,arg2;
1615
- {
1616
- GLenum target;
1617
- GLenum query;
1618
- int dims;
1619
- int pointsize;
1620
- int size=0;
1621
- int i;
1622
- GLdouble *points;
1623
- VALUE retary;
1624
- GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
1625
- target = (GLenum)NUM2INT(arg1);
1626
- query = (GLenum)NUM2INT(arg2);
1627
- switch(target) {
1628
- case GL_MAP1_INDEX:
1629
- case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
1630
- case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
1631
- case GL_MAP1_VERTEX_3:
1632
- case GL_MAP1_NORMAL:
1633
- case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
1634
- case GL_MAP1_COLOR_4:
1635
- case GL_MAP1_TEXTURE_COORD_4:
1636
- case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
1637
- case GL_MAP2_INDEX:
1638
- case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
1639
- case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
1640
- case GL_MAP2_VERTEX_3:
1641
- case GL_MAP2_NORMAL:
1642
- case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
1643
- case GL_MAP2_COLOR_4:
1644
- case GL_MAP2_TEXTURE_COORD_4:
1645
- case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
1646
- default:
1647
- rb_raise(rb_eArgError, "unknown target:%d",target);
1648
- break; /* not reached */
1649
- }
1650
- switch(query) {
1651
- case GL_ORDER: size = dims; break;
1652
- case GL_DOMAIN: size = dims*2; break;
1653
- case GL_COEFF:
1654
- glGetMapiv(target,GL_ORDER,order);
1655
- if (dims==1)
1656
- size = order[0] * pointsize;
1657
- else
1658
- size = (order[0]*order[1]) * pointsize;
1659
- break;
1660
- default:
1661
- rb_raise(rb_eArgError, "unknown target:%d",target);
1662
- break; /* not reached */
1663
- }
1664
- points = ALLOC_N(GLdouble,size);
1665
- glGetMapdv(target,query,points);
1666
- retary = rb_ary_new2(size);
1667
- for(i=0;i<size;i++)
1668
- rb_ary_push(retary, rb_float_new(points[i]));
1669
- xfree(points);
1670
- return retary;
1238
+ RET_ARRAY_OR_SINGLE(size,INT2NUM,params)
1671
1239
  }
1672
1240
 
1673
- static VALUE
1674
- gl_GetMapfv(obj,arg1,arg2)
1675
- VALUE obj,arg1,arg2;
1676
- {
1677
- GLenum target;
1678
- GLenum query;
1679
- int dims;
1680
- int pointsize;
1681
- int size=0;
1682
- int i;
1683
- GLfloat *points;
1684
- VALUE retary;
1685
- GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
1686
- target = (GLenum)NUM2INT(arg1);
1687
- query = (GLenum)NUM2INT(arg2);
1688
- switch(target) {
1689
- case GL_MAP1_INDEX:
1690
- case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
1691
- case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
1692
- case GL_MAP1_VERTEX_3:
1693
- case GL_MAP1_NORMAL:
1694
- case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
1695
- case GL_MAP1_COLOR_4:
1696
- case GL_MAP1_TEXTURE_COORD_4:
1697
- case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
1698
- case GL_MAP2_INDEX:
1699
- case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
1700
- case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
1701
- case GL_MAP2_VERTEX_3:
1702
- case GL_MAP2_NORMAL:
1703
- case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
1704
- case GL_MAP2_COLOR_4:
1705
- case GL_MAP2_TEXTURE_COORD_4:
1706
- case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
1707
- default:
1708
- rb_raise(rb_eArgError, "unknown target:%d",target);
1709
- break; /* not reached */
1710
- }
1711
- switch(query) {
1712
- case GL_ORDER: size = dims; break;
1713
- case GL_DOMAIN: size = dims*2; break;
1714
- case GL_COEFF:
1715
- glGetMapiv(target,GL_ORDER,order);
1716
- if (dims==1)
1717
- size = order[0] * pointsize;
1718
- else
1719
- size = (order[0]*order[1]) * pointsize;
1720
- break;
1721
- default:
1722
- rb_raise(rb_eArgError, "unknown target:%d",target);
1723
- break; /* not reached */
1724
- }
1725
- points = ALLOC_N(GLfloat,size);
1726
- glGetMapfv(target,query,points);
1727
- retary = rb_ary_new2(size);
1728
- for(i=0;i<size;i++)
1729
- rb_ary_push(retary, rb_float_new(points[i]));
1730
- xfree(points);
1731
- return retary;
1241
+ #define GETMAP_FUNC(_name_,_type_) \
1242
+ static VALUE \
1243
+ gl_##_name_(obj,arg1,arg2) \
1244
+ VALUE obj,arg1,arg2; \
1245
+ { \
1246
+ GLenum target; \
1247
+ GLenum query; \
1248
+ int dims; \
1249
+ int pointsize; \
1250
+ int size=0; \
1251
+ _type_ *points; \
1252
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */ \
1253
+ target = (GLenum)NUM2INT(arg1); \
1254
+ query = (GLenum)NUM2INT(arg2); \
1255
+ switch(target) { \
1256
+ case GL_MAP1_INDEX: \
1257
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break; \
1258
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break; \
1259
+ case GL_MAP1_VERTEX_3: \
1260
+ case GL_MAP1_NORMAL: \
1261
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break; \
1262
+ case GL_MAP1_COLOR_4: \
1263
+ case GL_MAP1_TEXTURE_COORD_4: \
1264
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break; \
1265
+ case GL_MAP2_INDEX: \
1266
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break; \
1267
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break; \
1268
+ case GL_MAP2_VERTEX_3: \
1269
+ case GL_MAP2_NORMAL: \
1270
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break; \
1271
+ case GL_MAP2_COLOR_4: \
1272
+ case GL_MAP2_TEXTURE_COORD_4: \
1273
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break; \
1274
+ default: \
1275
+ rb_raise(rb_eArgError, "unknown target:%d",target); \
1276
+ break; /* not reached */ \
1277
+ } \
1278
+ switch(query) { \
1279
+ case GL_ORDER: size = dims; break; \
1280
+ case GL_DOMAIN: size = dims*2; break; \
1281
+ case GL_COEFF: \
1282
+ glGetMapiv(target,GL_ORDER,order); \
1283
+ CHECK_GLERROR \
1284
+ if (dims==1) \
1285
+ size = order[0] * pointsize; \
1286
+ else \
1287
+ size = (order[0]*order[1]) * pointsize; \
1288
+ break; \
1289
+ default: \
1290
+ rb_raise(rb_eArgError, "unknown target:%d",target); \
1291
+ break; /* not reached */ \
1292
+ } \
1293
+ points = ALLOC_N(_type_,size); \
1294
+ gl##_name_(target,query,points); \
1295
+ \
1296
+ RET_ARRAY_OR_SINGLE_FREE(size,RETCONV_##_type_,points) \
1732
1297
  }
1733
1298
 
1734
- static VALUE
1735
- gl_GetMapiv(obj,arg1,arg2)
1736
- VALUE obj,arg1,arg2;
1737
- {
1738
- GLenum target;
1739
- GLenum query;
1740
- int dims;
1741
- int pointsize;
1742
- int size=0;
1743
- int i;
1744
- GLint *points;
1745
- VALUE retary;
1746
- GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
1747
- target = (GLenum)NUM2INT(arg1);
1748
- query = (GLenum)NUM2INT(arg2);
1749
- switch(target) {
1750
- case GL_MAP1_INDEX:
1751
- case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
1752
- case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
1753
- case GL_MAP1_VERTEX_3:
1754
- case GL_MAP1_NORMAL:
1755
- case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
1756
- case GL_MAP1_COLOR_4:
1757
- case GL_MAP1_TEXTURE_COORD_4:
1758
- case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
1759
- case GL_MAP2_INDEX:
1760
- case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
1761
- case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
1762
- case GL_MAP2_VERTEX_3:
1763
- case GL_MAP2_NORMAL:
1764
- case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
1765
- case GL_MAP2_COLOR_4:
1766
- case GL_MAP2_TEXTURE_COORD_4:
1767
- case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
1768
- default:
1769
- rb_raise(rb_eArgError, "unknown target:%d",target);
1770
- break; /* not reached */
1771
- }
1772
- switch(query) {
1773
- case GL_ORDER: size = dims; break;
1774
- case GL_DOMAIN: size = dims*2; break;
1775
- case GL_COEFF:
1776
- glGetMapiv(target,GL_ORDER,order);
1777
- if (dims==1)
1778
- size = order[0] * pointsize;
1779
- else
1780
- size = (order[0]*order[1]) * pointsize;
1781
- break;
1782
- default:
1783
- rb_raise(rb_eArgError, "unknown target:%d",target);
1784
- break; /* not reached */
1785
- }
1786
- points = ALLOC_N(GLint,size);
1787
- glGetMapiv(target,query,points);
1788
- retary = rb_ary_new2(size);
1789
- for(i=0;i<size;i++)
1790
- rb_ary_push(retary, INT2NUM(points[i]));
1791
- xfree(points);
1792
- return retary;
1793
- }
1299
+ GETMAP_FUNC(GetMapdv,GLdouble)
1300
+ GETMAP_FUNC(GetMapfv,GLfloat)
1301
+ GETMAP_FUNC(GetMapiv,GLint)
1302
+ #undef GETMAP_FUNC
1794
1303
 
1795
1304
  static VALUE
1796
1305
  gl_GetMaterialfv(obj,arg1,arg2)
@@ -1800,8 +1309,6 @@ VALUE obj,arg1,arg2;
1800
1309
  GLenum pname;
1801
1310
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
1802
1311
  int size;
1803
- VALUE retary;
1804
- int i;
1805
1312
  face = (GLenum)NUM2INT(arg1);
1806
1313
  pname = (GLenum)NUM2INT(arg2);
1807
1314
  switch(pname) {
@@ -1822,10 +1329,7 @@ VALUE obj,arg1,arg2;
1822
1329
  break; /* not reached */
1823
1330
  }
1824
1331
  glGetMaterialfv(face,pname,params);
1825
- retary = rb_ary_new2(size);
1826
- for(i=0;i<size;i++)
1827
- rb_ary_push(retary, rb_float_new(params[i]));
1828
- return retary;
1332
+ RET_ARRAY_OR_SINGLE(size,rb_float_new,params)
1829
1333
  }
1830
1334
 
1831
1335
  static VALUE
@@ -1836,8 +1340,6 @@ VALUE obj,arg1,arg2;
1836
1340
  GLenum pname;
1837
1341
  GLint params[4] = {0,0,0,0};
1838
1342
  int size;
1839
- VALUE retary;
1840
- int i;
1841
1343
  face = (GLenum)NUM2INT(arg1);
1842
1344
  pname = (GLenum)NUM2INT(arg2);
1843
1345
  switch(pname) {
@@ -1858,10 +1360,7 @@ VALUE obj,arg1,arg2;
1858
1360
  break; /* not reached */
1859
1361
  }
1860
1362
  glGetMaterialiv(face,pname,params);
1861
- retary = rb_ary_new2(size);
1862
- for(i=0;i<size;i++)
1863
- rb_ary_push(retary, INT2NUM(params[i]));
1864
- return retary;
1363
+ RET_ARRAY_OR_SINGLE(size,INT2NUM,params)
1865
1364
  }
1866
1365
 
1867
1366
  #define GLGETPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
@@ -1875,9 +1374,7 @@ VALUE obj; \
1875
1374
  GLenum map_size; \
1876
1375
  GLint size = 0; \
1877
1376
  _vartype_ *values; \
1878
- VALUE retary; \
1879
1377
  VALUE args[2]; \
1880
- int i; \
1881
1378
  switch (rb_scan_args(argc, argv, "11", &args[0], &args[1])) { \
1882
1379
  default: \
1883
1380
  case 1: \
@@ -1901,19 +1398,18 @@ VALUE obj; \
1901
1398
  break; \
1902
1399
  } \
1903
1400
  glGetIntegerv(map_size,&size); \
1401
+ CHECK_GLERROR \
1904
1402
  values = ALLOC_N(_vartype_,size); \
1905
1403
  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; \
1404
+ RET_ARRAY_OR_SINGLE_FREE(size,_convert_,values) \
1405
+ break; \
1911
1406
  case 2: \
1912
1407
  if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING)) \
1913
1408
  rb_raise(rb_eArgError, "Pixel pack buffer not bound"); \
1914
1409
  \
1915
1410
  map = (GLenum)NUM2INT(args[0]); \
1916
1411
  glGetPixelMap##_type_##v(map,(GLvoid*)NUM2INT(args[1])); \
1412
+ CHECK_GLERROR \
1917
1413
  return Qnil; \
1918
1414
  } \
1919
1415
  }
@@ -1940,11 +1436,13 @@ VALUE obj;
1940
1436
  FORCE_PIXEL_STORE_MODE
1941
1437
  glGetPolygonStipple(mask);
1942
1438
  RESTORE_PIXEL_STORE_MODE
1439
+ CHECK_GLERROR
1943
1440
  return rb_str_new((const char*)mask, 128);
1944
1441
  case 1:
1945
1442
  if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
1946
1443
  rb_raise(rb_eArgError, "Pixel pack buffer not bound");
1947
1444
  glGetPolygonStipple((GLvoid *)NUM2INT(args[0]));
1445
+ CHECK_GLERROR
1948
1446
  return Qnil;
1949
1447
  }
1950
1448
  }
@@ -1957,158 +1455,71 @@ VALUE obj,arg1;
1957
1455
  const GLubyte *ret;
1958
1456
  name = (GLenum)NUM2INT(arg1);
1959
1457
  ret = glGetString(name);
1458
+ CHECK_GLERROR
1960
1459
  return rb_str_new2((const char*)ret);
1961
1460
  }
1962
1461
 
1963
- static VALUE
1964
- gl_GetTexEnvfv(obj,arg1,arg2)
1965
- VALUE obj,arg1,arg2;
1966
- {
1967
- GLenum target;
1968
- GLenum pname;
1969
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
1970
- int size;
1971
- VALUE retary;
1972
- int i;
1973
- target = (GLenum)NUM2INT(arg1);
1974
- pname = (GLenum)NUM2INT(arg2);
1975
- switch(pname) {
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:
1980
- size = 4;
1981
- break;
1982
- case GL_CONST_EYE_NV:
1983
- size = 3;
1984
- break;
1985
- default:
1986
- size = 1;
1987
- break;
1988
- }
1989
- glGetTexEnvfv(target,pname,params);
1990
- retary = rb_ary_new2(size);
1991
- for(i=0;i<size;i++)
1992
- rb_ary_push(retary, rb_float_new(params[i]));
1993
- return retary;
1994
- }
1995
-
1996
- static VALUE
1997
- gl_GetTexEnviv(obj,arg1,arg2)
1998
- VALUE obj,arg1,arg2;
1999
- {
2000
- GLenum target;
2001
- GLenum pname;
2002
- GLint params[4] = {0,0,0,0};
2003
- int size;
2004
- VALUE retary;
2005
- int i;
2006
- target = (GLenum)NUM2INT(arg1);
2007
- pname = (GLenum)NUM2INT(arg2);
2008
- switch(pname) {
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:
2013
- size = 4;
2014
- break;
2015
- case GL_CONST_EYE_NV:
2016
- size = 3;
2017
- break;
2018
- default:
2019
- size = 1;
2020
- break;
2021
- }
2022
- glGetTexEnviv(target,pname,params);
2023
- retary = rb_ary_new2(size);
2024
- for(i=0;i<size;i++)
2025
- rb_ary_push(retary, INT2NUM(params[i]));
2026
- return retary;
1462
+ #define GETTEXENVFUNC(_name_,_type_) \
1463
+ static VALUE \
1464
+ gl_##_name_(obj,arg1,arg2) \
1465
+ VALUE obj,arg1,arg2; \
1466
+ { \
1467
+ GLenum target; \
1468
+ GLenum pname; \
1469
+ _type_ params[4] = {0.0,0.0,0.0,0.0}; \
1470
+ int size; \
1471
+ target = (GLenum)NUM2INT(arg1); \
1472
+ pname = (GLenum)NUM2INT(arg2); \
1473
+ switch(pname) { \
1474
+ case GL_TEXTURE_ENV_COLOR: \
1475
+ case GL_TEXTURE_ENV_BIAS_SGIX: \
1476
+ case GL_CULL_MODES_NV: \
1477
+ case GL_OFFSET_TEXTURE_MATRIX_NV: \
1478
+ size = 4; \
1479
+ break; \
1480
+ case GL_CONST_EYE_NV: \
1481
+ size = 3; \
1482
+ break; \
1483
+ default: \
1484
+ size = 1; \
1485
+ break; \
1486
+ } \
1487
+ gl##_name_(target,pname,params); \
1488
+ RET_ARRAY_OR_SINGLE(size,RETCONV_##_type_,params) \
2027
1489
  }
2028
1490
 
2029
- static VALUE
2030
- gl_GetTexGendv(obj,arg1,arg2)
2031
- VALUE obj,arg1,arg2;
2032
- {
2033
- GLenum coord;
2034
- GLenum pname;
2035
- GLdouble params[4] = {0.0,0.0,0.0,0.0};
2036
- int size;
2037
- VALUE retary;
2038
- int i;
2039
- coord = (GLenum)NUM2INT(arg1);
2040
- pname = (GLenum)NUM2INT(arg2);
2041
- switch(pname) {
2042
- case GL_OBJECT_PLANE:
2043
- case GL_EYE_PLANE:
2044
- size = 4;
2045
- break;
2046
- default:
2047
- size = 1;
2048
- break;
2049
- }
2050
- glGetTexGendv(coord,pname,params);
2051
- retary = rb_ary_new2(size);
2052
- for(i=0;i<size;i++)
2053
- rb_ary_push(retary, rb_float_new(params[i]));
2054
- return retary;
2055
- }
1491
+ GETTEXENVFUNC(GetTexEnvfv,GLfloat)
1492
+ GETTEXENVFUNC(GetTexEnviv,GLint)
1493
+ #undef GETTEXENVFUNC
2056
1494
 
2057
- static VALUE
2058
- gl_GetTexGenfv(obj,arg1,arg2)
2059
- VALUE obj,arg1,arg2;
2060
- {
2061
- GLenum coord;
2062
- GLenum pname;
2063
- GLfloat params[4] = {0.0,0.0,0.0,0.0};
2064
- int size;
2065
- VALUE retary;
2066
- int i;
2067
- coord = (GLenum)NUM2INT(arg1);
2068
- pname = (GLenum)NUM2INT(arg2);
2069
- switch(pname) {
2070
- case GL_OBJECT_PLANE:
2071
- case GL_EYE_PLANE:
2072
- size = 4;
2073
- break;
2074
- default:
2075
- size = 1;
2076
- break;
2077
- }
2078
- glGetTexGenfv(coord,pname,params);
2079
- retary = rb_ary_new2(size);
2080
- for(i=0;i<size;i++)
2081
- rb_ary_push(retary, rb_float_new(params[i]));
2082
- return retary;
1495
+ #define GETTEXGENFUNC(_name_,_type_) \
1496
+ static VALUE \
1497
+ gl_##_name_(obj,arg1,arg2) \
1498
+ VALUE obj,arg1,arg2; \
1499
+ { \
1500
+ GLenum coord; \
1501
+ GLenum pname; \
1502
+ _type_ params[4] = {0.0,0.0,0.0,0.0}; \
1503
+ int size; \
1504
+ coord = (GLenum)NUM2INT(arg1); \
1505
+ pname = (GLenum)NUM2INT(arg2); \
1506
+ switch(pname) { \
1507
+ case GL_OBJECT_PLANE: \
1508
+ case GL_EYE_PLANE: \
1509
+ size = 4; \
1510
+ break; \
1511
+ default: \
1512
+ size = 1; \
1513
+ break; \
1514
+ } \
1515
+ gl##_name_(coord,pname,params); \
1516
+ RET_ARRAY_OR_SINGLE(size,RETCONV_##_type_,params) \
2083
1517
  }
2084
1518
 
2085
- static VALUE
2086
- gl_GetTexGeniv(obj,arg1,arg2)
2087
- VALUE obj,arg1,arg2;
2088
- {
2089
- GLenum coord;
2090
- GLenum pname;
2091
- GLint params[4] = {0,0,0,0};
2092
- int size;
2093
- VALUE retary;
2094
- int i;
2095
- coord = (GLenum)NUM2INT(arg1);
2096
- pname = (GLenum)NUM2INT(arg2);
2097
- switch(pname) {
2098
- case GL_OBJECT_PLANE:
2099
- case GL_EYE_PLANE:
2100
- size = 4;
2101
- break;
2102
- default:
2103
- size = 1;
2104
- break;
2105
- }
2106
- glGetTexGeniv(coord,pname,params);
2107
- retary = rb_ary_new2(size);
2108
- for(i=0;i<size;i++)
2109
- rb_ary_push(retary, INT2NUM(params[i]));
2110
- return retary;
2111
- }
1519
+ GETTEXGENFUNC(GetTexGendv,GLdouble)
1520
+ GETTEXGENFUNC(GetTexGenfv,GLfloat)
1521
+ GETTEXGENFUNC(GetTexGeniv,GLint)
1522
+ #undef GETTEXGENFUNC
2112
1523
 
2113
1524
  static VALUE
2114
1525
  gl_GetTexImage(argc,argv,obj)
@@ -2170,11 +1581,13 @@ VALUE obj;
2170
1581
  default:
2171
1582
  rb_raise(rb_eArgError, "Target type not supported");
2172
1583
  }
1584
+ CHECK_GLERROR
2173
1585
  pixels = allocate_buffer_with_string(GetDataSize(type,format,size));
2174
1586
 
2175
1587
  FORCE_PIXEL_STORE_MODE
2176
- glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING(pixels)->ptr);
1588
+ glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING_PTR(pixels));
2177
1589
  RESTORE_PIXEL_STORE_MODE
1590
+ CHECK_GLERROR
2178
1591
  return pixels;
2179
1592
  break;
2180
1593
  case 5:
@@ -2184,6 +1597,7 @@ VALUE obj;
2184
1597
  FORCE_PIXEL_STORE_MODE
2185
1598
  glGetTexImage(tex,lod,format,type,(GLvoid*)NUM2INT(args[4]));
2186
1599
  RESTORE_PIXEL_STORE_MODE
1600
+ CHECK_GLERROR
2187
1601
  return Qnil;
2188
1602
  }
2189
1603
  }
@@ -2196,8 +1610,6 @@ VALUE obj,arg1,arg2;
2196
1610
  GLenum pname;
2197
1611
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
2198
1612
  int size;
2199
- VALUE retary;
2200
- int i;
2201
1613
  target = (GLenum)NUM2INT(arg1);
2202
1614
  pname = (GLenum)NUM2INT(arg2);
2203
1615
  switch(pname) {
@@ -2212,10 +1624,7 @@ VALUE obj,arg1,arg2;
2212
1624
  break;
2213
1625
  }
2214
1626
  glGetTexParameterfv(target,pname,params);
2215
- retary = rb_ary_new2(size);
2216
- for(i=0;i<size;i++)
2217
- rb_ary_push(retary, rb_float_new(params[i]));
2218
- return retary;
1627
+ RET_ARRAY_OR_SINGLE(size,RETCONV_GLfloat,params)
2219
1628
  }
2220
1629
 
2221
1630
  static VALUE
@@ -2226,8 +1635,6 @@ VALUE obj,arg1,arg2;
2226
1635
  GLenum pname;
2227
1636
  GLint params[4] = {0,0,0,0};
2228
1637
  int size;
2229
- VALUE retary;
2230
- int i;
2231
1638
  target = (GLenum)NUM2INT(arg1);
2232
1639
  pname = (GLenum)NUM2INT(arg2);
2233
1640
  switch(pname) {
@@ -2242,10 +1649,7 @@ VALUE obj,arg1,arg2;
2242
1649
  break;
2243
1650
  }
2244
1651
  glGetTexParameteriv(target,pname,params);
2245
- retary = rb_ary_new2(size);
2246
- for(i=0;i<size;i++)
2247
- rb_ary_push(retary, INT2NUM(params[i]));
2248
- return retary;
1652
+ RET_ARRAY_OR_SINGLE_BOOL(size,cond_GLBOOL2RUBY,pname,params)
2249
1653
  }
2250
1654
 
2251
1655
  static VALUE
@@ -2256,14 +1660,12 @@ VALUE obj,arg1,arg2,arg3;
2256
1660
  GLint level;
2257
1661
  GLenum pname;
2258
1662
  GLfloat params = 0.0;
2259
- VALUE retary;
2260
1663
  target = (GLenum)NUM2INT(arg1);
2261
1664
  level = (GLint)NUM2INT(arg2);
2262
1665
  pname = (GLenum)NUM2INT(arg3);
2263
1666
  glGetTexLevelParameterfv(target,level,pname,&params);
2264
- retary = rb_ary_new2(1);
2265
- rb_ary_push(retary, rb_float_new(params));
2266
- return retary;
1667
+ CHECK_GLERROR
1668
+ return RETCONV_GLfloat(params);
2267
1669
  }
2268
1670
 
2269
1671
  static VALUE
@@ -2274,45 +1676,23 @@ VALUE obj,arg1,arg2,arg3;
2274
1676
  GLint level;
2275
1677
  GLenum pname;
2276
1678
  GLint params = 0;
2277
- VALUE retary;
2278
1679
  target = (GLenum)NUM2INT(arg1);
2279
1680
  level = (GLint)NUM2INT(arg2);
2280
1681
  pname = (GLenum)NUM2INT(arg3);
2281
1682
  glGetTexLevelParameteriv(target,level,pname,&params);
2282
- retary = rb_ary_new2(1);
2283
- rb_ary_push(retary, INT2NUM(params));
2284
- return retary;
1683
+ CHECK_GLERROR
1684
+ return cond_GLBOOL2RUBY(pname,params);
2285
1685
  }
2286
1686
 
2287
- static VALUE
2288
- gl_IsEnabled(obj,arg1)
2289
- VALUE obj,arg1;
2290
- {
2291
- GLenum cap;
2292
- GLboolean ret;
2293
- cap = (GLenum)NUM2INT(arg1);
2294
- ret = glIsEnabled(cap);
2295
- return INT2NUM(ret);
2296
- }
2297
-
2298
- static VALUE
2299
- gl_IsList(obj,arg1)
2300
- VALUE obj,arg1;
2301
- {
2302
- GLuint list;
2303
- GLboolean ret;
2304
- list = (GLuint)NUM2UINT(arg1);
2305
- ret = glIsList(list);
2306
- return INT2NUM(ret);
2307
- }
2308
1687
 
2309
1688
  static VALUE
2310
1689
  gl_LoadMatrixf(obj,arg1)
2311
1690
  VALUE obj,arg1;
2312
1691
  {
2313
1692
  GLfloat m[4*4];
2314
- ary2cmat4x4flt(arg1, m);
1693
+ ary2cmatfloat(arg1, m, 4, 4);
2315
1694
  glLoadMatrixf(m);
1695
+ CHECK_GLERROR
2316
1696
  return Qnil;
2317
1697
  }
2318
1698
 
@@ -2321,8 +1701,9 @@ gl_LoadMatrixd(obj,arg1)
2321
1701
  VALUE obj,arg1;
2322
1702
  {
2323
1703
  GLdouble m[4*4];
2324
- ary2cmat4x4dbl(arg1, m);
1704
+ ary2cmatdouble(arg1, m, 4, 4);
2325
1705
  glLoadMatrixd(m);
1706
+ CHECK_GLERROR
2326
1707
  return Qnil;
2327
1708
  }
2328
1709
 
@@ -2331,8 +1712,9 @@ gl_MultMatrixf(obj,arg1)
2331
1712
  VALUE obj,arg1;
2332
1713
  {
2333
1714
  GLfloat m[4*4];
2334
- ary2cmat4x4flt(arg1, m);
1715
+ ary2cmatfloat(arg1, m, 4, 4);
2335
1716
  glMultMatrixf(m);
1717
+ CHECK_GLERROR
2336
1718
  return Qnil;
2337
1719
  }
2338
1720
 
@@ -2341,8 +1723,9 @@ gl_MultMatrixd(obj,arg1)
2341
1723
  VALUE obj,arg1;
2342
1724
  {
2343
1725
  GLdouble m[4*4];
2344
- ary2cmat4x4dbl(arg1, m);
1726
+ ary2cmatdouble(arg1, m, 4, 4);
2345
1727
  glMultMatrixd(m);
1728
+ CHECK_GLERROR
2346
1729
  return Qnil;
2347
1730
  }
2348
1731
 
@@ -2370,11 +1753,13 @@ VALUE obj, arg1, arg2, arg3, arg4; \
2370
1753
  g_##_func_##_ptr = arg4; \
2371
1754
  gl##_func_##Pointer(size, type, stride, (const GLvoid*)NUM2INT(arg4)); \
2372
1755
  } 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); \
1756
+ VALUE data; \
1757
+ data = pack_array_or_pass_string(type,arg4); \
1758
+ rb_str_freeze(data); \
1759
+ g_##_func_##_ptr = data; \
1760
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING_PTR(data)); \
2377
1761
  } \
1762
+ CHECK_GLERROR \
2378
1763
  return Qnil; \
2379
1764
  }
2380
1765
 
@@ -2384,20 +1769,6 @@ POINTER_FUNC(TexCoord)
2384
1769
 
2385
1770
  #undef POINTER_FUNC
2386
1771
 
2387
- static VALUE
2388
- gl_DrawArrays(obj,arg1,arg2,arg3)
2389
- VALUE obj,arg1,arg2,arg3;
2390
- {
2391
- GLenum mode;
2392
- GLint first;
2393
- GLsizei count;
2394
- mode = (GLenum)NUM2INT(arg1);
2395
- first = (GLint)NUM2INT(arg2);
2396
- count = (GLsizei)NUM2UINT(arg3);
2397
- glDrawArrays(mode,first,count);
2398
- return Qnil;
2399
- }
2400
-
2401
1772
  static VALUE
2402
1773
  gl_DrawElements(obj,arg1,arg2,arg3,arg4)
2403
1774
  VALUE obj,arg1,arg2,arg3,arg4;
@@ -2411,9 +1782,11 @@ VALUE obj,arg1,arg2,arg3,arg4;
2411
1782
  if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
2412
1783
  glDrawElements(mode, count, type, (const GLvoid*)NUM2INT(arg4));
2413
1784
  } else {
2414
- Check_Type(arg4, T_STRING);
2415
- glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr);
1785
+ VALUE data;
1786
+ data = pack_array_or_pass_string(type,arg4);
1787
+ glDrawElements(mode, count, type, (const GLvoid*)RSTRING_PTR(data));
2416
1788
  }
1789
+ CHECK_GLERROR
2417
1790
  return Qnil;
2418
1791
  }
2419
1792
 
@@ -2427,11 +1800,13 @@ VALUE obj,arg1,arg2;
2427
1800
  g_EdgeFlag_ptr = arg2;
2428
1801
  glEdgeFlagPointer(stride, (const GLboolean*) NUM2INT(arg2));
2429
1802
  } 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);
1803
+ VALUE data;
1804
+ data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg2);
1805
+ rb_str_freeze(data);
1806
+ g_EdgeFlag_ptr = data;
1807
+ glEdgeFlagPointer(stride, (const GLboolean*)RSTRING_PTR(data));
2434
1808
  }
1809
+ CHECK_GLERROR
2435
1810
  return Qnil;
2436
1811
  }
2437
1812
 
@@ -2481,11 +1856,12 @@ VALUE obj,arg1,arg2,arg3;
2481
1856
  g_Index_ptr = arg3;
2482
1857
  glIndexPointer(type, stride, (const GLvoid*)NUM2INT(arg3));
2483
1858
  } 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);
1859
+ VALUE data;
1860
+ data = pack_array_or_pass_string(type,arg3);
1861
+ g_Index_ptr = data;
1862
+ glIndexPointer(type, stride, (const GLvoid*)RSTRING_PTR(data));
2488
1863
  }
1864
+ CHECK_GLERROR
2489
1865
  return Qnil;
2490
1866
  }
2491
1867
 
@@ -2495,11 +1871,14 @@ VALUE obj,arg1,arg2,arg3;
2495
1871
  {
2496
1872
  GLenum format;
2497
1873
  GLsizei stride;
1874
+ VALUE data;
2498
1875
  format = (GLenum)NUM2INT(arg1);
2499
1876
  stride = (GLsizei)NUM2UINT(arg2);
2500
- Check_Type(arg3, T_STRING);
2501
- rb_str_freeze(arg3);
2502
- glInterleavedArrays(format, stride, (const GLvoid*)RSTRING(arg3)->ptr);
1877
+ /* FIXME: add support for GL_C4UB_V2F,GL_C4UB_V3F, GL_T2F_C4UB_V3 */
1878
+ data = pack_array_or_pass_string(GL_FLOAT,arg3);
1879
+ rb_str_freeze(data);
1880
+ glInterleavedArrays(format, stride, (const GLvoid*)RSTRING_PTR(data));
1881
+ CHECK_GLERROR
2503
1882
  return Qnil;
2504
1883
  }
2505
1884
 
@@ -2515,105 +1894,16 @@ VALUE obj,arg1,arg2,arg3;
2515
1894
  g_Normal_ptr = arg3;
2516
1895
  glNormalPointer(type, stride, (const GLvoid*)NUM2INT(arg3));
2517
1896
  } 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);
1897
+ VALUE data;
1898
+ data = pack_array_or_pass_string(type,arg3);
1899
+ rb_str_freeze(data);
1900
+ g_Normal_ptr = data;
1901
+ glNormalPointer(type, stride, (const GLvoid*)RSTRING_PTR(data));
2522
1902
  }
1903
+ CHECK_GLERROR
2523
1904
  return Qnil;
2524
1905
  }
2525
1906
 
2526
- GL_SIMPLE_FUNC(PolygonOffset,2,GLfloat,NUM2DBL)
2527
-
2528
- static VALUE
2529
- gl_CopyTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
2530
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
2531
- {
2532
- GLenum target;
2533
- GLint level;
2534
- GLenum internalformat;
2535
- GLint x;
2536
- GLint y;
2537
- GLsizei width;
2538
- GLint border;
2539
- target = (GLenum)NUM2INT(arg1);
2540
- level = (GLint)NUM2INT(arg2);
2541
- internalformat = (GLenum)NUM2INT(arg3);
2542
- x = (GLint)NUM2INT(arg4);
2543
- y = (GLint)NUM2INT(arg5);
2544
- width = (GLsizei)NUM2UINT(arg6);
2545
- border = (GLint)NUM2INT(arg7);
2546
- glCopyTexImage1D(target,level,internalformat,x,y,width,border);
2547
- return Qnil;
2548
- }
2549
-
2550
- static VALUE
2551
- gl_CopyTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
2552
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
2553
- {
2554
- GLenum target;
2555
- GLint level;
2556
- GLenum internalformat;
2557
- GLint x;
2558
- GLint y;
2559
- GLsizei width;
2560
- GLsizei height;
2561
- GLint border;
2562
- target = (GLenum)NUM2INT(arg1);
2563
- level = (GLint)NUM2INT(arg2);
2564
- internalformat = (GLenum)NUM2INT(arg3);
2565
- x = (GLint)NUM2INT(arg4);
2566
- y = (GLint)NUM2INT(arg5);
2567
- width = (GLsizei)NUM2UINT(arg6);
2568
- height = (GLsizei)NUM2UINT(arg7);
2569
- border = (GLint)NUM2INT(arg8);
2570
- glCopyTexImage2D(target,level,internalformat,x,y,width,height,border);
2571
- return Qnil;
2572
- }
2573
-
2574
- static VALUE
2575
- gl_CopyTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2576
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2577
- {
2578
- GLenum target;
2579
- GLint level;
2580
- GLint xoffset;
2581
- GLint x;
2582
- GLint y;
2583
- GLsizei width;
2584
- target = (GLenum)NUM2INT(arg1);
2585
- level = (GLint)NUM2INT(arg2);
2586
- xoffset = (GLint)NUM2INT(arg3);
2587
- x = (GLint)NUM2INT(arg4);
2588
- y = (GLint)NUM2INT(arg5);
2589
- width = (GLsizei)NUM2UINT(arg6);
2590
- glCopyTexSubImage1D(target,level,xoffset,x,y,width);
2591
- return Qnil;
2592
- }
2593
-
2594
- static VALUE
2595
- gl_CopyTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
2596
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
2597
- {
2598
- GLenum target;
2599
- GLint level;
2600
- GLint xoffset;
2601
- GLint yoffset;
2602
- GLint x;
2603
- GLint y;
2604
- GLsizei width;
2605
- GLsizei height;
2606
- target = (GLenum)NUM2INT(arg1);
2607
- level = (GLint)NUM2INT(arg2);
2608
- xoffset = (GLint)NUM2INT(arg3);
2609
- yoffset = (GLint)NUM2INT(arg4);
2610
- x = (GLint)NUM2INT(arg5);
2611
- y = (GLint)NUM2INT(arg6);
2612
- width = (GLsizei)NUM2UINT(arg7);
2613
- height = (GLsizei)NUM2UINT(arg8);
2614
- glCopyTexSubImage2D(target,level,xoffset,yoffset,x,y,width,height);
2615
- return Qnil;
2616
- }
2617
1907
 
2618
1908
  static VALUE
2619
1909
  gl_TexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
@@ -2625,6 +1915,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
2625
1915
  GLsizei width;
2626
1916
  GLenum format;
2627
1917
  GLenum type;
1918
+ VALUE data;
2628
1919
  target = (GLenum)NUM2INT(arg1);
2629
1920
  level = (GLint)NUM2INT(arg2);
2630
1921
  xoffset = (GLint)NUM2INT(arg3);
@@ -2634,13 +1925,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
2634
1925
 
2635
1926
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
2636
1927
  glTexSubImage1D(target,level,xoffset,width,format,type,(GLvoid *)NUM2INT(arg7));
1928
+ CHECK_GLERROR
2637
1929
  return Qnil;
2638
1930
  }
2639
-
2640
- Check_Type(arg7,T_STRING);
2641
- CheckDataSize(type,format,width,arg7);
2642
1931
 
2643
- glTexSubImage1D(target,level,xoffset,width,format,type,RSTRING(arg7)->ptr);
1932
+ data = pack_array_or_pass_string(type,arg7);
1933
+ CheckDataSize(type,format,width,data);
1934
+
1935
+ glTexSubImage1D(target,level,xoffset,width,format,type,RSTRING_PTR(data));
1936
+ CHECK_GLERROR
2644
1937
  return Qnil;
2645
1938
  }
2646
1939
 
@@ -2656,6 +1949,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
2656
1949
  GLsizei height;
2657
1950
  GLenum format;
2658
1951
  GLenum type;
1952
+ VALUE data;
2659
1953
  target = (GLenum)NUM2INT(arg1);
2660
1954
  level = (GLint)NUM2INT(arg2);
2661
1955
  xoffset = (GLint)NUM2INT(arg3);
@@ -2667,13 +1961,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
2667
1961
 
2668
1962
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
2669
1963
  glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,(GLvoid *)NUM2INT(arg9));
1964
+ CHECK_GLERROR
2670
1965
  return Qnil;
2671
1966
  }
2672
-
2673
- Check_Type(arg9,T_STRING);
2674
- CheckDataSize(type,format,width*height,arg9);
2675
1967
 
2676
- glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,(RSTRING(arg9)->ptr));
1968
+ data = pack_array_or_pass_string(type,arg9);
1969
+ CheckDataSize(type,format,width*height,data);
1970
+
1971
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,RSTRING_PTR(data));
1972
+ CHECK_GLERROR
2677
1973
  return Qnil;
2678
1974
  }
2679
1975
 
@@ -2686,86 +1982,30 @@ VALUE obj,arg1;
2686
1982
  GLsizei size;
2687
1983
  GLboolean r;
2688
1984
  VALUE retary;
1985
+ VALUE ary;
2689
1986
  int i;
2690
- Check_Type(arg1,T_ARRAY);
2691
- size = RARRAY(arg1)->len;
1987
+ ary = rb_Array(arg1);
1988
+ size = RARRAY(ary)->len;
2692
1989
  textures = ALLOC_N(GLuint,size);
2693
1990
  residences = ALLOC_N(GLboolean,size);
2694
- ary2cuint(arg1,textures,size);
1991
+ ary2cuint(ary,textures,size);
2695
1992
  r = glAreTexturesResident(size,textures,residences);
2696
1993
  retary = rb_ary_new2(size);
2697
1994
  if (r==GL_TRUE) { /* all are resident */
2698
1995
  for(i=0;i<size;i++)
2699
- rb_ary_push(retary, INT2NUM(GL_TRUE));
1996
+ rb_ary_push(retary, GLBOOL2RUBY(GL_TRUE));
2700
1997
  } else {
2701
1998
  for(i=0;i<size;i++)
2702
- rb_ary_push(retary, INT2NUM(residences[i]));
1999
+ rb_ary_push(retary, GLBOOL2RUBY(residences[i]));
2703
2000
  }
2704
2001
  xfree(textures);
2705
2002
  xfree(residences);
2003
+ CHECK_GLERROR
2706
2004
  return retary;
2707
2005
  }
2708
2006
 
2709
- static VALUE
2710
- gl_BindTexture(obj,arg1,arg2)
2711
- VALUE obj,arg1,arg2;
2712
- {
2713
- GLenum target;
2714
- GLuint texture;
2715
- target = (GLenum)NUM2INT(arg1);
2716
- texture = (GLuint)NUM2UINT(arg2);
2717
- glBindTexture(target,texture);
2718
- return Qnil;
2719
- }
2720
-
2721
- static VALUE
2722
- gl_DeleteTextures(obj,arg1)
2723
- VALUE obj,arg1;
2724
- {
2725
- GLsizei n;
2726
- GLuint *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
- }
2738
- return Qnil;
2739
- }
2740
-
2741
- static VALUE
2742
- gl_GenTextures(obj,arg1)
2743
- VALUE obj,arg1;
2744
- {
2745
- GLsizei n;
2746
- GLuint *textures;
2747
- RArray *ret;
2748
- int i;
2749
- n = (GLsizei)NUM2UINT(arg1);
2750
- textures = ALLOC_N(GLuint, n);
2751
- glGenTextures(n, textures);
2752
- ret = RARRAY(rb_ary_new2(n));
2753
- for (i = 0; i < n; i++)
2754
- rb_ary_push((VALUE)ret, INT2NUM(textures[i]));
2755
- xfree(textures);
2756
- return (VALUE)ret;
2757
- }
2758
-
2759
- static VALUE
2760
- gl_IsTexture(obj,arg1)
2761
- VALUE obj,arg1;
2762
- {
2763
- GLuint texture;
2764
- GLboolean ret;
2765
- texture = (GLuint)NUM2UINT(arg1);
2766
- ret = glIsTexture(texture);
2767
- return INT2NUM(ret);
2768
- }
2007
+ GL_FUNC_GENOBJECTS(GenTextures)
2008
+ GL_FUNC_DELETEOBJECTS(DeleteTextures)
2769
2009
 
2770
2010
  static VALUE
2771
2011
  gl_PrioritizeTextures(obj,arg1,arg2)
@@ -2785,6 +2025,7 @@ VALUE obj,arg1,arg2;
2785
2025
  glPrioritizeTextures(size,textures,priorities);
2786
2026
  xfree(textures);
2787
2027
  xfree(priorities);
2028
+ CHECK_GLERROR
2788
2029
  return Qnil;
2789
2030
  }
2790
2031
 
@@ -2796,6 +2037,7 @@ VALUE obj,arg1;
2796
2037
  Check_Type(arg1,T_ARRAY);
2797
2038
  ary2cubyte(arg1,c,1);
2798
2039
  glIndexubv(c);
2040
+ CHECK_GLERROR
2799
2041
  return Qnil;
2800
2042
  }
2801
2043
 
@@ -2824,7 +2066,7 @@ VALUE obj; \
2824
2066
  gl_Color4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
2825
2067
  break; \
2826
2068
  default: \
2827
- rb_raise(rb_eArgError, "array length:%d", ary->len); \
2069
+ rb_raise(rb_eArgError, "array length:%li", ary->len); \
2828
2070
  } \
2829
2071
  } \
2830
2072
  else \
@@ -2871,7 +2113,7 @@ VALUE obj; \
2871
2113
  gl_Normal3##_type_(obj,ary->ptr[0], ary->ptr[1],ary->ptr[2]); \
2872
2114
  break; \
2873
2115
  default: \
2874
- rb_raise(rb_eArgError, "array length:%d", ary->len); \
2116
+ rb_raise(rb_eArgError, "array length:%li", ary->len); \
2875
2117
  } \
2876
2118
  } \
2877
2119
  else \
@@ -2965,7 +2207,7 @@ VALUE obj; \
2965
2207
  gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],ary2->ptr[0],ary2->ptr[1]); \
2966
2208
  break; \
2967
2209
  default: \
2968
- rb_raise(rb_eArgError, "array length:%d", ary->len); \
2210
+ rb_raise(rb_eArgError, "array length:%li", ary->len); \
2969
2211
  } \
2970
2212
  } \
2971
2213
  else \
@@ -3066,7 +2308,7 @@ VALUE obj; \
3066
2308
  gl_Vertex4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
3067
2309
  break; \
3068
2310
  default: \
3069
- rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%d", ary->len); \
2311
+ rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%li", ary->len); \
3070
2312
  } \
3071
2313
  } \
3072
2314
  else \
@@ -3190,7 +2432,7 @@ void gl_init_functions_1_0__1_1(VALUE module)
3190
2432
  rb_define_module_function(module, "glNewList", gl_NewList, 2);
3191
2433
  rb_define_module_function(module, "glEndList", gl_EndList, 0);
3192
2434
  rb_define_module_function(module, "glCallList", gl_CallList, 1);
3193
- rb_define_module_function(module, "glCallLists", gl_CallLists, 1);
2435
+ rb_define_module_function(module, "glCallLists", gl_CallLists, 2);
3194
2436
  rb_define_module_function(module, "glDeleteLists", gl_DeleteLists, 2);
3195
2437
  rb_define_module_function(module, "glGenLists", gl_GenLists, 1);
3196
2438
  rb_define_module_function(module, "glListBase", gl_ListBase, 1);