ruby-opengl 0.50.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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);