ruby-opengl 0.50.0 → 0.60.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/Rakefile +15 -11
  2. data/doc/build_install.txt +10 -6
  3. data/doc/extensions.txt.in +348 -0
  4. data/doc/history.txt +4 -0
  5. data/doc/roadmap.txt +4 -6
  6. data/doc/scientific_use.txt +7 -0
  7. data/doc/supplies/page_template.html +2 -1
  8. data/doc/thanks.txt +5 -0
  9. data/doc/tutorial.txt +431 -121
  10. data/examples/NeHe/nehe_lesson02.rb +1 -1
  11. data/examples/NeHe/nehe_lesson03.rb +1 -1
  12. data/examples/NeHe/nehe_lesson04.rb +1 -1
  13. data/examples/NeHe/nehe_lesson05.rb +1 -1
  14. data/examples/NeHe/nehe_lesson36.rb +1 -1
  15. data/examples/OrangeBook/brick.rb +3 -15
  16. data/examples/OrangeBook/particle.rb +2 -20
  17. data/examples/RedBook/aapoly.rb +1 -1
  18. data/examples/RedBook/aargb.rb +2 -2
  19. data/examples/RedBook/accanti.rb +1 -1
  20. data/examples/RedBook/accpersp.rb +1 -1
  21. data/examples/RedBook/alpha.rb +2 -2
  22. data/examples/RedBook/alpha3D.rb +1 -1
  23. data/examples/RedBook/bezcurve.rb +1 -1
  24. data/examples/RedBook/bezmesh.rb +1 -1
  25. data/examples/RedBook/checker.rb +1 -1
  26. data/examples/RedBook/clip.rb +1 -1
  27. data/examples/RedBook/colormat.rb +1 -1
  28. data/examples/RedBook/cube.rb +1 -1
  29. data/examples/RedBook/depthcue.rb +1 -1
  30. data/examples/RedBook/dof.rb +1 -1
  31. data/examples/RedBook/double.rb +1 -1
  32. data/examples/RedBook/drawf.rb +1 -1
  33. data/examples/RedBook/feedback.rb +1 -1
  34. data/examples/RedBook/fog.rb +1 -1
  35. data/examples/RedBook/font.rb +2 -2
  36. data/examples/RedBook/hello.rb +1 -1
  37. data/examples/RedBook/image.rb +4 -4
  38. data/examples/RedBook/lines.rb +1 -1
  39. data/examples/RedBook/list.rb +1 -1
  40. data/examples/RedBook/material.rb +1 -1
  41. data/examples/RedBook/mipmap.rb +1 -1
  42. data/examples/RedBook/model.rb +1 -1
  43. data/examples/RedBook/movelight.rb +1 -1
  44. data/examples/RedBook/pickdepth.rb +1 -1
  45. data/examples/RedBook/planet.rb +5 -5
  46. data/examples/RedBook/quadric.rb +1 -1
  47. data/examples/RedBook/robot.rb +5 -5
  48. data/examples/RedBook/select.rb +1 -1
  49. data/examples/RedBook/smooth.rb +1 -1
  50. data/examples/RedBook/stencil.rb +1 -1
  51. data/examples/RedBook/stroke.rb +2 -2
  52. data/examples/RedBook/surface.rb +1 -1
  53. data/examples/RedBook/teaambient.rb +1 -1
  54. data/examples/RedBook/teapots.rb +1 -1
  55. data/examples/RedBook/tess.rb +1 -1
  56. data/examples/RedBook/texbind.rb +1 -1
  57. data/examples/RedBook/texgen.rb +5 -5
  58. data/examples/RedBook/texturesurf.rb +1 -1
  59. data/examples/RedBook/varray.rb +1 -1
  60. data/examples/RedBook/wrap.rb +5 -5
  61. data/examples/misc/OGLBench.rb +337 -0
  62. data/examples/misc/anisotropic.rb +1 -1
  63. data/examples/misc/fbo_test.rb +356 -0
  64. data/examples/misc/font-glut.rb +1 -1
  65. data/examples/misc/glfwtest.rb +30 -0
  66. data/examples/misc/md2model.rb +15 -0
  67. data/examples/misc/plane.rb +1 -1
  68. data/examples/misc/readpixel.rb +1 -1
  69. data/examples/misc/sdltest.rb +34 -0
  70. data/examples/misc/trislam.rb +828 -0
  71. data/ext/common/common.h +126 -218
  72. data/ext/common/conv.h +244 -0
  73. data/ext/common/funcdef.h +280 -0
  74. data/ext/common/gl-error.h +23 -0
  75. data/ext/common/gl-types.h +14 -0
  76. data/ext/gl/gl-1.0-1.1.c +497 -1255
  77. data/ext/gl/gl-1.2.c +121 -304
  78. data/ext/gl/gl-1.3.c +78 -339
  79. data/ext/gl/gl-1.4.c +102 -164
  80. data/ext/gl/gl-1.5.c +42 -173
  81. data/ext/gl/gl-2.0.c +273 -1039
  82. data/ext/gl/gl-2.1.c +15 -19
  83. data/ext/gl/gl-enums.c +3 -2
  84. data/ext/gl/gl-error.c +104 -0
  85. data/ext/gl/gl-ext-3dfx.c +27 -0
  86. data/ext/gl/gl-ext-arb.c +812 -12
  87. data/ext/gl/gl-ext-ati.c +41 -0
  88. data/ext/gl/gl-ext-ext.c +791 -119
  89. data/ext/gl/gl-ext-gremedy.c +41 -0
  90. data/ext/gl/gl-ext-nv.c +679 -0
  91. data/ext/gl/gl.c +48 -28
  92. data/ext/gl/mkrf_conf.rb +13 -10
  93. data/ext/glu/glu-enums.c +3 -2
  94. data/ext/glu/glu.c +136 -41
  95. data/ext/glu/mkrf_conf.rb +15 -12
  96. data/ext/glut/glut.c +37 -80
  97. data/ext/glut/mkrf_conf.rb +17 -13
  98. data/lib/opengl.rb +29 -53
  99. data/test/tc_common.rb +9 -3
  100. data/test/tc_ext_arb.rb +397 -3
  101. data/test/tc_ext_ati.rb +33 -0
  102. data/test/tc_ext_ext.rb +479 -2
  103. data/test/tc_ext_gremedy.rb +36 -0
  104. data/test/tc_ext_nv.rb +357 -0
  105. data/test/tc_func_10_11.rb +93 -67
  106. data/test/tc_func_12.rb +11 -11
  107. data/test/tc_func_13.rb +38 -18
  108. data/test/tc_func_14.rb +2 -2
  109. data/test/tc_func_15.rb +10 -10
  110. data/test/tc_func_20.rb +20 -20
  111. data/test/tc_func_21.rb +53 -22
  112. data/test/tc_glu.rb +9 -4
  113. data/test/tc_misc.rb +15 -2
  114. metadata +22 -8
  115. data/doc/extensions.txt +0 -361
  116. data/examples/RedBook/aaindex.rb +0 -97
  117. data/examples/misc/smooth.rb +0 -42
  118. data/examples/misc/test.rb +0 -65
@@ -19,8 +19,19 @@
19
19
 
20
20
  /* OpenGL 1.2 functions */
21
21
 
22
- GL_SIMPLE_FUNC_LOAD(BlendColor,4,GLclampf,NUM2DBL)
23
- GL_SIMPLE_FUNC_LOAD(BlendEquation,1,GLenum,NUM2INT)
22
+ GL_FUNC_LOAD_4(BlendColor,GLvoid, GLclampf,GLclampf,GLclampf,GLclampf, "1.2")
23
+ GL_FUNC_LOAD_1(BlendEquation,GLvoid, GLenum, "1.2")
24
+ GL_FUNC_LOAD_5(CopyColorTable,GLvoid, GLenum,GLenum,GLint,GLint,GLsizei, "1.2")
25
+ GL_FUNC_LOAD_5(CopyColorSubTable,GLvoid, GLenum,GLsizei,GLint,GLint,GLsizei, "1.2")
26
+ GL_FUNC_LOAD_3(ConvolutionParameterf,GLvoid, GLenum,GLenum,GLfloat, "1.2")
27
+ GL_FUNC_LOAD_3(ConvolutionParameteri,GLvoid, GLenum,GLenum,GLint, "1.2")
28
+ GL_FUNC_LOAD_5(CopyConvolutionFilter1D,GLvoid, GLenum,GLenum,GLint,GLint,GLsizei, "1.2")
29
+ GL_FUNC_LOAD_6(CopyConvolutionFilter2D,GLvoid, GLenum,GLenum,GLint,GLint,GLsizei,GLsizei, "1.2")
30
+ GL_FUNC_LOAD_4(Histogram,GLvoid, GLenum,GLsizei,GLenum,GLboolean, "1.2")
31
+ GL_FUNC_LOAD_3(Minmax,GLvoid, GLenum,GLenum,GLboolean, "1.2")
32
+ GL_FUNC_LOAD_1(ResetHistogram,GLvoid, GLenum, "1.2")
33
+ GL_FUNC_LOAD_1(ResetMinmax,GLvoid, GLenum, "1.2")
34
+ GL_FUNC_LOAD_9(CopyTexSubImage3D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei, "1.2")
24
35
 
25
36
  static void (APIENTRY * fptr_glDrawRangeElements)(GLenum,GLuint,GLuint,GLsizei,GLenum,GLvoid*);
26
37
  static VALUE
@@ -32,7 +43,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
32
43
  GLuint end;
33
44
  GLsizei count;
34
45
  GLenum type;
35
- LOAD_GL_FUNC(glDrawRangeElements)
46
+ LOAD_GL_FUNC(glDrawRangeElements,"1.2")
36
47
  mode = (GLenum)NUM2INT(arg1);
37
48
  start = (GLuint)NUM2UINT(arg2);
38
49
  end = (GLuint)NUM2UINT(arg3);
@@ -41,9 +52,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
41
52
  if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
42
53
  fptr_glDrawRangeElements(mode, start, end, count, type, (GLvoid *)NUM2INT(arg6));
43
54
  } else {
44
- Check_Type(arg6, T_STRING);
45
- fptr_glDrawRangeElements(mode, start, end, count, type, RSTRING(arg6)->ptr);
55
+ VALUE data;
56
+ data = pack_array_or_pass_string(type,arg6);
57
+ fptr_glDrawRangeElements(mode, start, end, count, type, RSTRING_PTR(data));
46
58
  }
59
+ CHECK_GLERROR
47
60
  return Qnil;
48
61
  }
49
62
 
@@ -57,7 +70,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
57
70
  GLsizei width;
58
71
  GLenum format;
59
72
  GLenum type;
60
- LOAD_GL_FUNC(glColorTable)
73
+ LOAD_GL_FUNC(glColorTable,"1.2")
61
74
  target = (GLenum)NUM2INT(arg1);
62
75
  internalformat = (GLenum)NUM2INT(arg2);
63
76
  width = (GLsizei)NUM2UINT(arg3);
@@ -66,10 +79,12 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
66
79
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
67
80
  fptr_glColorTable(target,internalformat,width,format,type,(GLvoid *)NUM2INT(arg6));
68
81
  } else {
69
- Check_Type(arg6,T_STRING);
70
- CheckDataSize(type,format,width,arg6);
71
- fptr_glColorTable(target,internalformat,width,format,type,RSTRING(arg6)->ptr);
82
+ VALUE data;
83
+ data = pack_array_or_pass_string(type,arg6);
84
+ CheckDataSize(type,format,width,data);
85
+ fptr_glColorTable(target,internalformat,width,format,type,RSTRING_PTR(data));
72
86
  }
87
+ CHECK_GLERROR
73
88
  return Qnil;
74
89
  }
75
90
 
@@ -81,12 +96,13 @@ VALUE obj,arg1,arg2,arg3;
81
96
  GLenum target;
82
97
  GLenum pname;
83
98
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
84
- LOAD_GL_FUNC(glColorTableParameterfv)
99
+ LOAD_GL_FUNC(glColorTableParameterfv,"1.2")
85
100
  target = (GLenum)NUM2INT(arg1);
86
101
  pname = (GLenum)NUM2INT(arg2);
87
102
  Check_Type(arg3,T_ARRAY);
88
103
  ary2cflt(arg3,params,4);
89
104
  fptr_glColorTableParameterfv(target,pname,params);
105
+ CHECK_GLERROR
90
106
  return Qnil;
91
107
  }
92
108
 
@@ -98,34 +114,16 @@ VALUE obj,arg1,arg2,arg3;
98
114
  GLenum target;
99
115
  GLenum pname;
100
116
  GLint params[4] = {0,0,0,0};
101
- LOAD_GL_FUNC(glColorTableParameteriv)
117
+ LOAD_GL_FUNC(glColorTableParameteriv,"1.2")
102
118
  target = (GLenum)NUM2INT(arg1);
103
119
  pname = (GLenum)NUM2INT(arg2);
104
120
  Check_Type(arg3,T_ARRAY);
105
121
  ary2cint(arg3,params,4);
106
122
  fptr_glColorTableParameteriv(target,pname,params);
123
+ CHECK_GLERROR
107
124
  return Qnil;
108
125
  }
109
126
 
110
- static void (APIENTRY * fptr_glCopyColorTable)(GLenum,GLenum,GLint,GLint,GLsizei);
111
- static VALUE
112
- gl_CopyColorTable(obj,arg1,arg2,arg3,arg4,arg5)
113
- VALUE obj,arg1,arg2,arg3,arg4,arg5;
114
- {
115
- GLenum target;
116
- GLenum internalformat;
117
- GLint x;
118
- GLint y;
119
- GLsizei width;
120
- LOAD_GL_FUNC(glCopyColorTable)
121
- target = (GLenum)NUM2INT(arg1);
122
- internalformat = (GLenum)NUM2INT(arg2);
123
- x = (GLint)NUM2INT(arg3);
124
- y = (GLint)NUM2INT(arg4);
125
- width = (GLsizei)NUM2INT(arg5);
126
- fptr_glCopyColorTable(target,internalformat,x,y,width);
127
- return Qnil;
128
- }
129
127
 
130
128
  static void (APIENTRY * fptr_glGetColorTableParameterfv)(GLenum,GLenum,GLfloat *);
131
129
  static VALUE
@@ -136,9 +134,7 @@ VALUE obj,arg1,arg2;
136
134
  GLenum pname;
137
135
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
138
136
  GLsizei size;
139
- VALUE retary;
140
- int i;
141
- LOAD_GL_FUNC(glGetColorTableParameterfv)
137
+ LOAD_GL_FUNC(glGetColorTableParameterfv,"1.2")
142
138
  target = (GLenum)NUM2INT(arg1);
143
139
  pname = (GLenum)NUM2INT(arg2);
144
140
  switch (pname) {
@@ -151,10 +147,7 @@ VALUE obj,arg1,arg2;
151
147
  break;
152
148
  }
153
149
  fptr_glGetColorTableParameterfv(target,pname,params);
154
- retary = rb_ary_new2(size);
155
- for(i=0;i<size;i++)
156
- rb_ary_push(retary, rb_float_new(params[i]));
157
- return retary;
150
+ RET_ARRAY_OR_SINGLE(size,RETCONV_GLfloat,params)
158
151
  }
159
152
 
160
153
  static void (APIENTRY * fptr_glGetColorTableParameteriv)(GLenum,GLenum,GLint *);
@@ -166,9 +159,7 @@ VALUE obj,arg1,arg2;
166
159
  GLenum pname;
167
160
  GLint params[4] = {0,0,0,0};
168
161
  GLsizei size;
169
- VALUE retary;
170
- int i;
171
- LOAD_GL_FUNC(glGetColorTableParameteriv)
162
+ LOAD_GL_FUNC(glGetColorTableParameteriv,"1.2")
172
163
  target = (GLenum)NUM2INT(arg1);
173
164
  pname = (GLenum)NUM2INT(arg2);
174
165
  switch (pname) {
@@ -181,10 +172,7 @@ VALUE obj,arg1,arg2;
181
172
  break;
182
173
  }
183
174
  fptr_glGetColorTableParameteriv(target,pname,params);
184
- retary = rb_ary_new2(size);
185
- for(i=0;i<size;i++)
186
- rb_ary_push(retary, INT2NUM(params[i]));
187
- return retary;
175
+ RET_ARRAY_OR_SINGLE(size,RETCONV_GLint,params)
188
176
  }
189
177
 
190
178
  static void (APIENTRY * fptr_glGetColorTable)(GLenum,GLenum,GLenum,GLvoid *);
@@ -197,16 +185,18 @@ VALUE obj,arg1,arg2,arg3;
197
185
  GLenum type;
198
186
  GLsizei width = 0;
199
187
  VALUE data;
200
- LOAD_GL_FUNC(glGetColorTable)
201
- LOAD_GL_FUNC(glGetColorTableParameteriv)
188
+ LOAD_GL_FUNC(glGetColorTable,"1.2")
189
+ LOAD_GL_FUNC(glGetColorTableParameteriv,"1.2")
202
190
  target = (GLenum)NUM2INT(arg1);
203
191
  format = (GLenum)NUM2INT(arg2);
204
192
  type = (GLenum)NUM2INT(arg3);
205
193
  fptr_glGetColorTableParameteriv(target,GL_COLOR_TABLE_WIDTH,&width);
194
+ CHECK_GLERROR
206
195
  data = allocate_buffer_with_string(GetDataSize(type,format,width));
207
196
  FORCE_PIXEL_STORE_MODE
208
- fptr_glGetColorTable(target,format,type,(GLvoid*)RSTRING(data)->ptr);
197
+ fptr_glGetColorTable(target,format,type,(GLvoid*)RSTRING_PTR(data));
209
198
  RESTORE_PIXEL_STORE_MODE
199
+ CHECK_GLERROR
210
200
  return data;
211
201
  }
212
202
 
@@ -220,7 +210,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
220
210
  GLsizei count;
221
211
  GLenum format;
222
212
  GLenum type;
223
- LOAD_GL_FUNC(glColorSubTable)
213
+ LOAD_GL_FUNC(glColorSubTable,"1.2")
224
214
  target = (GLenum)NUM2INT(arg1);
225
215
  start = (GLsizei)NUM2UINT(arg2);
226
216
  count = (GLsizei)NUM2UINT(arg3);
@@ -229,30 +219,12 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
229
219
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
230
220
  fptr_glColorSubTable(target,start,count,format,type,(GLvoid *)NUM2INT(arg6));
231
221
  } else {
232
- Check_Type(arg6,T_STRING);
233
- CheckDataSize(type,format,count,arg6);
234
- fptr_glColorSubTable(target,start,count,format,type,RSTRING(arg6)->ptr);
222
+ VALUE data;
223
+ data = pack_array_or_pass_string(type,arg6);
224
+ CheckDataSize(type,format,count,data);
225
+ fptr_glColorSubTable(target,start,count,format,type,RSTRING_PTR(data));
235
226
  }
236
- return Qnil;
237
- }
238
-
239
- static void (APIENTRY * fptr_glCopyColorSubTable)(GLenum,GLsizei,GLint,GLint,GLsizei);
240
- static VALUE
241
- gl_CopyColorSubTable(obj,arg1,arg2,arg3,arg4,arg5)
242
- VALUE obj,arg1,arg2,arg3,arg4,arg5;
243
- {
244
- GLenum target;
245
- GLsizei start;
246
- GLint x;
247
- GLint y;
248
- GLsizei width;
249
- LOAD_GL_FUNC(glCopyColorSubTable)
250
- target = (GLenum)NUM2INT(arg1);
251
- start = (GLsizei)NUM2UINT(arg2);
252
- x = (GLint)NUM2INT(arg3);
253
- y = (GLint)NUM2INT(arg4);
254
- width = (GLsizei)NUM2UINT(arg5);
255
- fptr_glCopyColorSubTable(target,start,x,y,width);
227
+ CHECK_GLERROR
256
228
  return Qnil;
257
229
  }
258
230
 
@@ -266,7 +238,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
266
238
  GLsizei width;
267
239
  GLenum format;
268
240
  GLenum type;
269
- LOAD_GL_FUNC(glConvolutionFilter1D)
241
+ LOAD_GL_FUNC(glConvolutionFilter1D,"1.2")
270
242
  target = (GLenum)NUM2INT(arg1);
271
243
  internalformat = (GLenum)NUM2INT(arg2);
272
244
  width = (GLsizei)NUM2UINT(arg3);
@@ -275,10 +247,12 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
275
247
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
276
248
  fptr_glConvolutionFilter1D(target,internalformat,width,format,type,(GLvoid *)NUM2INT(arg6));
277
249
  } else {
278
- Check_Type(arg6,T_STRING);
279
- CheckDataSize(type,format,width,arg6);
280
- fptr_glConvolutionFilter1D(target,internalformat,width,format,type,RSTRING(arg6)->ptr);
250
+ VALUE data;
251
+ data = pack_array_or_pass_string(type,arg6);
252
+ CheckDataSize(type,format,width,data);
253
+ fptr_glConvolutionFilter1D(target,internalformat,width,format,type,RSTRING_PTR(data));
281
254
  }
255
+ CHECK_GLERROR
282
256
  return Qnil;
283
257
  }
284
258
 
@@ -293,7 +267,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
293
267
  GLsizei height;
294
268
  GLenum format;
295
269
  GLenum type;
296
- LOAD_GL_FUNC(glConvolutionFilter2D)
270
+ LOAD_GL_FUNC(glConvolutionFilter2D,"1.2")
297
271
  target = (GLenum)NUM2INT(arg1);
298
272
  internalformat = (GLenum)NUM2INT(arg2);
299
273
  width = (GLsizei)NUM2UINT(arg3);
@@ -303,26 +277,13 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
303
277
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
304
278
  fptr_glConvolutionFilter2D(target,internalformat,width,height,format,type,(GLvoid *)NUM2INT(arg7));
305
279
  } else {
280
+ VALUE data;
281
+ data = pack_array_or_pass_string(type,arg7);
306
282
  Check_Type(arg7,T_STRING);
307
- CheckDataSize(type,format,width*height,arg7);
308
- fptr_glConvolutionFilter2D(target,internalformat,width,height,format,type,RSTRING(arg7)->ptr);
283
+ CheckDataSize(type,format,width*height,data);
284
+ fptr_glConvolutionFilter2D(target,internalformat,width,height,format,type,RSTRING_PTR(data));
309
285
  }
310
- return Qnil;
311
- }
312
-
313
- static void (APIENTRY * fptr_glConvolutionParameterf)(GLenum,GLenum,GLfloat);
314
- static VALUE
315
- gl_ConvolutionParameterf(obj,arg1,arg2,arg3)
316
- VALUE obj,arg1,arg2,arg3;
317
- {
318
- GLenum target;
319
- GLenum pname;
320
- GLfloat params;
321
- LOAD_GL_FUNC(glConvolutionParameterf)
322
- target = (GLenum)NUM2INT(arg1);
323
- pname = (GLenum)NUM2INT(arg2);
324
- params = (GLfloat)NUM2INT(arg3);
325
- fptr_glConvolutionParameterf(target,pname,params);
286
+ CHECK_GLERROR
326
287
  return Qnil;
327
288
  }
328
289
 
@@ -334,28 +295,13 @@ VALUE obj,arg1,arg2,arg3;
334
295
  GLenum target;
335
296
  GLenum pname;
336
297
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
337
- LOAD_GL_FUNC(glConvolutionParameterfv)
298
+ LOAD_GL_FUNC(glConvolutionParameterfv,"1.2")
338
299
  target = (GLenum)NUM2INT(arg1);
339
300
  pname = (GLenum)NUM2INT(arg2);
340
301
  Check_Type(arg3,T_ARRAY);
341
302
  ary2cflt(arg3,params,4);
342
303
  fptr_glConvolutionParameterfv(target,pname,params);
343
- return Qnil;
344
- }
345
-
346
- static void (APIENTRY * fptr_glConvolutionParameteri)(GLenum,GLenum,GLint);
347
- static VALUE
348
- gl_ConvolutionParameteri(obj,arg1,arg2,arg3)
349
- VALUE obj,arg1,arg2,arg3;
350
- {
351
- GLenum target;
352
- GLenum pname;
353
- GLint params;
354
- LOAD_GL_FUNC(glConvolutionParameteri)
355
- target = (GLenum)NUM2INT(arg1);
356
- pname = (GLenum)NUM2INT(arg2);
357
- params = (GLint)NUM2INT(arg3);
358
- fptr_glConvolutionParameteri(target,pname,params);
304
+ CHECK_GLERROR
359
305
  return Qnil;
360
306
  }
361
307
 
@@ -367,54 +313,13 @@ VALUE obj,arg1,arg2,arg3;
367
313
  GLenum target;
368
314
  GLenum pname;
369
315
  GLint params[4] = {0,0,0,0};
370
- LOAD_GL_FUNC(glConvolutionParameteriv)
316
+ LOAD_GL_FUNC(glConvolutionParameteriv,"1.2")
371
317
  target = (GLenum)NUM2INT(arg1);
372
318
  pname = (GLenum)NUM2INT(arg2);
373
319
  Check_Type(arg3,T_ARRAY);
374
320
  ary2cint(arg3,params,4);
375
321
  fptr_glConvolutionParameteriv(target,pname,params);
376
- return Qnil;
377
- }
378
-
379
- static void (APIENTRY * fptr_glCopyConvolutionFilter1D)(GLenum,GLenum,GLint,GLint,GLsizei);
380
- static VALUE
381
- gl_CopyConvolutionFilter1D(obj,arg1,arg2,arg3,arg4,arg5)
382
- VALUE obj,arg1,arg2,arg3,arg4,arg5;
383
- {
384
- GLenum target;
385
- GLenum internalformat;
386
- GLint x;
387
- GLint y;
388
- GLsizei width;
389
- LOAD_GL_FUNC(glCopyConvolutionFilter1D)
390
- target = (GLenum)NUM2INT(arg1);
391
- internalformat = (GLenum)NUM2INT(arg2);
392
- x = (GLint)NUM2INT(arg3);
393
- y = (GLint)NUM2INT(arg4);
394
- width = (GLsizei)NUM2UINT(arg5);
395
- fptr_glCopyConvolutionFilter1D(target,internalformat,x,y,width);
396
- return Qnil;
397
- }
398
-
399
- static void (APIENTRY * fptr_glCopyConvolutionFilter2D)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei);
400
- static VALUE
401
- gl_CopyConvolutionFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
402
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
403
- {
404
- GLenum target;
405
- GLenum internalformat;
406
- GLint x;
407
- GLint y;
408
- GLsizei width;
409
- GLsizei height;
410
- LOAD_GL_FUNC(glCopyConvolutionFilter2D)
411
- target = (GLenum)NUM2INT(arg1);
412
- internalformat = (GLenum)NUM2INT(arg2);
413
- x = (GLint)NUM2INT(arg3);
414
- y = (GLint)NUM2INT(arg4);
415
- width = (GLsizei)NUM2UINT(arg5);
416
- height = (GLsizei)NUM2UINT(arg6);
417
- fptr_glCopyConvolutionFilter2D(target,internalformat,x,y,width,height);
322
+ CHECK_GLERROR
418
323
  return Qnil;
419
324
  }
420
325
 
@@ -427,9 +332,7 @@ VALUE obj,arg1,arg2;
427
332
  GLenum pname;
428
333
  GLfloat params[4] = {0.0,0.0,0.0,0.0};
429
334
  GLsizei size;
430
- int i;
431
- VALUE retary;
432
- LOAD_GL_FUNC(glGetConvolutionParameterfv)
335
+ LOAD_GL_FUNC(glGetConvolutionParameterfv,"1.2")
433
336
  target = (GLenum)NUM2INT(arg1);
434
337
  pname = (GLenum)NUM2INT(arg2);
435
338
  switch(pname) {
@@ -443,10 +346,7 @@ VALUE obj,arg1,arg2;
443
346
  break;
444
347
  }
445
348
  fptr_glGetConvolutionParameterfv(target,pname,params);
446
- retary = rb_ary_new2(size);
447
- for(i=0;i<size;i++)
448
- rb_ary_push(retary, rb_float_new(params[i]));
449
- return retary;
349
+ RET_ARRAY_OR_SINGLE(size,RETCONV_GLfloat,params)
450
350
  }
451
351
 
452
352
  static void (APIENTRY * fptr_glGetConvolutionParameteriv)(GLenum,GLenum,GLint *);
@@ -458,9 +358,7 @@ VALUE obj,arg1,arg2;
458
358
  GLenum pname;
459
359
  GLint params[4] = {0,0,0,0};
460
360
  GLsizei size;
461
- int i;
462
- VALUE retary;
463
- LOAD_GL_FUNC(glGetConvolutionParameteriv)
361
+ LOAD_GL_FUNC(glGetConvolutionParameteriv,"1.2")
464
362
  target = (GLenum)NUM2INT(arg1);
465
363
  pname = (GLenum)NUM2INT(arg2);
466
364
  switch(pname) {
@@ -474,10 +372,7 @@ VALUE obj,arg1,arg2;
474
372
  break;
475
373
  }
476
374
  fptr_glGetConvolutionParameteriv(target,pname,params);
477
- retary = rb_ary_new2(size);
478
- for(i=0;i<size;i++)
479
- rb_ary_push(retary, INT2NUM(params[i]));
480
- return retary;
375
+ RET_ARRAY_OR_SINGLE(size,RETCONV_GLint,params)
481
376
  }
482
377
 
483
378
  static void (APIENTRY * fptr_glGetConvolutionFilter)(GLenum,GLenum,GLenum,GLvoid *);
@@ -490,14 +385,12 @@ VALUE obj;
490
385
  GLenum target;
491
386
  GLenum format;
492
387
  GLenum type;
493
- //GLsizei format_size;
494
- //GLsizei type_size;
495
388
  GLint size = 0;
496
389
  VALUE data;
497
390
  VALUE args[4];
498
391
  int numargs;
499
- LOAD_GL_FUNC(glGetConvolutionFilter)
500
- LOAD_GL_FUNC(glGetConvolutionParameteriv)
392
+ LOAD_GL_FUNC(glGetConvolutionFilter,"1.2")
393
+ LOAD_GL_FUNC(glGetConvolutionParameteriv,"1.2")
501
394
  numargs = rb_scan_args(argc, argv, "31", &args[0], &args[1], &args[2], &args[3]);
502
395
  target = (GLenum)NUM2INT(args[0]);
503
396
  format = (GLenum)NUM2INT(args[1]);
@@ -517,10 +410,12 @@ VALUE obj;
517
410
  fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_HEIGHT,&size);
518
411
  size *=tmp;
519
412
  }
413
+ CHECK_GLERROR
520
414
  data = allocate_buffer_with_string(GetDataSize(type,format,size));
521
415
  FORCE_PIXEL_STORE_MODE
522
- fptr_glGetConvolutionFilter(target,format,type,(GLvoid*)RSTRING(data)->ptr);
416
+ fptr_glGetConvolutionFilter(target,format,type,(GLvoid*)RSTRING_PTR(data));
523
417
  RESTORE_PIXEL_STORE_MODE
418
+ CHECK_GLERROR
524
419
  return data;
525
420
  case 4:
526
421
  if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
@@ -529,6 +424,7 @@ VALUE obj;
529
424
  FORCE_PIXEL_STORE_MODE
530
425
  fptr_glGetConvolutionFilter(target,format,type,(GLvoid*)NUM2INT(args[3]));
531
426
  RESTORE_PIXEL_STORE_MODE
427
+ CHECK_GLERROR
532
428
  return Qnil;
533
429
  }
534
430
  }
@@ -550,8 +446,8 @@ VALUE obj;
550
446
  VALUE retary;
551
447
  VALUE args[6];
552
448
  int numargs;
553
- LOAD_GL_FUNC(glGetSeparableFilter)
554
- LOAD_GL_FUNC(glGetConvolutionParameteriv)
449
+ LOAD_GL_FUNC(glGetSeparableFilter,"1.2")
450
+ LOAD_GL_FUNC(glGetConvolutionParameteriv,"1.2")
555
451
  numargs = rb_scan_args(argc, argv, "33", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5]);
556
452
  target = (GLenum)NUM2INT(args[0]);
557
453
  format = (GLenum)NUM2INT(args[1]);
@@ -565,14 +461,16 @@ VALUE obj;
565
461
 
566
462
  fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_WIDTH,&size_row);
567
463
  fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_HEIGHT,&size_column);
464
+ CHECK_GLERROR
568
465
  data_row = allocate_buffer_with_string(GetDataSize(type,format,size_row));
569
466
  data_column = allocate_buffer_with_string(GetDataSize(type,format,size_column));
570
467
  FORCE_PIXEL_STORE_MODE
571
- fptr_glGetSeparableFilter(target,format,type,(GLvoid*)RSTRING(data_row)->ptr,(GLvoid*)RSTRING(data_column)->ptr,0);
468
+ fptr_glGetSeparableFilter(target,format,type,(GLvoid*)RSTRING_PTR(data_row),(GLvoid*)RSTRING_PTR(data_column),0);
572
469
  RESTORE_PIXEL_STORE_MODE
573
470
  retary = rb_ary_new2(2);
574
471
  rb_ary_push(retary, data_row);
575
472
  rb_ary_push(retary, data_column);
473
+ CHECK_GLERROR
576
474
  return retary;
577
475
  break;
578
476
  case 6:
@@ -581,6 +479,7 @@ VALUE obj;
581
479
  FORCE_PIXEL_STORE_MODE
582
480
  fptr_glGetSeparableFilter(target,format,type,(GLvoid*)NUM2INT(args[3]),(GLvoid*)NUM2INT(args[4]),(GLvoid*)NUM2INT(args[5]));
583
481
  RESTORE_PIXEL_STORE_MODE
482
+ CHECK_GLERROR
584
483
  return Qnil;
585
484
  }
586
485
  }
@@ -596,7 +495,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
596
495
  GLsizei height;
597
496
  GLenum format;
598
497
  GLenum type;
599
- LOAD_GL_FUNC(glSeparableFilter2D)
498
+ LOAD_GL_FUNC(glSeparableFilter2D,"1.2")
600
499
  target = (GLenum)NUM2INT(arg1);
601
500
  internalformat = (GLenum)NUM2INT(arg2);
602
501
  width = (GLsizei)NUM2UINT(arg3);
@@ -606,12 +505,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
606
505
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
607
506
  fptr_glSeparableFilter2D(target,internalformat,width,height,format,type,(GLvoid *)NUM2INT(arg7),(GLvoid *)NUM2INT(arg8));
608
507
  } else {
609
- Check_Type(arg7,T_STRING);
610
- Check_Type(arg8,T_STRING);
611
- CheckDataSize(type,format,width,arg7);
612
- CheckDataSize(type,format,height,arg8);
613
- fptr_glSeparableFilter2D(target,internalformat,width,height,format,type,RSTRING(arg7)->ptr,RSTRING(arg8)->ptr);
508
+ VALUE data_1,data_2;
509
+ data_1 = pack_array_or_pass_string(type,arg7);
510
+ data_2 = pack_array_or_pass_string(type,arg8);
511
+
512
+ CheckDataSize(type,format,width,data_1);
513
+ CheckDataSize(type,format,height,data_2);
514
+ fptr_glSeparableFilter2D(target,internalformat,width,height,format,type,RSTRING_PTR(data_1),RSTRING_PTR(data_2));
614
515
  }
516
+ CHECK_GLERROR
615
517
  return Qnil;
616
518
  }
617
519
 
@@ -623,14 +525,12 @@ VALUE obj,arg1,arg2,arg3;
623
525
  GLenum target;
624
526
  GLenum pname;
625
527
  GLfloat params = 0.0;
626
- VALUE retary;
627
- LOAD_GL_FUNC(glGetHistogramParameterfv)
528
+ LOAD_GL_FUNC(glGetHistogramParameterfv,"1.2")
628
529
  target = (GLenum)NUM2INT(arg1);
629
530
  pname = (GLenum)NUM2INT(arg2);
630
531
  fptr_glGetHistogramParameterfv(target,pname,&params);
631
- retary = rb_ary_new2(1);
632
- rb_ary_push(retary, rb_float_new(params));
633
- return retary;
532
+ CHECK_GLERROR
533
+ return RETCONV_GLfloat(params);
634
534
  }
635
535
 
636
536
  static void (APIENTRY * fptr_glGetHistogramParameteriv)(GLenum,GLenum,GLint *);
@@ -641,14 +541,12 @@ VALUE obj,arg1,arg2,arg3;
641
541
  GLenum target;
642
542
  GLenum pname;
643
543
  GLint params = 0;
644
- VALUE retary;
645
- LOAD_GL_FUNC(glGetHistogramParameteriv)
544
+ LOAD_GL_FUNC(glGetHistogramParameteriv,"1.2")
646
545
  target = (GLenum)NUM2INT(arg1);
647
546
  pname = (GLenum)NUM2INT(arg2);
648
547
  fptr_glGetHistogramParameteriv(target,pname,&params);
649
- retary = rb_ary_new2(1);
650
- rb_ary_push(retary, INT2NUM(params));
651
- return retary;
548
+ CHECK_GLERROR
549
+ return cond_GLBOOL2RUBY(pname,params);
652
550
  }
653
551
 
654
552
  static void (APIENTRY * fptr_glGetHistogram)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
@@ -666,8 +564,8 @@ VALUE obj;
666
564
  VALUE data;
667
565
  VALUE args[5];
668
566
  int numargs;
669
- LOAD_GL_FUNC(glGetHistogram)
670
- LOAD_GL_FUNC(glGetHistogramParameteriv)
567
+ LOAD_GL_FUNC(glGetHistogram,"1.2")
568
+ LOAD_GL_FUNC(glGetHistogramParameteriv,"1.2")
671
569
  numargs = rb_scan_args(argc, argv, "41", &args[0], &args[1], &args[2], &args[3], &args[4]);
672
570
  target = (GLenum)NUM2INT(args[0]);
673
571
  reset = (GLboolean)NUM2INT(args[1]);
@@ -681,10 +579,12 @@ VALUE obj;
681
579
  rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
682
580
 
683
581
  fptr_glGetHistogramParameteriv(target,GL_HISTOGRAM_WIDTH,&size);
582
+ CHECK_GLERROR
684
583
  data = allocate_buffer_with_string(GetDataSize(type,format,size));
685
584
  FORCE_PIXEL_STORE_MODE
686
- fptr_glGetHistogram(target,reset,format,type,(GLvoid*)RSTRING(data)->ptr);
585
+ fptr_glGetHistogram(target,reset,format,type,(GLvoid*)RSTRING_PTR(data));
687
586
  RESTORE_PIXEL_STORE_MODE
587
+ CHECK_GLERROR
688
588
  return data;
689
589
  break;
690
590
  case 5:
@@ -694,6 +594,7 @@ VALUE obj;
694
594
  FORCE_PIXEL_STORE_MODE
695
595
  fptr_glGetHistogram(target,reset,format,type,(GLvoid*)NUM2INT(args[4]));
696
596
  RESTORE_PIXEL_STORE_MODE
597
+ CHECK_GLERROR
697
598
  return Qnil;
698
599
  }
699
600
  }
@@ -712,7 +613,7 @@ VALUE obj;
712
613
  VALUE data;
713
614
  VALUE args[5];
714
615
  int numargs;
715
- LOAD_GL_FUNC(glGetMinmax)
616
+ LOAD_GL_FUNC(glGetMinmax,"1.2")
716
617
  numargs = rb_scan_args(argc, argv, "41", &args[0], &args[1], &args[2], &args[3], &args[4]);
717
618
  target = (GLenum)NUM2INT(args[0]);
718
619
  reset = (GLboolean)NUM2INT(args[1]);
@@ -727,8 +628,9 @@ VALUE obj;
727
628
 
728
629
  data = allocate_buffer_with_string(GetDataSize(type,format,2));
729
630
  FORCE_PIXEL_STORE_MODE
730
- fptr_glGetMinmax(target,reset,format,type,(GLvoid*)RSTRING(data)->ptr);
631
+ fptr_glGetMinmax(target,reset,format,type,(GLvoid*)RSTRING_PTR(data));
731
632
  RESTORE_PIXEL_STORE_MODE
633
+ CHECK_GLERROR
732
634
  return data;
733
635
  break;
734
636
  case 5:
@@ -738,6 +640,7 @@ VALUE obj;
738
640
  FORCE_PIXEL_STORE_MODE
739
641
  fptr_glGetMinmax(target,reset,format,type,(GLvoid*)NUM2INT(args[4]));
740
642
  RESTORE_PIXEL_STORE_MODE
643
+ CHECK_GLERROR
741
644
  return Qnil;
742
645
  }
743
646
  }
@@ -750,14 +653,12 @@ VALUE obj,arg1,arg2;
750
653
  GLenum target;
751
654
  GLenum pname;
752
655
  GLfloat params = 0.0;
753
- VALUE retary;
754
- LOAD_GL_FUNC(glGetMinmaxParameterfv)
656
+ LOAD_GL_FUNC(glGetMinmaxParameterfv,"1.2")
755
657
  target = (GLenum)NUM2INT(arg1);
756
658
  pname = (GLenum)NUM2INT(arg2);
757
659
  fptr_glGetMinmaxParameterfv(target,pname,&params);
758
- retary = rb_ary_new2(1);
759
- rb_ary_push(retary, rb_float_new(params));
760
- return retary;
660
+ CHECK_GLERROR
661
+ return RETCONV_GLfloat(params);
761
662
  }
762
663
 
763
664
  static void (APIENTRY * fptr_glGetMinmaxParameteriv)(GLenum,GLenum,GLint *);
@@ -768,72 +669,12 @@ VALUE obj,arg1,arg2;
768
669
  GLenum target;
769
670
  GLenum pname;
770
671
  GLint params = 0;
771
- VALUE retary;
772
- LOAD_GL_FUNC(glGetMinmaxParameteriv)
672
+ LOAD_GL_FUNC(glGetMinmaxParameteriv,"1.2")
773
673
  target = (GLenum)NUM2INT(arg1);
774
674
  pname = (GLenum)NUM2INT(arg2);
775
675
  fptr_glGetMinmaxParameteriv(target,pname,&params);
776
- retary = rb_ary_new2(1);
777
- rb_ary_push(retary, INT2NUM(params));
778
- return retary;
779
- }
780
-
781
- static void (APIENTRY * fptr_glHistogram)(GLenum,GLsizei,GLenum,GLboolean);
782
- static VALUE
783
- gl_Histogram(obj,arg1,arg2,arg3,arg4)
784
- VALUE obj,arg1,arg2,arg3,arg4;
785
- {
786
- GLenum target;
787
- GLsizei width;
788
- GLenum internalformat;
789
- GLboolean sink;
790
- LOAD_GL_FUNC(glHistogram)
791
- target = (GLenum)NUM2INT(arg1);
792
- width = (GLsizei)NUM2UINT(arg2);
793
- internalformat = (GLenum)NUM2INT(arg3);
794
- sink = (GLboolean)NUM2INT(arg4);
795
- fptr_glHistogram(target,width,internalformat,sink);
796
- return Qnil;
797
- }
798
-
799
- static void (APIENTRY * fptr_glMinmax)(GLenum,GLenum,GLboolean);
800
- static VALUE
801
- gl_Minmax(obj,arg1,arg2,arg3)
802
- VALUE obj,arg1,arg2,arg3;
803
- {
804
- GLenum target;
805
- GLenum internalformat;
806
- GLboolean sink;
807
- LOAD_GL_FUNC(glMinmax)
808
- target = (GLenum)NUM2INT(arg1);
809
- internalformat = (GLenum)NUM2INT(arg2);
810
- sink = (GLboolean)NUM2INT(arg3);
811
- fptr_glMinmax(target,internalformat,sink);
812
- return Qnil;
813
- }
814
-
815
- static void (APIENTRY * fptr_glResetHistogram)(GLenum);
816
- static VALUE
817
- gl_ResetHistogram(obj,arg1)
818
- VALUE obj,arg1;
819
- {
820
- GLenum target;
821
- LOAD_GL_FUNC(glResetHistogram)
822
- target = (GLenum)NUM2INT(arg1);
823
- fptr_glResetHistogram(target);
824
- return Qnil;
825
- }
826
-
827
- static void (APIENTRY * fptr_glResetMinmax)(GLenum);
828
- static VALUE
829
- gl_ResetMinmax(obj,arg1)
830
- VALUE obj,arg1;
831
- {
832
- GLenum target;
833
- LOAD_GL_FUNC(glResetMinmax)
834
- target = (GLenum)NUM2INT(arg1);
835
- fptr_glResetMinmax(target);
836
- return Qnil;
676
+ CHECK_GLERROR
677
+ return cond_GLBOOL2RUBY(pname,params);
837
678
  }
838
679
 
839
680
  static void (APIENTRY * fptr_glTexImage3D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
@@ -851,7 +692,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
851
692
  GLenum format;
852
693
  GLenum type;
853
694
  const char *pixels;
854
- LOAD_GL_FUNC(glTexImage3D)
695
+ LOAD_GL_FUNC(glTexImage3D,"1.2")
855
696
  target = (GLenum)NUM2INT(arg1);
856
697
  level = (GLint)NUM2INT(arg2);
857
698
  internalFormat = (GLint)NUM2INT(arg3);
@@ -865,6 +706,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
865
706
  if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
866
707
  fptr_glTexImage3D( target, level, internalFormat, width, height,
867
708
  depth, border, format, type,(GLvoid *)NUM2INT(arg10));
709
+ CHECK_GLERROR
868
710
  return Qnil;
869
711
  }
870
712
 
@@ -875,19 +717,22 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
875
717
  NIL_P(arg10)) { /* proxy texture, no data read */
876
718
  pixels = NULL;
877
719
  } else {
878
- Check_Type(arg10,T_STRING);
879
- CheckDataSize(type,format,width*height*depth,arg10);
880
- pixels = RSTRING(arg10)->ptr;
720
+ VALUE data;
721
+ data = pack_array_or_pass_string(type,arg10);
722
+
723
+ CheckDataSize(type,format,width*height*depth,data);
724
+ pixels = RSTRING_PTR(data);
881
725
  }
882
726
  fptr_glTexImage3D( target, level, internalFormat, width, height,
883
727
  depth, border, format, type,pixels);
728
+ CHECK_GLERROR
884
729
  return Qnil;
885
730
  }
886
731
 
887
732
  static void (APIENTRY * fptr_glTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
888
733
  static VALUE
889
734
  gl_TexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)
890
- VALUE arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11;
735
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11;
891
736
  {
892
737
  GLenum target;
893
738
  GLint level;
@@ -899,7 +744,7 @@ VALUE arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11;
899
744
  GLsizei depth;
900
745
  GLenum format;
901
746
  GLenum type;
902
- LOAD_GL_FUNC(glTexSubImage3D)
747
+ LOAD_GL_FUNC(glTexSubImage3D,"1.2")
903
748
  target = (GLenum)NUM2INT(arg1);
904
749
  level = (GLint)NUM2INT(arg2);
905
750
  xoffset = (GLint)NUM2INT(arg3);
@@ -915,42 +760,14 @@ VALUE arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11;
915
760
  width, height, depth,
916
761
  format, type, (GLvoid *)NUM2INT(arg11));
917
762
  } else {
918
- Check_Type(arg11, T_STRING);
919
- CheckDataSize(type,format,height*width*depth,arg11);
763
+ VALUE data;
764
+ data = pack_array_or_pass_string(type,arg11);
765
+ CheckDataSize(type,format,height*width*depth,data);
920
766
  fptr_glTexSubImage3D( target, level, xoffset, yoffset, zoffset,
921
767
  width, height, depth,
922
- format, type, RSTRING(arg11)->ptr);
768
+ format, type, RSTRING_PTR(data));
923
769
  }
924
- return Qnil;
925
- }
926
-
927
- static void (APIENTRY * fptr_glCopyTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
928
- static VALUE
929
- gl_CopyTexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
930
- VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
931
- {
932
- GLenum target;
933
- GLint level;
934
- GLint xoffset;
935
- GLint yoffset;
936
- GLint zoffset;
937
- GLint x;
938
- GLint y;
939
- GLsizei width;
940
- GLsizei height;
941
- LOAD_GL_FUNC(glCopyTexSubImage3D)
942
- target = (GLenum)NUM2INT(arg1);
943
- level = (GLint)NUM2INT(arg2);
944
- xoffset = (GLint)NUM2INT(arg3);
945
- yoffset = (GLint)NUM2INT(arg4);
946
- zoffset = (GLint)NUM2INT(arg5);
947
- x = (GLint)NUM2INT(arg6);
948
- y = (GLint)NUM2INT(arg7);
949
- width = (GLsizei)NUM2UINT(arg8);
950
- height = (GLsizei)NUM2UINT(arg9);
951
- fptr_glCopyTexSubImage3D( target, level,
952
- xoffset, yoffset, zoffset,
953
- x, y, width, height );
770
+ CHECK_GLERROR
954
771
  return Qnil;
955
772
  }
956
773