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
@@ -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