ruby-opengl 0.33.0 → 0.40.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 (103) hide show
  1. data/Rakefile +42 -15
  2. data/doc/build_install.txt +70 -25
  3. data/doc/history.txt +4 -0
  4. data/doc/requirements_and_design.txt +2 -3
  5. data/doc/roadmap.txt +15 -2
  6. data/doc/screenshots.txt +23 -0
  7. data/doc/supplies/page_template.html +2 -1
  8. data/doc/thanks.txt +3 -0
  9. data/doc/tutorial.txt +5 -3
  10. data/examples/README +57 -7
  11. data/examples/legacy/COPYRIGHT +8 -0
  12. data/examples/{aaindex.rb → legacy/aaindex.rb} +6 -5
  13. data/examples/legacy/aapoly.rb +153 -0
  14. data/examples/legacy/aargb.rb +139 -0
  15. data/examples/legacy/accanti.rb +159 -0
  16. data/examples/legacy/accpersp.rb +216 -0
  17. data/examples/legacy/alpha.rb +133 -0
  18. data/examples/legacy/alpha3D.rb +165 -0
  19. data/examples/legacy/bezcurve.rb +107 -0
  20. data/examples/legacy/bezmesh.rb +131 -0
  21. data/examples/legacy/checker.rb +121 -0
  22. data/examples/legacy/clip.rb +104 -0
  23. data/examples/legacy/colormat.rb +145 -0
  24. data/examples/legacy/cube.rb +73 -0
  25. data/examples/legacy/depthcue.rb +101 -0
  26. data/examples/legacy/dof.rb +212 -0
  27. data/examples/legacy/double.rb +104 -0
  28. data/examples/legacy/drawf.rb +98 -0
  29. data/examples/legacy/feedback.rb +152 -0
  30. data/examples/legacy/fog.rb +172 -0
  31. data/examples/legacy/font-glut.rb +41 -0
  32. data/examples/legacy/font.rb +158 -0
  33. data/examples/legacy/hello.rb +75 -0
  34. data/examples/legacy/image.rb +145 -0
  35. data/examples/legacy/jitter.rb +209 -0
  36. data/examples/legacy/lines.rb +135 -0
  37. data/examples/legacy/list.rb +120 -0
  38. data/examples/legacy/material.rb +290 -0
  39. data/examples/legacy/mipmap.rb +159 -0
  40. data/examples/legacy/model.rb +119 -0
  41. data/examples/legacy/movelight.rb +140 -0
  42. data/examples/legacy/pickdepth.rb +180 -0
  43. data/examples/legacy/planet.rb +112 -0
  44. data/examples/legacy/quadric.rb +180 -0
  45. data/examples/legacy/readpixel.rb +59 -0
  46. data/examples/legacy/robot.rb +120 -0
  47. data/examples/legacy/select.rb +207 -0
  48. data/examples/{smooth_prev.rb → legacy/smooth.rb} +3 -2
  49. data/examples/legacy/stencil.rb +154 -0
  50. data/examples/legacy/stroke.rb +170 -0
  51. data/examples/legacy/surface.rb +170 -0
  52. data/examples/legacy/teaambient.rb +132 -0
  53. data/examples/legacy/teapots.rb +188 -0
  54. data/examples/legacy/tess.rb +222 -0
  55. data/examples/legacy/texbind.rb +157 -0
  56. data/examples/legacy/texgen.rb +171 -0
  57. data/examples/legacy/texturesurf.rb +128 -0
  58. data/examples/legacy/varray.rb +167 -0
  59. data/examples/legacy/wrap.rb +158 -0
  60. data/examples/nehe_lesson02.rb +117 -0
  61. data/examples/nehe_lesson03.rb +122 -0
  62. data/examples/nehe_lesson04.rb +133 -0
  63. data/examples/nehe_lesson05.rb +186 -0
  64. data/examples/plane.rb +1 -1
  65. data/examples/smooth.rb +4 -2
  66. data/examples/test.rb +3 -2
  67. data/ext/common/{rbogl.c → common.h} +99 -32
  68. data/ext/common/gl-enums.h +39 -1
  69. data/ext/gl/gl-1.0-1.1.c +350 -305
  70. data/ext/gl/gl-1.2.c +933 -38
  71. data/ext/gl/gl-1.3.c +725 -0
  72. data/ext/gl/gl-1.4.c +647 -0
  73. data/ext/gl/gl-1.5.c +362 -0
  74. data/ext/gl/gl-2.0.c +1632 -0
  75. data/ext/gl/gl-2.1.c +154 -0
  76. data/ext/gl/gl-enums.c +1 -2
  77. data/ext/gl/gl.c +58 -2
  78. data/ext/gl/mkrf_conf.rb +4 -1
  79. data/ext/glu/glu.c +5 -4
  80. data/ext/glu/mkrf_conf.rb +4 -1
  81. data/ext/glut/glut.c +7 -1
  82. data/ext/glut/mkrf_conf.rb +5 -0
  83. data/lib/gl_prev.rb +4 -3
  84. data/lib/glu_prev.rb +4 -3
  85. data/lib/glut_prev.rb +3 -3
  86. data/{examples/all_tests.rb → lib/opengl.rb} +9 -12
  87. data/test/README +5 -18
  88. data/test/tc_common.rb +79 -0
  89. data/test/tc_func_10_11.rb +1255 -0
  90. data/test/tc_func_12.rb +186 -0
  91. data/test/tc_func_13.rb +203 -0
  92. data/test/tc_func_14.rb +197 -0
  93. data/test/tc_func_15.rb +82 -0
  94. data/test/tc_func_20.rb +320 -0
  95. data/test/tc_func_21.rb +67 -0
  96. data/test/tc_include_gl.rb +1 -1
  97. data/test/{tc_opengl_namespace.rb → tc_misc.rb} +20 -20
  98. data/test/tc_require_gl.rb +1 -1
  99. metadata +99 -27
  100. data/ext/common/Rakefile +0 -39
  101. data/ext/common/rbogl.h +0 -52
  102. data/test/runtests.sh +0 -7
  103. data/test/tc_gl_vertex.rb +0 -180
data/ext/gl/gl-1.2.c CHANGED
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
3
3
  * Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
4
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
4
5
  *
5
6
  * This program is distributed under the terms of the MIT license.
6
7
  * See the included MIT-LICENSE file for the terms of this license.
@@ -22,13 +23,42 @@
22
23
  #else
23
24
  #include <GL/gl.h>
24
25
  #endif
25
- #include "../common/rbogl.h"
26
- #include "../common/gl-enums.h"
26
+ #include "../common/common.h"
27
27
 
28
28
  /* OpenGL 1.2 functions */
29
29
 
30
- /*
31
- VALUE
30
+ static void (APIENTRY * fptr_glBlendColor)(GLclampf,GLclampf,GLclampf,GLclampf);
31
+ static VALUE
32
+ gl_BlendColor(obj,arg1,arg2,arg3,arg4)
33
+ VALUE obj,arg1,arg2,arg3,arg4;
34
+ {
35
+ GLclampf red;
36
+ GLclampf green;
37
+ GLclampf blue;
38
+ GLclampf alpha;
39
+ LOAD_GL_FUNC(glBlendColor)
40
+ red = (GLclampf)NUM2DBL(arg1);
41
+ green = (GLclampf)NUM2DBL(arg2);
42
+ blue = (GLclampf)NUM2DBL(arg3);
43
+ alpha = (GLclampf)NUM2DBL(arg4);
44
+ fptr_glBlendColor(red,green,blue,alpha);
45
+ return Qnil;
46
+ }
47
+
48
+ static void (APIENTRY * fptr_glBlendEquation)(GLenum);
49
+ static VALUE
50
+ gl_BlendEquation(obj,arg1)
51
+ VALUE obj,arg1;
52
+ {
53
+ GLenum mode;
54
+ LOAD_GL_FUNC(glBlendEquation)
55
+ mode = (GLenum)NUM2INT(arg1);
56
+ fptr_glBlendEquation(mode);
57
+ return Qnil;
58
+ }
59
+
60
+ static void (APIENTRY * fptr_glDrawRangeElements)(GLenum,GLuint,GLuint,GLsizei,GLenum,GLvoid*);
61
+ static VALUE
32
62
  gl_DrawRangeElements(obj,arg1,arg2,arg3,arg4,arg5,arg6)
33
63
  VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
34
64
  {
@@ -37,16 +67,815 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
37
67
  GLuint end;
38
68
  GLsizei count;
39
69
  GLenum type;
70
+ LOAD_GL_FUNC(glDrawRangeElements)
40
71
  mode = (GLenum)NUM2INT(arg1);
41
- start = (GLuint)NUM2INT(arg2);
42
- end = (GLuint)NUM2INT(arg3);
43
- count = (GLsizei)NUM2INT(arg4);
72
+ start = (GLuint)NUM2UINT(arg2);
73
+ end = (GLuint)NUM2UINT(arg3);
74
+ count = (GLsizei)NUM2UINT(arg4);
44
75
  type = (GLenum)NUM2INT(arg5);
45
76
  Check_Type(arg6, T_STRING);
46
- glDrawRangeElements(mode, start, end, count, type, RSTRING(arg6)->ptr);
77
+ fptr_glDrawRangeElements(mode, start, end, count, type, RSTRING(arg6)->ptr);
78
+ return Qnil;
79
+ }
80
+
81
+ static void (APIENTRY * fptr_glColorTable)(GLenum,GLenum,GLsizei,GLenum,GLenum,GLvoid*);
82
+ static VALUE
83
+ gl_ColorTable(obj,arg1,arg2,arg3,arg4,arg5,arg6)
84
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
85
+ {
86
+ GLenum target;
87
+ GLenum internalformat;
88
+ GLsizei width;
89
+ GLenum format;
90
+ GLenum type;
91
+ GLsizei format_size;
92
+ GLsizei type_size;
93
+ GLsizei size;
94
+ LOAD_GL_FUNC(glColorTable)
95
+ target = (GLenum)NUM2INT(arg1);
96
+ internalformat = (GLenum)NUM2INT(arg2);
97
+ width = (GLsizei)NUM2UINT(arg3);
98
+ format = (GLenum)NUM2INT(arg4);
99
+ type = (GLenum)NUM2INT(arg5);
100
+ Check_Type(arg6,T_STRING);
101
+ format_size = glformat_size(format);
102
+ type_size = gltype_size(type);
103
+ if (type_size == -1 || format_size == -1)
104
+ rb_raise(rb_eTypeError, "type/format mismatch");
105
+ size = format_size*type_size*width;
106
+ if (RSTRING(arg6)->len < size)
107
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg6)->len);
108
+ fptr_glColorTable(target,internalformat,width,format,type,RSTRING(arg6)->ptr);
109
+ return Qnil;
110
+ }
111
+
112
+ static void (APIENTRY * fptr_glColorTableParameterfv)(GLenum,GLenum,const GLfloat*);
113
+ static VALUE
114
+ gl_ColorTableParameterfv(obj,arg1,arg2,arg3)
115
+ VALUE obj,arg1,arg2,arg3;
116
+ {
117
+ GLenum target;
118
+ GLenum pname;
119
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
120
+ LOAD_GL_FUNC(glColorTableParameterfv)
121
+ target = (GLenum)NUM2INT(arg1);
122
+ pname = (GLenum)NUM2INT(arg2);
123
+ Check_Type(arg3,T_ARRAY);
124
+ ary2cflt(arg3,params,4);
125
+ fptr_glColorTableParameterfv(target,pname,params);
126
+ return Qnil;
127
+ }
128
+
129
+ static void (APIENTRY * fptr_glColorTableParameteriv)(GLenum,GLenum,const GLint*);
130
+ static VALUE
131
+ gl_ColorTableParameteriv(obj,arg1,arg2,arg3)
132
+ VALUE obj,arg1,arg2,arg3;
133
+ {
134
+ GLenum target;
135
+ GLenum pname;
136
+ GLint params[4] = {0,0,0,0};
137
+ LOAD_GL_FUNC(glColorTableParameteriv)
138
+ target = (GLenum)NUM2INT(arg1);
139
+ pname = (GLenum)NUM2INT(arg2);
140
+ Check_Type(arg3,T_ARRAY);
141
+ ary2cint(arg3,params,4);
142
+ fptr_glColorTableParameteriv(target,pname,params);
143
+ return Qnil;
144
+ }
145
+
146
+ static void (APIENTRY * fptr_glCopyColorTable)(GLenum,GLenum,GLint,GLint,GLsizei);
147
+ static VALUE
148
+ gl_CopyColorTable(obj,arg1,arg2,arg3,arg4,arg5)
149
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
150
+ {
151
+ GLenum target;
152
+ GLenum internalformat;
153
+ GLint x;
154
+ GLint y;
155
+ GLsizei width;
156
+ LOAD_GL_FUNC(glCopyColorTable)
157
+ target = (GLenum)NUM2INT(arg1);
158
+ internalformat = (GLenum)NUM2INT(arg2);
159
+ x = (GLenum)NUM2INT(arg3);
160
+ y = (GLenum)NUM2INT(arg4);
161
+ width = (GLenum)NUM2INT(arg5);
162
+ fptr_glCopyColorTable(target,internalformat,x,y,width);
163
+ return Qnil;
164
+ }
165
+
166
+ static void (APIENTRY * fptr_glGetColorTableParameterfv)(GLenum,GLenum,GLfloat *);
167
+ static VALUE
168
+ gl_GetColorTableParameterfv(obj,arg1,arg2)
169
+ VALUE obj,arg1,arg2;
170
+ {
171
+ GLenum target;
172
+ GLenum pname;
173
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
174
+ GLsizei size;
175
+ VALUE retary;
176
+ int i;
177
+ LOAD_GL_FUNC(glGetColorTableParameterfv)
178
+ target = (GLenum)NUM2INT(arg1);
179
+ pname = (GLenum)NUM2INT(arg2);
180
+ switch (pname) {
181
+ case GL_COLOR_TABLE_SCALE:
182
+ case GL_COLOR_TABLE_BIAS:
183
+ size = 4;
184
+ break;
185
+ default:
186
+ size = 1;
187
+ break;
188
+ }
189
+ fptr_glGetColorTableParameterfv(target,pname,params);
190
+ retary = rb_ary_new2(size);
191
+ for(i=0;i<size;i++)
192
+ rb_ary_push(retary, rb_float_new(params[i]));
193
+ return retary;
194
+ }
195
+
196
+ static void (APIENTRY * fptr_glGetColorTableParameteriv)(GLenum,GLenum,GLint *);
197
+ static VALUE
198
+ gl_GetColorTableParameteriv(obj,arg1,arg2)
199
+ VALUE obj,arg1,arg2;
200
+ {
201
+ GLenum target;
202
+ GLenum pname;
203
+ GLint params[4] = {0,0,0,0};
204
+ GLsizei size;
205
+ VALUE retary;
206
+ int i;
207
+ LOAD_GL_FUNC(glGetColorTableParameteriv)
208
+ target = (GLenum)NUM2INT(arg1);
209
+ pname = (GLenum)NUM2INT(arg2);
210
+ switch (pname) {
211
+ case GL_COLOR_TABLE_SCALE:
212
+ case GL_COLOR_TABLE_BIAS:
213
+ size = 4;
214
+ break;
215
+ default:
216
+ size = 1;
217
+ break;
218
+ }
219
+ fptr_glGetColorTableParameteriv(target,pname,params);
220
+ retary = rb_ary_new2(size);
221
+ for(i=0;i<size;i++)
222
+ rb_ary_push(retary, INT2NUM(params[i]));
223
+ return retary;
224
+ }
225
+
226
+ static void (APIENTRY * fptr_glGetColorTable)(GLenum,GLenum,GLenum,GLvoid *);
227
+ static VALUE
228
+ gl_GetColorTable(obj,arg1,arg2,arg3)
229
+ VALUE obj,arg1,arg2,arg3;
230
+ {
231
+ GLenum target;
232
+ GLenum format;
233
+ GLenum type;
234
+ GLsizei format_size;
235
+ GLsizei type_size;
236
+ GLsizei size;
237
+ GLsizei width = 0;
238
+ VALUE data;
239
+ LOAD_GL_FUNC(glGetColorTable)
240
+ LOAD_GL_FUNC(glGetColorTableParameteriv)
241
+ target = (GLenum)NUM2INT(arg1);
242
+ format = (GLenum)NUM2INT(arg2);
243
+ type = (GLenum)NUM2INT(arg3);
244
+ format_size = glformat_size(format);
245
+ type_size = gltype_size(type);
246
+ if (type_size == -1 || format_size == -1)
247
+ rb_raise(rb_eTypeError, "type/format mismatch");
248
+ fptr_glGetColorTableParameteriv(target,GL_COLOR_TABLE_WIDTH,&width);
249
+ if (type==GL_BITMAP)
250
+ size = format_size*(width/8);
251
+ else
252
+ size = type_size*format_size*width;
253
+ data = allocate_buffer_with_string(size);
254
+ FORCE_PIXEL_STORE_MODE
255
+ fptr_glGetColorTable(target,format,type,(GLvoid*)RSTRING(data)->ptr);
256
+ RESTORE_PIXEL_STORE_MODE
257
+ return data;
258
+ }
259
+
260
+ static void (APIENTRY * fptr_glColorSubTable)(GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid *data);
261
+ static VALUE
262
+ gl_ColorSubTable(obj,arg1,arg2,arg3,arg4,arg5,arg6)
263
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
264
+ {
265
+ GLenum target;
266
+ GLsizei start;
267
+ GLsizei count;
268
+ GLenum format;
269
+ GLenum type;
270
+ GLsizei format_size;
271
+ GLsizei type_size;
272
+ GLsizei size;
273
+ LOAD_GL_FUNC(glColorSubTable)
274
+ target = (GLenum)NUM2INT(arg1);
275
+ start = (GLsizei)NUM2UINT(arg2);
276
+ count = (GLsizei)NUM2UINT(arg3);
277
+ format = (GLenum)NUM2INT(arg4);
278
+ type = (GLenum)NUM2INT(arg5);
279
+ Check_Type(arg6,T_STRING);
280
+ format_size = glformat_size(format);
281
+ type_size = gltype_size(type);
282
+ if (type_size == -1 || format_size == -1)
283
+ rb_raise(rb_eTypeError, "type/format mismatch");
284
+ size = format_size*type_size*count;
285
+ if (RSTRING(arg6)->len < size)
286
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg6)->len);
287
+ fptr_glColorSubTable(target,start,count,format,type,RSTRING(arg6)->ptr);
288
+ return Qnil;
289
+ }
290
+
291
+ static void (APIENTRY * fptr_glCopyColorSubTable)(GLenum,GLsizei,GLint,GLint,GLsizei);
292
+ static VALUE
293
+ gl_CopyColorSubTable(obj,arg1,arg2,arg3,arg4,arg5)
294
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
295
+ {
296
+ GLenum target;
297
+ GLsizei start;
298
+ GLint x;
299
+ GLint y;
300
+ GLsizei width;
301
+ LOAD_GL_FUNC(glCopyColorSubTable)
302
+ target = (GLenum)NUM2INT(arg1);
303
+ start = (GLsizei)NUM2UINT(arg2);
304
+ x = (GLint)NUM2INT(arg3);
305
+ y = (GLint)NUM2INT(arg4);
306
+ width = (GLsizei)NUM2UINT(arg5);
307
+ fptr_glCopyColorSubTable(target,start,x,y,width);
308
+ return Qnil;
309
+ }
310
+
311
+ static void (APIENTRY * fptr_glConvolutionFilter1D)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid *);
312
+ static VALUE
313
+ gl_ConvolutionFilter1D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
314
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
315
+ {
316
+ GLenum target;
317
+ GLenum internalformat;
318
+ GLsizei width;
319
+ GLenum format;
320
+ GLenum type;
321
+ GLsizei format_size;
322
+ GLsizei type_size;
323
+ GLsizei size;
324
+ LOAD_GL_FUNC(glConvolutionFilter1D)
325
+ target = (GLenum)NUM2INT(arg1);
326
+ internalformat = (GLenum)NUM2INT(arg2);
327
+ width = (GLsizei)NUM2UINT(arg3);
328
+ format = (GLenum)NUM2INT(arg4);
329
+ type = (GLenum)NUM2INT(arg5);
330
+ Check_Type(arg6,T_STRING);
331
+ format_size = glformat_size(format);
332
+ type_size = gltype_size(type);
333
+ if (type_size == -1 || format_size == -1)
334
+ rb_raise(rb_eTypeError, "type/format mismatch");
335
+ if (type==GL_BITMAP)
336
+ size = format_size*(width/8);
337
+ else
338
+ size = type_size*format_size*width;
339
+ if (RSTRING(arg6)->len < size)
340
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg6)->len);
341
+ fptr_glConvolutionFilter1D(target,internalformat,width,format,type,RSTRING(arg6)->ptr);
342
+ return Qnil;
343
+ }
344
+
345
+ static void (APIENTRY * fptr_glConvolutionFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid *);
346
+ static VALUE
347
+ gl_ConvolutionFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
348
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
349
+ {
350
+ GLenum target;
351
+ GLenum internalformat;
352
+ GLsizei width;
353
+ GLsizei height;
354
+ GLenum format;
355
+ GLenum type;
356
+ GLsizei format_size;
357
+ GLsizei type_size;
358
+ GLsizei size;
359
+ LOAD_GL_FUNC(glConvolutionFilter2D)
360
+ target = (GLenum)NUM2INT(arg1);
361
+ internalformat = (GLenum)NUM2INT(arg2);
362
+ width = (GLsizei)NUM2UINT(arg3);
363
+ height = (GLsizei)NUM2UINT(arg4);
364
+ format = (GLenum)NUM2INT(arg5);
365
+ type = (GLenum)NUM2INT(arg6);
366
+ Check_Type(arg7,T_STRING);
367
+ format_size = glformat_size(format);
368
+ type_size = gltype_size(type);
369
+ if (type_size == -1 || format_size == -1)
370
+ rb_raise(rb_eTypeError, "type/format mismatch");
371
+ if (type==GL_BITMAP)
372
+ size = format_size*((width*height)/8);
373
+ else
374
+ size = type_size*format_size*width*height;
375
+ if (RSTRING(arg7)->len < size)
376
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
377
+ fptr_glConvolutionFilter2D(target,internalformat,width,height,format,type,RSTRING(arg7)->ptr);
47
378
  return Qnil;
48
379
  }
49
- VALUE
380
+
381
+ static void (APIENTRY * fptr_glConvolutionParameterf)(GLenum,GLenum,GLfloat);
382
+ static VALUE
383
+ gl_ConvolutionParameterf(obj,arg1,arg2,arg3)
384
+ VALUE obj,arg1,arg2,arg3;
385
+ {
386
+ GLenum target;
387
+ GLenum pname;
388
+ GLfloat params;
389
+ LOAD_GL_FUNC(glConvolutionParameterf)
390
+ target = (GLenum)NUM2INT(arg1);
391
+ pname = (GLenum)NUM2INT(arg2);
392
+ params = (GLfloat)NUM2INT(arg3);
393
+ fptr_glConvolutionParameterf(target,pname,params);
394
+ return Qnil;
395
+ }
396
+
397
+ static void (APIENTRY * fptr_glConvolutionParameterfv)(GLenum,GLenum,const GLfloat *);
398
+ static VALUE
399
+ gl_ConvolutionParameterfv(obj,arg1,arg2,arg3)
400
+ VALUE obj,arg1,arg2,arg3;
401
+ {
402
+ GLenum target;
403
+ GLenum pname;
404
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
405
+ LOAD_GL_FUNC(glConvolutionParameterfv)
406
+ target = (GLenum)NUM2INT(arg1);
407
+ pname = (GLenum)NUM2INT(arg2);
408
+ Check_Type(arg3,T_ARRAY);
409
+ ary2cflt(arg3,params,4);
410
+ fptr_glConvolutionParameterfv(target,pname,params);
411
+ return Qnil;
412
+ }
413
+
414
+ static void (APIENTRY * fptr_glConvolutionParameteri)(GLenum,GLenum,GLint);
415
+ static VALUE
416
+ gl_ConvolutionParameteri(obj,arg1,arg2,arg3)
417
+ VALUE obj,arg1,arg2,arg3;
418
+ {
419
+ GLenum target;
420
+ GLenum pname;
421
+ GLint params;
422
+ LOAD_GL_FUNC(glConvolutionParameteri)
423
+ target = (GLenum)NUM2INT(arg1);
424
+ pname = (GLenum)NUM2INT(arg2);
425
+ params = (GLint)NUM2INT(arg3);
426
+ fptr_glConvolutionParameteri(target,pname,params);
427
+ return Qnil;
428
+ }
429
+
430
+ static void (APIENTRY * fptr_glConvolutionParameteriv)(GLenum,GLenum,const GLint *);
431
+ static VALUE
432
+ gl_ConvolutionParameteriv(obj,arg1,arg2,arg3)
433
+ VALUE obj,arg1,arg2,arg3;
434
+ {
435
+ GLenum target;
436
+ GLenum pname;
437
+ GLint params[4] = {0,0,0,0};
438
+ LOAD_GL_FUNC(glConvolutionParameteriv)
439
+ target = (GLenum)NUM2INT(arg1);
440
+ pname = (GLenum)NUM2INT(arg2);
441
+ Check_Type(arg3,T_ARRAY);
442
+ ary2cint(arg3,params,4);
443
+ fptr_glConvolutionParameteriv(target,pname,params);
444
+ return Qnil;
445
+ }
446
+
447
+ static void (APIENTRY * fptr_glCopyConvolutionFilter1D)(GLenum,GLenum,GLint,GLint,GLsizei);
448
+ static VALUE
449
+ gl_CopyConvolutionFilter1D(obj,arg1,arg2,arg3,arg4,arg5)
450
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
451
+ {
452
+ GLenum target;
453
+ GLenum internalformat;
454
+ GLint x;
455
+ GLint y;
456
+ GLsizei width;
457
+ LOAD_GL_FUNC(glCopyConvolutionFilter1D)
458
+ target = (GLenum)NUM2INT(arg1);
459
+ internalformat = (GLenum)NUM2INT(arg2);
460
+ x = (GLint)NUM2INT(arg3);
461
+ y = (GLint)NUM2INT(arg4);
462
+ width = (GLsizei)NUM2UINT(arg5);
463
+ fptr_glCopyConvolutionFilter1D(target,internalformat,x,y,width);
464
+ return Qnil;
465
+ }
466
+
467
+ static void (APIENTRY * fptr_glCopyConvolutionFilter2D)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei);
468
+ static VALUE
469
+ gl_CopyConvolutionFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
470
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
471
+ {
472
+ GLenum target;
473
+ GLenum internalformat;
474
+ GLint x;
475
+ GLint y;
476
+ GLsizei width;
477
+ GLsizei height;
478
+ LOAD_GL_FUNC(glCopyConvolutionFilter2D)
479
+ target = (GLenum)NUM2INT(arg1);
480
+ internalformat = (GLenum)NUM2INT(arg2);
481
+ x = (GLint)NUM2INT(arg3);
482
+ y = (GLint)NUM2INT(arg4);
483
+ width = (GLsizei)NUM2UINT(arg5);
484
+ height = (GLsizei)NUM2UINT(arg6);
485
+ fptr_glCopyConvolutionFilter2D(target,internalformat,x,y,width,height);
486
+ return Qnil;
487
+ }
488
+
489
+ static void (APIENTRY * fptr_glGetConvolutionParameterfv)(GLenum,GLenum,GLfloat *);
490
+ static VALUE
491
+ gl_GetConvolutionParameterfv(obj,arg1,arg2)
492
+ VALUE obj,arg1,arg2;
493
+ {
494
+ GLenum target;
495
+ GLenum pname;
496
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
497
+ GLsizei size;
498
+ int i;
499
+ VALUE retary;
500
+ LOAD_GL_FUNC(glGetConvolutionParameterfv)
501
+ target = (GLenum)NUM2INT(arg1);
502
+ pname = (GLenum)NUM2INT(arg2);
503
+ switch(pname) {
504
+ case GL_CONVOLUTION_BORDER_COLOR:
505
+ case GL_CONVOLUTION_FILTER_SCALE:
506
+ case GL_CONVOLUTION_FILTER_BIAS:
507
+ size = 4;
508
+ break;
509
+ default:
510
+ size = 1;
511
+ break;
512
+ }
513
+ fptr_glGetConvolutionParameterfv(target,pname,params);
514
+ retary = rb_ary_new2(size);
515
+ for(i=0;i<size;i++)
516
+ rb_ary_push(retary, rb_float_new(params[i]));
517
+ return retary;
518
+ }
519
+
520
+ static void (APIENTRY * fptr_glGetConvolutionParameteriv)(GLenum,GLenum,GLint *);
521
+ static VALUE
522
+ gl_GetConvolutionParameteriv(obj,arg1,arg2)
523
+ VALUE obj,arg1,arg2;
524
+ {
525
+ GLenum target;
526
+ GLenum pname;
527
+ GLint params[4] = {0,0,0,0};
528
+ GLsizei size;
529
+ int i;
530
+ VALUE retary;
531
+ LOAD_GL_FUNC(glGetConvolutionParameteriv)
532
+ target = (GLenum)NUM2INT(arg1);
533
+ pname = (GLenum)NUM2INT(arg2);
534
+ switch(pname) {
535
+ case GL_CONVOLUTION_BORDER_COLOR:
536
+ case GL_CONVOLUTION_FILTER_SCALE:
537
+ case GL_CONVOLUTION_FILTER_BIAS:
538
+ size = 4;
539
+ break;
540
+ default:
541
+ size = 1;
542
+ break;
543
+ }
544
+ fptr_glGetConvolutionParameteriv(target,pname,params);
545
+ retary = rb_ary_new2(size);
546
+ for(i=0;i<size;i++)
547
+ rb_ary_push(retary, INT2NUM(params[i]));
548
+ return retary;
549
+ }
550
+
551
+ static void (APIENTRY * fptr_glGetConvolutionFilter)(GLenum,GLenum,GLenum,GLvoid *);
552
+ static VALUE
553
+ gl_GetConvolutionFilter(obj,arg1,arg2,arg3)
554
+ VALUE obj,arg1,arg2,arg3;
555
+ {
556
+ GLenum target;
557
+ GLenum format;
558
+ GLenum type;
559
+ GLsizei format_size;
560
+ GLsizei type_size;
561
+ GLint size = 0;
562
+ VALUE data;
563
+ LOAD_GL_FUNC(glGetConvolutionFilter)
564
+ LOAD_GL_FUNC(glGetConvolutionParameteriv)
565
+ target = (GLenum)NUM2INT(arg1);
566
+ format = (GLenum)NUM2INT(arg2);
567
+ type = (GLenum)NUM2INT(arg3);
568
+ format_size = glformat_size(format);
569
+ type_size = gltype_size(type);
570
+ if (type_size == -1 || format_size == -1)
571
+ rb_raise(rb_eTypeError, "type/format mismatch");
572
+ if (target==GL_CONVOLUTION_1D) {
573
+ fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_WIDTH,&size);
574
+ } else {
575
+ GLint tmp = 0;
576
+ fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_WIDTH,&tmp);
577
+ fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_HEIGHT,&size);
578
+ size *=tmp;
579
+ }
580
+ if (type==GL_BITMAP)
581
+ size = (size/8)*format_size;
582
+ else
583
+ size = size*type_size*format_size;
584
+ data = allocate_buffer_with_string(size);
585
+ FORCE_PIXEL_STORE_MODE
586
+ fptr_glGetConvolutionFilter(target,format,type,(GLvoid*)RSTRING(data)->ptr);
587
+ RESTORE_PIXEL_STORE_MODE
588
+ return data;
589
+ }
590
+
591
+ static void (APIENTRY * fptr_glGetSeparableFilter)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*);
592
+ static VALUE
593
+ gl_GetSeparableFilter(obj,arg1,arg2,arg3)
594
+ VALUE obj,arg1,arg2,arg3;
595
+ {
596
+ GLenum target;
597
+ GLenum format;
598
+ GLenum type;
599
+ GLsizei format_size;
600
+ GLsizei type_size;
601
+ GLint size_row = 0;
602
+ GLint size_column = 0;
603
+ VALUE data_row;
604
+ VALUE data_column;
605
+ VALUE retary;
606
+ LOAD_GL_FUNC(glGetSeparableFilter)
607
+ LOAD_GL_FUNC(glGetConvolutionParameteriv)
608
+ target = (GLenum)NUM2INT(arg1);
609
+ format = (GLenum)NUM2INT(arg2);
610
+ type = (GLenum)NUM2INT(arg3);
611
+ format_size = glformat_size(format);
612
+ type_size = gltype_size(type);
613
+ if (type_size == -1 || format_size == -1)
614
+ rb_raise(rb_eTypeError, "type/format mismatch");
615
+ fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_WIDTH,&size_row);
616
+ fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_HEIGHT,&size_column);
617
+ if (type==GL_BITMAP) {
618
+ size_row = (size_row/8)*format_size;
619
+ size_column = (size_column/8)*format_size;
620
+ } else {
621
+ size_row *= type_size*format_size;
622
+ size_column *= type_size*format_size;
623
+ }
624
+ data_row = allocate_buffer_with_string(size_row);
625
+ data_column = allocate_buffer_with_string(size_column);
626
+ FORCE_PIXEL_STORE_MODE
627
+ fptr_glGetSeparableFilter(target,format,type,(GLvoid*)RSTRING(data_row)->ptr,(GLvoid*)RSTRING(data_column)->ptr,0);
628
+ RESTORE_PIXEL_STORE_MODE
629
+ retary = rb_ary_new2(2);
630
+ rb_ary_push(retary, data_row);
631
+ rb_ary_push(retary, data_column);
632
+ return retary;
633
+ }
634
+
635
+ static void (APIENTRY * fptr_glSeparableFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid *,const GLvoid *);
636
+ static VALUE
637
+ gl_SeparableFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
638
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
639
+ {
640
+ GLenum target;
641
+ GLenum internalformat;
642
+ GLsizei width;
643
+ GLsizei height;
644
+ GLenum format;
645
+ GLenum type;
646
+ GLsizei format_size;
647
+ GLsizei type_size;
648
+ GLsizei size_row;
649
+ GLsizei size_column;
650
+ LOAD_GL_FUNC(glSeparableFilter2D)
651
+ target = (GLenum)NUM2INT(arg1);
652
+ internalformat = (GLenum)NUM2INT(arg2);
653
+ width = (GLsizei)NUM2UINT(arg3);
654
+ height = (GLsizei)NUM2UINT(arg4);
655
+ format = (GLenum)NUM2INT(arg5);
656
+ type = (GLenum)NUM2INT(arg6);
657
+ Check_Type(arg7,T_STRING);
658
+ Check_Type(arg8,T_STRING);
659
+ format_size = glformat_size(format);
660
+ type_size = gltype_size(type);
661
+ if (type_size == -1 || format_size == -1)
662
+ rb_raise(rb_eTypeError, "type/format mismatch");
663
+ if (type==GL_BITMAP) {
664
+ size_row = format_size*(width/8);
665
+ size_column = format_size*(height/8);
666
+ } else {
667
+ size_row = type_size*format_size*width;
668
+ size_column = type_size*format_size*height;
669
+ }
670
+ if (RSTRING(arg7)->len < size_row)
671
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
672
+ if (RSTRING(arg8)->len < size_column)
673
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg8)->len);
674
+
675
+ fptr_glSeparableFilter2D(target,internalformat,width,height,format,type,RSTRING(arg7)->ptr,RSTRING(arg8)->ptr);
676
+ return Qnil;
677
+ }
678
+
679
+ static void (APIENTRY * fptr_glGetHistogramParameterfv)(GLenum,GLenum,GLfloat *);
680
+ static VALUE
681
+ gl_GetHistogramParameterfv(obj,arg1,arg2,arg3)
682
+ VALUE obj,arg1,arg2,arg3;
683
+ {
684
+ GLenum target;
685
+ GLenum pname;
686
+ GLfloat params = 0.0;
687
+ VALUE retary;
688
+ LOAD_GL_FUNC(glGetHistogramParameterfv)
689
+ target = (GLenum)NUM2INT(arg1);
690
+ pname = (GLenum)NUM2INT(arg2);
691
+ fptr_glGetHistogramParameterfv(target,pname,&params);
692
+ retary = rb_ary_new2(1);
693
+ rb_ary_push(retary, rb_float_new(params));
694
+ return retary;
695
+ }
696
+
697
+ static void (APIENTRY * fptr_glGetHistogramParameteriv)(GLenum,GLenum,GLint *);
698
+ static VALUE
699
+ gl_GetHistogramParameteriv(obj,arg1,arg2,arg3)
700
+ VALUE obj,arg1,arg2,arg3;
701
+ {
702
+ GLenum target;
703
+ GLenum pname;
704
+ GLint params = 0;
705
+ VALUE retary;
706
+ LOAD_GL_FUNC(glGetHistogramParameteriv)
707
+ target = (GLenum)NUM2INT(arg1);
708
+ pname = (GLenum)NUM2INT(arg2);
709
+ fptr_glGetHistogramParameteriv(target,pname,&params);
710
+ retary = rb_ary_new2(1);
711
+ rb_ary_push(retary, INT2NUM(params));
712
+ return retary;
713
+ }
714
+
715
+ static void (APIENTRY * fptr_glGetHistogram)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
716
+ static VALUE
717
+ gl_GetHistogram(obj,arg1,arg2,arg3,arg4)
718
+ VALUE obj,arg1,arg2,arg3,arg4;
719
+ {
720
+ GLenum target;
721
+ GLboolean reset;
722
+ GLenum format;
723
+ GLenum type;
724
+ GLsizei format_size;
725
+ GLsizei type_size;
726
+ GLint size = 0;
727
+ VALUE data;
728
+ LOAD_GL_FUNC(glGetHistogram)
729
+ LOAD_GL_FUNC(glGetHistogramParameteriv)
730
+ target = (GLenum)NUM2INT(arg1);
731
+ reset = (GLboolean)NUM2INT(arg2);
732
+ format = (GLenum)NUM2INT(arg3);
733
+ type = (GLenum)NUM2INT(arg4);
734
+ format_size = glformat_size(format);
735
+ type_size = gltype_size(type);
736
+ if (type_size == -1 || format_size == -1)
737
+ rb_raise(rb_eTypeError, "type/format mismatch");
738
+ fptr_glGetHistogramParameteriv(target,GL_HISTOGRAM_WIDTH,&size);
739
+ if (type==GL_BITMAP)
740
+ size = (size/8)*format_size;
741
+ else
742
+ size = size*type_size*format_size;
743
+ data = allocate_buffer_with_string(size);
744
+ FORCE_PIXEL_STORE_MODE
745
+ fptr_glGetHistogram(target,reset,format,type,(GLvoid*)RSTRING(data)->ptr);
746
+ RESTORE_PIXEL_STORE_MODE
747
+ return data;
748
+ }
749
+
750
+ static void (APIENTRY * fptr_glGetMinmax)(GLenum,GLboolean,GLenum,GLenum,GLvoid *);
751
+ static VALUE
752
+ gl_GetMinmax(obj,arg1,arg2,arg3,arg4)
753
+ VALUE obj,arg1,arg2,arg3,arg4;
754
+ {
755
+ GLenum target;
756
+ GLboolean reset;
757
+ GLenum format;
758
+ GLenum type;
759
+ GLsizei format_size;
760
+ GLsizei type_size;
761
+ GLint size;
762
+ VALUE data;
763
+ LOAD_GL_FUNC(glGetMinmax)
764
+ target = (GLenum)NUM2INT(arg1);
765
+ reset = (GLboolean)NUM2INT(arg2);
766
+ format = (GLenum)NUM2INT(arg3);
767
+ type = (GLenum)NUM2INT(arg4);
768
+ format_size = glformat_size(format);
769
+ type_size = gltype_size(type);
770
+ if (type_size == -1 || format_size == -1)
771
+ rb_raise(rb_eTypeError, "type/format mismatch");
772
+ if (type==GL_BITMAP)
773
+ size = format_size*(2/8);
774
+ else
775
+ size = type_size*format_size*2;
776
+ data = allocate_buffer_with_string(size);
777
+ FORCE_PIXEL_STORE_MODE
778
+ fptr_glGetMinmax(target,reset,format,type,(GLvoid*)RSTRING(data)->ptr);
779
+ RESTORE_PIXEL_STORE_MODE
780
+ return data;
781
+ }
782
+
783
+ static void (APIENTRY * fptr_glGetMinmaxParameterfv)(GLenum,GLenum,GLfloat *);
784
+ static VALUE
785
+ gl_GetMinmaxParameterfv(obj,arg1,arg2)
786
+ VALUE obj,arg1,arg2;
787
+ {
788
+ GLenum target;
789
+ GLenum pname;
790
+ GLfloat params = 0.0;
791
+ VALUE retary;
792
+ LOAD_GL_FUNC(glGetMinmaxParameterfv)
793
+ target = (GLenum)NUM2INT(arg1);
794
+ pname = (GLenum)NUM2INT(arg2);
795
+ fptr_glGetMinmaxParameterfv(target,pname,&params);
796
+ retary = rb_ary_new2(1);
797
+ rb_ary_push(retary, rb_float_new(params));
798
+ return retary;
799
+ }
800
+
801
+ static void (APIENTRY * fptr_glGetMinmaxParameteriv)(GLenum,GLenum,GLint *);
802
+ static VALUE
803
+ gl_GetMinmaxParameteriv(obj,arg1,arg2)
804
+ VALUE obj,arg1,arg2;
805
+ {
806
+ GLenum target;
807
+ GLenum pname;
808
+ GLint params = 0;
809
+ VALUE retary;
810
+ LOAD_GL_FUNC(glGetMinmaxParameteriv)
811
+ target = (GLenum)NUM2INT(arg1);
812
+ pname = (GLenum)NUM2INT(arg2);
813
+ fptr_glGetMinmaxParameteriv(target,pname,&params);
814
+ retary = rb_ary_new2(1);
815
+ rb_ary_push(retary, INT2NUM(params));
816
+ return retary;
817
+ }
818
+
819
+ static void (APIENTRY * fptr_glHistogram)(GLenum,GLsizei,GLenum,GLboolean);
820
+ static VALUE
821
+ gl_Histogram(obj,arg1,arg2,arg3,arg4)
822
+ VALUE obj,arg1,arg2,arg3,arg4;
823
+ {
824
+ GLenum target;
825
+ GLsizei width;
826
+ GLenum internalformat;
827
+ GLboolean sink;
828
+ LOAD_GL_FUNC(glHistogram)
829
+ target = (GLenum)NUM2INT(arg1);
830
+ width = (GLsizei)NUM2UINT(arg2);
831
+ internalformat = (GLenum)NUM2INT(arg3);
832
+ sink = (GLboolean)NUM2INT(arg4);
833
+ fptr_glHistogram(target,width,internalformat,sink);
834
+ return Qnil;
835
+ }
836
+
837
+ static void (APIENTRY * fptr_glMinmax)(GLenum,GLenum,GLboolean);
838
+ static VALUE
839
+ gl_Minmax(obj,arg1,arg2,arg3)
840
+ VALUE obj,arg1,arg2,arg3;
841
+ {
842
+ GLenum target;
843
+ GLenum internalformat;
844
+ GLboolean sink;
845
+ LOAD_GL_FUNC(glMinmax)
846
+ target = (GLenum)NUM2INT(arg1);
847
+ internalformat = (GLenum)NUM2INT(arg2);
848
+ sink = (GLboolean)NUM2INT(arg3);
849
+ fptr_glMinmax(target,internalformat,sink);
850
+ return Qnil;
851
+ }
852
+
853
+ static void (APIENTRY * fptr_glResetHistogram)(GLenum);
854
+ static VALUE
855
+ gl_ResetHistogram(obj,arg1)
856
+ VALUE obj,arg1;
857
+ {
858
+ GLenum target;
859
+ LOAD_GL_FUNC(glResetHistogram)
860
+ target = (GLenum)NUM2INT(arg1);
861
+ fptr_glResetHistogram(target);
862
+ return Qnil;
863
+ }
864
+
865
+ static void (APIENTRY * fptr_glResetMinmax)(GLenum);
866
+ static VALUE
867
+ gl_ResetMinmax(obj,arg1)
868
+ VALUE obj,arg1;
869
+ {
870
+ GLenum target;
871
+ LOAD_GL_FUNC(glResetMinmax)
872
+ target = (GLenum)NUM2INT(arg1);
873
+ fptr_glResetMinmax(target);
874
+ return Qnil;
875
+ }
876
+
877
+ static void (APIENTRY * fptr_glTexImage3D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
878
+ static VALUE
50
879
  gl_TexImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
51
880
  VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
52
881
  {
@@ -59,32 +888,51 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
59
888
  GLint border;
60
889
  GLenum format;
61
890
  GLenum type;
891
+ const char *pixels;
62
892
  int size;
63
893
  int type_size;
64
894
  int format_size;
895
+ LOAD_GL_FUNC(glTexImage3D)
65
896
  target = (GLenum)NUM2INT(arg1);
66
897
  level = (GLint)NUM2INT(arg2);
67
898
  internalFormat = (GLint)NUM2INT(arg3);
68
- width = (GLsizei)NUM2INT(arg4);
69
- height = (GLsizei)NUM2INT(arg5);
70
- depth = (GLsizei)NUM2INT(arg6);
899
+ width = (GLsizei)NUM2UINT(arg4);
900
+ height = (GLsizei)NUM2UINT(arg5);
901
+ depth = (GLsizei)NUM2UINT(arg6);
71
902
  border = (GLint)NUM2INT(arg7);
72
903
  format = (GLenum)NUM2INT(arg8);
73
904
  type = (GLenum)NUM2INT(arg9);
74
905
  Check_Type(arg10, T_STRING);
75
- type_size = gltype_size(type) / 8;
906
+ type_size = gltype_size(type);
76
907
  format_size = glformat_size(format);
77
908
  if (type_size == -1 || format_size == -1)
78
909
  return Qnil;
79
- size = type_size*format_size*height*width*depth;
80
- if (RSTRING(arg10)->len < size)
81
- rb_raise(rb_eArgError, "string length:%d",RSTRING(arg10)->len);
82
- glTexImage3D( target, level, internalFormat, width, height,
83
- depth, border, format, type,
84
- (const GLvoid*)RSTRING(arg10)->ptr);
910
+ if (type==GL_BITMAP)
911
+ size = format_size*((height*width*depth)/8);
912
+ else
913
+ size = type_size*format_size*height*width*depth;
914
+
915
+ if (target == GL_PROXY_TEXTURE_3D || NIL_P(arg10)) { /* proxy texture, no data read */
916
+ pixels = NULL;
917
+ } else {
918
+ if (TYPE(arg10) == T_FIXNUM || TYPE(arg10) == T_BIGNUM) { /* arg10 is offset to unpack buffer */
919
+ pixels = (const char *)NUM2UINT(arg10);
920
+ } else if (TYPE(arg10) == T_STRING) { /* image data */
921
+ if (RSTRING(arg10)->len < size)
922
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg10)->len);
923
+ pixels = RSTRING(arg10)->ptr;
924
+ } else {
925
+ Check_Type(arg10,T_STRING); /* force exception */
926
+ return Qnil;
927
+ }
928
+ }
929
+ fptr_glTexImage3D( target, level, internalFormat, width, height,
930
+ depth, border, format, type,pixels);
85
931
  return Qnil;
86
932
  }
87
- VALUE
933
+
934
+ static void (APIENTRY * fptr_glTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
935
+ static VALUE
88
936
  gl_TexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)
89
937
  VALUE arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11;
90
938
  {
@@ -98,33 +946,50 @@ VALUE arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11;
98
946
  GLsizei depth;
99
947
  GLenum format;
100
948
  GLenum type;
949
+ const char *pixels;
101
950
  int size;
102
951
  int type_size;
103
952
  int format_size;
953
+ LOAD_GL_FUNC(glTexSubImage3D)
104
954
  target = (GLenum)NUM2INT(arg1);
105
955
  level = (GLint)NUM2INT(arg2);
106
956
  xoffset = (GLint)NUM2INT(arg3);
107
957
  yoffset = (GLint)NUM2INT(arg4);
108
958
  zoffset = (GLint)NUM2INT(arg5);
109
- width = (GLsizei)NUM2INT(arg6);
110
- height = (GLsizei)NUM2INT(arg7);
111
- depth = (GLsizei)NUM2INT(arg8);
959
+ width = (GLsizei)NUM2UINT(arg6);
960
+ height = (GLsizei)NUM2UINT(arg7);
961
+ depth = (GLsizei)NUM2UINT(arg8);
112
962
  format = (GLenum)NUM2INT(arg9);
113
963
  type = (GLenum)NUM2INT(arg10);
114
964
  Check_Type(arg11, T_STRING);
115
- type_size = gltype_size(type) / 8;
965
+ type_size = gltype_size(type);
116
966
  format_size = glformat_size(format);
117
967
  if (type_size == -1 || format_size == -1)
118
968
  return Qnil;
119
- size = type_size*format_size*height*width*depth;
120
- if (RSTRING(arg11)->len < size)
121
- rb_raise(rb_eArgError, "string length:%d",RSTRING(arg11)->len);
122
- glTexSubImage3D( target, level, xoffset, yoffset, zoffset,
969
+ if (type==GL_BITMAP)
970
+ size = format_size*((height*width*depth)/8);
971
+ else
972
+ size = type_size*format_size*height*width*depth;
973
+
974
+ if (TYPE(arg11) == T_STRING) {
975
+ if (RSTRING(arg11)->len < size)
976
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg11)->len);
977
+ pixels = RSTRING(arg11)->ptr;
978
+ } else if (TYPE(arg11) == T_FIXNUM || TYPE(arg11) == T_BIGNUM) { /* arg11 is offset to unpack buffer */
979
+ pixels = (const char *)NUM2UINT(arg11);
980
+ } else {
981
+ Check_Type(arg11,T_STRING); /* force exception */
982
+ return Qnil;
983
+ }
984
+
985
+ fptr_glTexSubImage3D( target, level, xoffset, yoffset, zoffset,
123
986
  width, height, depth,
124
- format, type, RSTRING(arg11)->ptr);
987
+ format, type, pixels);
125
988
  return Qnil;
126
989
  }
127
- VALUE
990
+
991
+ static void (APIENTRY * fptr_glCopyTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
992
+ static VALUE
128
993
  gl_CopyTexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
129
994
  VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
130
995
  {
@@ -137,6 +1002,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
137
1002
  GLint y;
138
1003
  GLsizei width;
139
1004
  GLsizei height;
1005
+ LOAD_GL_FUNC(glCopyTexSubImage3D)
140
1006
  target = (GLenum)NUM2INT(arg1);
141
1007
  level = (GLint)NUM2INT(arg2);
142
1008
  xoffset = (GLint)NUM2INT(arg3);
@@ -144,23 +1010,52 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
144
1010
  zoffset = (GLint)NUM2INT(arg5);
145
1011
  x = (GLint)NUM2INT(arg6);
146
1012
  y = (GLint)NUM2INT(arg7);
147
- width = (GLsizei)NUM2INT(arg8);
148
- height = (GLsizei)NUM2INT(arg9);
149
- glCopyTexSubImage3D( target, level,
1013
+ width = (GLsizei)NUM2UINT(arg8);
1014
+ height = (GLsizei)NUM2UINT(arg9);
1015
+ fptr_glCopyTexSubImage3D( target, level,
150
1016
  xoffset, yoffset, zoffset,
151
1017
  x, y, width, height );
152
1018
  return Qnil;
153
1019
  }
154
- */
155
-
156
-
157
1020
 
158
1021
  void gl_init_functions_1_2(VALUE module)
159
1022
  {
160
- /*
1023
+ rb_define_module_function(module, "glBlendColor", gl_BlendColor, 4);
1024
+ rb_define_module_function(module, "glBlendEquation", gl_BlendEquation, 1);
161
1025
  rb_define_module_function(module, "glDrawRangeElements", gl_DrawRangeElements, 6);
1026
+ rb_define_module_function(module, "glColorTable", gl_ColorTable, 6);
1027
+ rb_define_module_function(module, "glColorTableParameterfv", gl_ColorTableParameterfv, 3);
1028
+ rb_define_module_function(module, "glColorTableParameteriv", gl_ColorTableParameteriv, 3);
1029
+ rb_define_module_function(module, "glCopyColorTable", gl_CopyColorTable, 5);
1030
+ rb_define_module_function(module, "glGetColorTable", gl_GetColorTable, 3);
1031
+ rb_define_module_function(module, "glGetColorTableParameterfv", gl_GetColorTableParameterfv, 2);
1032
+ rb_define_module_function(module, "glGetColorTableParameteriv", gl_GetColorTableParameteriv, 2);
1033
+ rb_define_module_function(module, "glColorSubTable", gl_ColorSubTable, 6);
1034
+ rb_define_module_function(module, "glCopyColorSubTable", gl_CopyColorSubTable, 5);
1035
+ rb_define_module_function(module, "glConvolutionFilter1D", gl_ConvolutionFilter1D, 6);
1036
+ rb_define_module_function(module, "glConvolutionFilter2D", gl_ConvolutionFilter2D, 7);
1037
+ rb_define_module_function(module, "glConvolutionParameterf", gl_ConvolutionParameterf, 3);
1038
+ rb_define_module_function(module, "glConvolutionParameterfv", gl_ConvolutionParameterfv, 3);
1039
+ rb_define_module_function(module, "glConvolutionParameteri", gl_ConvolutionParameteri, 3);
1040
+ rb_define_module_function(module, "glConvolutionParameteriv", gl_ConvolutionParameteriv, 3);
1041
+ rb_define_module_function(module, "glCopyConvolutionFilter1D", gl_CopyConvolutionFilter1D, 5);
1042
+ rb_define_module_function(module, "glCopyConvolutionFilter2D", gl_CopyConvolutionFilter2D, 6);
1043
+ rb_define_module_function(module, "glGetConvolutionFilter", gl_GetConvolutionFilter, 3);
1044
+ rb_define_module_function(module, "glGetConvolutionParameterfv", gl_GetConvolutionParameterfv, 2);
1045
+ rb_define_module_function(module, "glGetConvolutionParameteriv", gl_GetConvolutionParameteriv, 2);
1046
+ rb_define_module_function(module, "glGetSeparableFilter", gl_GetSeparableFilter, 3);
1047
+ rb_define_module_function(module, "glSeparableFilter2D", gl_SeparableFilter2D, 8);
1048
+ rb_define_module_function(module, "glGetHistogram", gl_GetHistogram, 4);
1049
+ rb_define_module_function(module, "glGetHistogramParameterfv", gl_GetHistogramParameterfv, 2);
1050
+ rb_define_module_function(module, "glGetHistogramParameteriv", gl_GetHistogramParameteriv, 2);
1051
+ rb_define_module_function(module, "glGetMinmax", gl_GetMinmax, 4);
1052
+ rb_define_module_function(module, "glGetMinmaxParameterfv", gl_GetMinmaxParameterfv, 2);
1053
+ rb_define_module_function(module, "glGetMinmaxParameteriv", gl_GetMinmaxParameteriv, 2);
1054
+ rb_define_module_function(module, "glHistogram", gl_Histogram, 4);
1055
+ rb_define_module_function(module, "glMinmax", gl_Minmax, 3);
1056
+ rb_define_module_function(module, "glResetHistogram", gl_ResetHistogram, 1);
1057
+ rb_define_module_function(module, "glResetMinmax", gl_ResetMinmax, 1);
162
1058
  rb_define_module_function(module, "glTexImage3D", gl_TexImage3D, 10);
163
1059
  rb_define_module_function(module, "glTexSubImage3D", gl_TexSubImage3D, 11);
164
1060
  rb_define_module_function(module, "glCopyTexSubImage3D", gl_CopyTexSubImage3D, 9);
165
- */
166
1061
  }