ruby-opengl 0.50.0 → 0.60.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/Rakefile +15 -11
  2. data/doc/build_install.txt +10 -6
  3. data/doc/extensions.txt.in +348 -0
  4. data/doc/history.txt +4 -0
  5. data/doc/roadmap.txt +4 -6
  6. data/doc/scientific_use.txt +7 -0
  7. data/doc/supplies/page_template.html +2 -1
  8. data/doc/thanks.txt +5 -0
  9. data/doc/tutorial.txt +431 -121
  10. data/examples/NeHe/nehe_lesson02.rb +1 -1
  11. data/examples/NeHe/nehe_lesson03.rb +1 -1
  12. data/examples/NeHe/nehe_lesson04.rb +1 -1
  13. data/examples/NeHe/nehe_lesson05.rb +1 -1
  14. data/examples/NeHe/nehe_lesson36.rb +1 -1
  15. data/examples/OrangeBook/brick.rb +3 -15
  16. data/examples/OrangeBook/particle.rb +2 -20
  17. data/examples/RedBook/aapoly.rb +1 -1
  18. data/examples/RedBook/aargb.rb +2 -2
  19. data/examples/RedBook/accanti.rb +1 -1
  20. data/examples/RedBook/accpersp.rb +1 -1
  21. data/examples/RedBook/alpha.rb +2 -2
  22. data/examples/RedBook/alpha3D.rb +1 -1
  23. data/examples/RedBook/bezcurve.rb +1 -1
  24. data/examples/RedBook/bezmesh.rb +1 -1
  25. data/examples/RedBook/checker.rb +1 -1
  26. data/examples/RedBook/clip.rb +1 -1
  27. data/examples/RedBook/colormat.rb +1 -1
  28. data/examples/RedBook/cube.rb +1 -1
  29. data/examples/RedBook/depthcue.rb +1 -1
  30. data/examples/RedBook/dof.rb +1 -1
  31. data/examples/RedBook/double.rb +1 -1
  32. data/examples/RedBook/drawf.rb +1 -1
  33. data/examples/RedBook/feedback.rb +1 -1
  34. data/examples/RedBook/fog.rb +1 -1
  35. data/examples/RedBook/font.rb +2 -2
  36. data/examples/RedBook/hello.rb +1 -1
  37. data/examples/RedBook/image.rb +4 -4
  38. data/examples/RedBook/lines.rb +1 -1
  39. data/examples/RedBook/list.rb +1 -1
  40. data/examples/RedBook/material.rb +1 -1
  41. data/examples/RedBook/mipmap.rb +1 -1
  42. data/examples/RedBook/model.rb +1 -1
  43. data/examples/RedBook/movelight.rb +1 -1
  44. data/examples/RedBook/pickdepth.rb +1 -1
  45. data/examples/RedBook/planet.rb +5 -5
  46. data/examples/RedBook/quadric.rb +1 -1
  47. data/examples/RedBook/robot.rb +5 -5
  48. data/examples/RedBook/select.rb +1 -1
  49. data/examples/RedBook/smooth.rb +1 -1
  50. data/examples/RedBook/stencil.rb +1 -1
  51. data/examples/RedBook/stroke.rb +2 -2
  52. data/examples/RedBook/surface.rb +1 -1
  53. data/examples/RedBook/teaambient.rb +1 -1
  54. data/examples/RedBook/teapots.rb +1 -1
  55. data/examples/RedBook/tess.rb +1 -1
  56. data/examples/RedBook/texbind.rb +1 -1
  57. data/examples/RedBook/texgen.rb +5 -5
  58. data/examples/RedBook/texturesurf.rb +1 -1
  59. data/examples/RedBook/varray.rb +1 -1
  60. data/examples/RedBook/wrap.rb +5 -5
  61. data/examples/misc/OGLBench.rb +337 -0
  62. data/examples/misc/anisotropic.rb +1 -1
  63. data/examples/misc/fbo_test.rb +356 -0
  64. data/examples/misc/font-glut.rb +1 -1
  65. data/examples/misc/glfwtest.rb +30 -0
  66. data/examples/misc/md2model.rb +15 -0
  67. data/examples/misc/plane.rb +1 -1
  68. data/examples/misc/readpixel.rb +1 -1
  69. data/examples/misc/sdltest.rb +34 -0
  70. data/examples/misc/trislam.rb +828 -0
  71. data/ext/common/common.h +126 -218
  72. data/ext/common/conv.h +244 -0
  73. data/ext/common/funcdef.h +280 -0
  74. data/ext/common/gl-error.h +23 -0
  75. data/ext/common/gl-types.h +14 -0
  76. data/ext/gl/gl-1.0-1.1.c +497 -1255
  77. data/ext/gl/gl-1.2.c +121 -304
  78. data/ext/gl/gl-1.3.c +78 -339
  79. data/ext/gl/gl-1.4.c +102 -164
  80. data/ext/gl/gl-1.5.c +42 -173
  81. data/ext/gl/gl-2.0.c +273 -1039
  82. data/ext/gl/gl-2.1.c +15 -19
  83. data/ext/gl/gl-enums.c +3 -2
  84. data/ext/gl/gl-error.c +104 -0
  85. data/ext/gl/gl-ext-3dfx.c +27 -0
  86. data/ext/gl/gl-ext-arb.c +812 -12
  87. data/ext/gl/gl-ext-ati.c +41 -0
  88. data/ext/gl/gl-ext-ext.c +791 -119
  89. data/ext/gl/gl-ext-gremedy.c +41 -0
  90. data/ext/gl/gl-ext-nv.c +679 -0
  91. data/ext/gl/gl.c +48 -28
  92. data/ext/gl/mkrf_conf.rb +13 -10
  93. data/ext/glu/glu-enums.c +3 -2
  94. data/ext/glu/glu.c +136 -41
  95. data/ext/glu/mkrf_conf.rb +15 -12
  96. data/ext/glut/glut.c +37 -80
  97. data/ext/glut/mkrf_conf.rb +17 -13
  98. data/lib/opengl.rb +29 -53
  99. data/test/tc_common.rb +9 -3
  100. data/test/tc_ext_arb.rb +397 -3
  101. data/test/tc_ext_ati.rb +33 -0
  102. data/test/tc_ext_ext.rb +479 -2
  103. data/test/tc_ext_gremedy.rb +36 -0
  104. data/test/tc_ext_nv.rb +357 -0
  105. data/test/tc_func_10_11.rb +93 -67
  106. data/test/tc_func_12.rb +11 -11
  107. data/test/tc_func_13.rb +38 -18
  108. data/test/tc_func_14.rb +2 -2
  109. data/test/tc_func_15.rb +10 -10
  110. data/test/tc_func_20.rb +20 -20
  111. data/test/tc_func_21.rb +53 -22
  112. data/test/tc_glu.rb +9 -4
  113. data/test/tc_misc.rb +15 -2
  114. metadata +22 -8
  115. data/doc/extensions.txt +0 -361
  116. data/examples/RedBook/aaindex.rb +0 -97
  117. data/examples/misc/smooth.rb +0 -42
  118. data/examples/misc/test.rb +0 -65
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
3
+ *
4
+ * This program is distributed under the terms of the MIT license.
5
+ * See the included MIT-LICENSE file for the terms of this license.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
10
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
11
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
12
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
13
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ */
15
+
16
+ #include "../common/common.h"
17
+
18
+ /* OpenGL ATI extensions */
19
+
20
+ /* #277 GL_ATI_draw_buffers */
21
+ static void (APIENTRY * fptr_glDrawBuffersATI)(GLsizei,const GLenum *);
22
+ static VALUE gl_DrawBuffersATI(VALUE obj,VALUE arg1)
23
+ {
24
+ GLsizei size;
25
+ GLenum *buffers;
26
+ LOAD_GL_FUNC(glDrawBuffersATI,"GL_ATI_draw_buffers")
27
+ Check_Type(arg1,T_ARRAY);
28
+ size = RARRAY(arg1)->len;
29
+ buffers = ALLOC_N(GLenum,size);
30
+ ary2cuint(arg1,buffers,size);
31
+ fptr_glDrawBuffersATI(size,buffers);
32
+ xfree(buffers);
33
+ CHECK_GLERROR
34
+ return Qnil;
35
+ }
36
+
37
+ void gl_init_functions_ext_ati(VALUE module)
38
+ {
39
+ /* #277 GL_ATI_draw_buffers */
40
+ rb_define_module_function(module, "glDrawBuffersATI", gl_DrawBuffersATI, 1);
41
+ }
@@ -19,183 +19,785 @@
19
19
  /* Those are extensions that are not blessed by ARB committee but were
20
20
  created or agreed upon by multiple vendors */
21
21
 
22
- /* #310 - GL_EXT_framebuffer_object */
23
- static GLboolean (APIENTRY * fptr_glIsRenderbufferEXT)(GLuint);
24
- static VALUE gl_IsRenderbufferEXT(VALUE obj,VALUE arg1)
22
+ /* #2 - GL_EXT_blend_color */
23
+ GL_FUNC_LOAD_4(BlendColorEXT,GLvoid, GLclampf,GLclampf,GLclampf,GLclampf, "GL_EXT_blend_color")
24
+
25
+ /* #3 - GL_EXT_polygon_offset */
26
+ GL_FUNC_LOAD_2(PolygonOffsetEXT,GLvoid, GLfloat,GLfloat, "GL_EXT_polygon_offset")
27
+
28
+ /* #20 - GL_EXT_texture_object */
29
+ GL_FUNC_GENOBJECTS_LOAD(GenTexturesEXT,"GL_EXT_texture_object")
30
+ GL_FUNC_DELETEOBJECTS_LOAD(DeleteTexturesEXT,"GL_EXT_texture_object")
31
+ GL_FUNC_LOAD_2(BindTextureEXT,GLvoid, GLenum,GLint, "GL_EXT_texture_object")
32
+
33
+ static void (APIENTRY * fptr_glPrioritizeTexturesEXT)(GLsizei,const GLuint *,const GLclampf *);
34
+ static VALUE
35
+ gl_PrioritizeTexturesEXT(obj,arg1,arg2)
36
+ VALUE obj,arg1,arg2;
25
37
  {
26
- GLboolean ret;
27
- LOAD_GL_EXT_FUNC(glIsRenderbufferEXT,"GL_EXT_framebuffer_object")
28
- ret = fptr_glIsRenderbufferEXT((GLuint)NUM2UINT(arg1));
29
- return INT2NUM(ret);
38
+ GLuint *textures;
39
+ GLclampf *priorities;
40
+ GLsizei size;
41
+ LOAD_GL_FUNC(glPrioritizeTexturesEXT,"GL_EXT_texture_object")
42
+ Check_Type(arg1,T_ARRAY);
43
+ Check_Type(arg2,T_ARRAY);
44
+ if ((size = RARRAY(arg1)->len) != RARRAY(arg2)->len)
45
+ rb_raise(rb_eArgError, "passed arrays must have the same length");
46
+ textures = ALLOC_N(GLuint,size);
47
+ priorities = ALLOC_N(GLclampf,size);
48
+ ary2cuint(arg1,textures,size);
49
+ ary2cflt(arg2,priorities,size);
50
+ fptr_glPrioritizeTexturesEXT(size,textures,priorities);
51
+ xfree(textures);
52
+ xfree(priorities);
53
+ CHECK_GLERROR
54
+ return Qnil;
55
+ }
56
+
57
+ static GLboolean (APIENTRY * fptr_glAreTexturesResidentEXT)(GLsizei,const GLuint *,GLboolean *);
58
+ static VALUE
59
+ gl_AreTexturesResidentEXT(obj,arg1)
60
+ VALUE obj,arg1;
61
+ {
62
+ GLuint *textures;
63
+ GLboolean *residences;
64
+ GLsizei size;
65
+ GLboolean r;
66
+ VALUE retary;
67
+ VALUE ary;
68
+ int i;
69
+ LOAD_GL_FUNC(glAreTexturesResidentEXT,"GL_EXT_texture_object")
70
+ ary = rb_Array(arg1);
71
+ size = RARRAY(ary)->len;
72
+ textures = ALLOC_N(GLuint,size);
73
+ residences = ALLOC_N(GLboolean,size);
74
+ ary2cuint(ary,textures,size);
75
+ r = fptr_glAreTexturesResidentEXT(size,textures,residences);
76
+ retary = rb_ary_new2(size);
77
+ if (r==GL_TRUE) { /* all are resident */
78
+ for(i=0;i<size;i++)
79
+ rb_ary_push(retary, GLBOOL2RUBY(GL_TRUE));
80
+ } else {
81
+ for(i=0;i<size;i++)
82
+ rb_ary_push(retary, GLBOOL2RUBY(residences[i]));
83
+ }
84
+ xfree(textures);
85
+ xfree(residences);
86
+ CHECK_GLERROR
87
+ return retary;
88
+ }
89
+
90
+ GL_FUNC_LOAD_1(IsTextureEXT,GLboolean, GLuint, "GL_EXT_texture_object")
91
+
92
+ /* #37 - GL_EXT_blend_minmax */
93
+ GL_FUNC_LOAD_1(BlendEquationEXT,GLvoid, GLenum, "GL_EXT_blend_minmax")
94
+
95
+ /* #54 - GL_EXT_point_parameters */
96
+ GL_FUNC_LOAD_2(PointParameterfEXT,GLvoid, GLenum,GLfloat, "GL_EXT_point_parameters")
97
+
98
+ static void (APIENTRY * fptr_glPointParameterfvEXT)(GLenum,GLfloat *);
99
+ static VALUE gl_PointParameterfvEXT(VALUE obj,VALUE arg1,VALUE arg2)
100
+ {
101
+ GLfloat params[3] = {0.0,0.0,0.0};
102
+ GLenum pname;
103
+ GLint size;
104
+ LOAD_GL_FUNC(glPointParameterfvEXT,"GL_EXT_point_parameters")
105
+ pname = NUM2UINT(arg1);
106
+ Check_Type(arg2,T_ARRAY);
107
+ if (pname==GL_POINT_DISTANCE_ATTENUATION)
108
+ size = 3;
109
+ else
110
+ size = 1;
111
+ ary2cflt(arg2,params,size);
112
+ fptr_glPointParameterfvEXT(pname,params);
113
+ CHECK_GLERROR
114
+ return Qnil;
115
+ }
116
+
117
+ /* #145 - GL_EXT_secondary_color */
118
+ GL_FUNC_LOAD_3(SecondaryColor3bEXT,GLvoid, GLbyte,GLbyte,GLbyte, "GL_EXT_secondary_color")
119
+ GL_FUNC_LOAD_3(SecondaryColor3sEXT,GLvoid, GLshort,GLshort,GLshort, "GL_EXT_secondary_color")
120
+ GL_FUNC_LOAD_3(SecondaryColor3iEXT,GLvoid, GLint,GLint,GLint, "GL_EXT_secondary_color")
121
+ GL_FUNC_LOAD_3(SecondaryColor3fEXT,GLvoid, GLfloat,GLfloat,GLfloat, "GL_EXT_secondary_color")
122
+ GL_FUNC_LOAD_3(SecondaryColor3dEXT,GLvoid, GLdouble,GLdouble,GLdouble, "GL_EXT_secondary_color")
123
+ GL_FUNC_LOAD_3(SecondaryColor3ubEXT,GLvoid, GLubyte,GLubyte,GLubyte, "GL_EXT_secondary_color")
124
+ GL_FUNC_LOAD_3(SecondaryColor3usEXT,GLvoid, GLushort,GLushort,GLushort, "GL_EXT_secondary_color")
125
+ GL_FUNC_LOAD_3(SecondaryColor3uiEXT,GLvoid, GLuint,GLuint,GLuint, "GL_EXT_secondary_color")
126
+
127
+ #define GLSECONDARYCOLOREXT_VFUNC(_name_,_type_,_conv_) \
128
+ static void (APIENTRY * fptr_gl##_name_)(_type_ *); \
129
+ VALUE gl_##_name_(VALUE obj,VALUE arg1) \
130
+ { \
131
+ _type_ cary[3] = {0,0,0}; \
132
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_secondary_color") \
133
+ Check_Type(arg1,T_ARRAY); \
134
+ _conv_(arg1,cary,3); \
135
+ fptr_gl##_name_(cary); \
136
+ CHECK_GLERROR \
137
+ return Qnil; \
30
138
  }
31
139
 
32
- static void (APIENTRY * fptr_glBindRenderbufferEXT)(GLenum,GLuint);
33
- static VALUE gl_BindRenderbufferEXT(VALUE obj,VALUE arg1,VALUE arg2)
140
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3bvEXT,GLbyte,ary2cbyte)
141
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3dvEXT,GLdouble,ary2cdbl)
142
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3fvEXT,GLfloat,ary2cflt)
143
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3ivEXT,GLint,ary2cint)
144
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3svEXT,GLshort,ary2cshort)
145
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3uivEXT,GLuint,ary2cuint)
146
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3ubvEXT,GLubyte,ary2cubyte)
147
+ GLSECONDARYCOLOREXT_VFUNC(SecondaryColor3usvEXT,GLushort,ary2cushort)
148
+ #undef GLSECONDARYCOLOREXT_VFUNC
149
+
150
+ extern VALUE g_SecondaryColor_ptr;
151
+ static void (APIENTRY * fptr_glSecondaryColorPointerEXT)(GLint,GLenum,GLsizei,const GLvoid *);
152
+ static VALUE
153
+ gl_SecondaryColorPointerEXT(obj,arg1,arg2,arg3,arg4)
154
+ VALUE obj,arg1,arg2,arg3,arg4;
34
155
  {
35
- LOAD_GL_EXT_FUNC(glBindRenderbufferEXT,"GL_EXT_framebuffer_object")
36
- fptr_glBindRenderbufferEXT((GLenum)NUM2INT(arg1),(GLuint)NUM2UINT(arg2));
156
+ GLint size;
157
+ GLenum type;
158
+ GLsizei stride;
159
+ LOAD_GL_FUNC(glSecondaryColorPointerEXT,"GL_EXT_secondary_color")
160
+ size = (GLint)NUM2INT(arg1);
161
+ type = (GLenum)NUM2INT(arg2);
162
+ stride = (GLsizei)NUM2UINT(arg3);
163
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
164
+ g_SecondaryColor_ptr = arg4;
165
+ fptr_glSecondaryColorPointerEXT(size,type, stride, (const GLvoid*)NUM2INT(arg4));
166
+ } else {
167
+ VALUE data;
168
+ data = pack_array_or_pass_string(type,arg4);
169
+ rb_str_freeze(data);
170
+ g_SecondaryColor_ptr = data;
171
+ fptr_glSecondaryColorPointerEXT(size,type, stride, (const GLvoid*)RSTRING_PTR(data));
172
+ }
173
+ CHECK_GLERROR
37
174
  return Qnil;
38
175
  }
39
176
 
40
- static void (APIENTRY * fptr_glDeleteRenderbuffersEXT)(GLsizei,const GLuint *);
41
- static VALUE gl_DeleteRenderbuffersEXT(VALUE obj,VALUE arg1)
177
+ /* #97 - GL_EXT_compiled_vertex_array */
178
+ GL_FUNC_LOAD_2(LockArraysEXT,GLvoid, GLint,GLint, "GL_EXT_compiled_vertex_array")
179
+ GL_FUNC_LOAD_0(UnlockArraysEXT,GLvoid, "GL_EXT_compiled_vertex_array")
180
+
181
+ /* #112 - GL_EXT_draw_range_elements */
182
+ static void (APIENTRY * fptr_glDrawRangeElementsEXT)(GLenum,GLuint,GLuint,GLsizei,GLenum,GLvoid*);
183
+ static VALUE
184
+ gl_DrawRangeElementsEXT(obj,arg1,arg2,arg3,arg4,arg5,arg6)
185
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
42
186
  {
43
- GLsizei n;
44
- LOAD_GL_EXT_FUNC(glDeleteRenderbuffersEXT,"GL_EXT_framebuffer_object")
45
- if (TYPE(arg1)==T_ARRAY) {
46
- GLuint *renderbuffers;
47
- n = RARRAY(arg1)->len;
48
- renderbuffers = ALLOC_N(GLuint,n);
49
- ary2cuint(arg1,renderbuffers,n);
50
- fptr_glDeleteRenderbuffersEXT(n,renderbuffers);
51
- xfree(renderbuffers);
187
+ GLenum mode;
188
+ GLuint start;
189
+ GLuint end;
190
+ GLsizei count;
191
+ GLenum type;
192
+ LOAD_GL_FUNC(glDrawRangeElementsEXT,"GL_EXT_draw_range_elements")
193
+ mode = (GLenum)NUM2INT(arg1);
194
+ start = (GLuint)NUM2UINT(arg2);
195
+ end = (GLuint)NUM2UINT(arg3);
196
+ count = (GLsizei)NUM2UINT(arg4);
197
+ type = (GLenum)NUM2INT(arg5);
198
+ if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
199
+ fptr_glDrawRangeElementsEXT(mode, start, end, count, type, (GLvoid *)NUM2INT(arg6));
52
200
  } else {
53
- GLuint renderbuffer;
54
- renderbuffer = NUM2UINT(arg1);
55
- fptr_glDeleteRenderbuffersEXT(1,&renderbuffer);
201
+ VALUE data;
202
+ data = pack_array_or_pass_string(type,arg6);
203
+ fptr_glDrawRangeElementsEXT(mode, start, end, count, type, RSTRING_PTR(data));
56
204
  }
205
+ CHECK_GLERROR
206
+ return Qnil;
207
+ }
208
+
209
+ /* #148 - GL_EXT_multi_draw_arrays */
210
+ static void (APIENTRY * fptr_glMultiDrawArraysEXT)(GLenum,GLint*,GLsizei*,GLsizei);
211
+ static VALUE
212
+ gl_MultiDrawArraysEXT(obj,arg1,arg2,arg3)
213
+ VALUE obj,arg1,arg2,arg3;
214
+ {
215
+ GLenum mode;
216
+ GLint *ary1;
217
+ GLsizei *ary2;
218
+ int len1,len2;
219
+ LOAD_GL_FUNC(glMultiDrawArraysEXT,"GL_EXT_multi_draw_arrays")
220
+ len1 = RARRAY(arg2)->len;
221
+ len2 = RARRAY(arg3)->len;
222
+ if (len1!=len2)
223
+ rb_raise(rb_eArgError, "Passed arrays must have same length");
224
+ mode = (GLenum)NUM2INT(arg1);
225
+ ary1 = ALLOC_N(GLint,len1);
226
+ ary2 = ALLOC_N(GLsizei,len2);
227
+ ary2cint(arg2,ary1,len1);
228
+ ary2cint(arg3,ary2,len2);
229
+ fptr_glMultiDrawArraysEXT(mode,ary1,ary2,len1);
230
+ xfree(ary1);
231
+ xfree(ary2);
232
+ CHECK_GLERROR
57
233
  return Qnil;
58
234
  }
59
235
 
60
- static void (APIENTRY * fptr_glGenRenderbuffersEXT)(GLsizei,GLuint *);
61
- static VALUE gl_GenRenderbuffersEXT(VALUE obj,VALUE arg1)
236
+ static void (APIENTRY * fptr_glMultiDrawElementsEXT)(GLenum,const GLsizei *,GLenum,GLvoid **,GLsizei);
237
+ static VALUE
238
+ gl_MultiDrawElementsEXT(argc,argv,obj)
239
+ int argc;
240
+ VALUE *argv;
241
+ VALUE obj;
62
242
  {
63
- GLsizei n;
64
- GLuint *renderbuffers;
65
- VALUE ret;
243
+ GLenum mode;
244
+ GLenum type;
245
+ GLsizei *counts;
246
+ GLvoid **indices;
247
+ GLint size;
248
+ RArray *ary;
66
249
  int i;
67
- LOAD_GL_EXT_FUNC(glGenRenderbuffersEXT,"GL_EXT_framebuffer_object")
68
- n = (GLsizei)NUM2UINT(arg1);
69
- renderbuffers = ALLOC_N(GLuint, n);
70
- fptr_glGenRenderbuffersEXT(n,renderbuffers);
71
- ret = rb_ary_new2(n);
72
- for (i = 0; i < n; i++)
73
- rb_ary_push(ret, INT2NUM(renderbuffers[i]));
74
- xfree(renderbuffers);
75
- return ret;
76
- }
77
-
78
- static void (APIENTRY * fptr_glRenderbufferStorageEXT)(GLenum,GLenum,GLsizei,GLsizei);
79
- static VALUE gl_RenderbufferStorageEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4)
250
+ VALUE args[4];
251
+ LOAD_GL_FUNC(glMultiDrawElementsEXT,"GL_EXT_multi_draw_arrays")
252
+ switch (rb_scan_args(argc, argv, "31", &args[0], &args[1], &args[2],&args[3])) {
253
+ default:
254
+ case 3:
255
+ if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING))
256
+ rb_raise(rb_eArgError, "Element array buffer bound, but offsets array missing");
257
+ mode = (GLenum)NUM2INT(args[0]);
258
+ type = (GLenum)NUM2INT(args[1]);
259
+ Check_Type(args[2],T_ARRAY);
260
+ ary = RARRAY(args[2]);
261
+ size = ary->len;
262
+ counts = ALLOC_N(GLsizei,size);
263
+ indices = ALLOC_N(GLvoid*,size);
264
+ for (i=0;i<size;i++) {
265
+ VALUE data;
266
+ data = pack_array_or_pass_string(type,ary->ptr[i]);
267
+
268
+ indices[i] = RSTRING_PTR(data);
269
+ counts[i] = RSTRING_LEN(data);
270
+ }
271
+ fptr_glMultiDrawElementsEXT(mode,counts,type,indices,size);
272
+ xfree(counts);
273
+ xfree(indices);
274
+ break;
275
+ case 4:
276
+ if (!CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING))
277
+ rb_raise(rb_eArgError, "Element array buffer not bound");
278
+ mode = (GLenum)NUM2INT(args[0]);
279
+ type = (GLenum)NUM2INT(args[1]);
280
+ Check_Type(args[2],T_ARRAY);
281
+ Check_Type(args[3],T_ARRAY);
282
+ if (RARRAY(args[2])->len != RARRAY(args[3])->len)
283
+ rb_raise(rb_eArgError, "Count and indices offset array must have same length");
284
+
285
+ size = RARRAY(args[2])->len;
286
+
287
+ counts = ALLOC_N(GLsizei,size);
288
+ indices = ALLOC_N(GLvoid*,size);
289
+ for (i=0;i<size;i++) {
290
+ counts[i] = NUM2INT(rb_ary_entry(args[2],i));
291
+ indices[i] = (GLvoid *) NUM2INT(rb_ary_entry(args[3],i));
292
+ }
293
+ fptr_glMultiDrawElementsEXT(mode,counts,type,indices,size);
294
+ xfree(counts);
295
+ xfree(indices);
296
+ break;
297
+ }
298
+ CHECK_GLERROR
299
+ return Qnil;
300
+ }
301
+
302
+ /* #149 - GL_EXT_fog_coord */
303
+ GL_FUNC_LOAD_1(FogCoordfEXT,GLvoid, GLfloat, "GL_EXT_fog_coord")
304
+ GL_FUNC_LOAD_1(FogCoorddEXT,GLvoid, GLdouble, "GL_EXT_fog_coord")
305
+
306
+ #define GLFOGCOORD_VFUNC(_name_,_type_,_conv_) \
307
+ static void (APIENTRY * fptr_gl##_name_)(_type_ *); \
308
+ VALUE gl_##_name_(VALUE obj,VALUE arg1) \
309
+ { \
310
+ _type_ cary = 0; \
311
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_secondary_color") \
312
+ Check_Type(arg1,T_ARRAY); \
313
+ _conv_(arg1,&cary,1); \
314
+ fptr_gl##_name_(&cary); \
315
+ CHECK_GLERROR \
316
+ return Qnil; \
317
+ }
318
+ GLFOGCOORD_VFUNC(FogCoordfvEXT,GLfloat,ary2cflt)
319
+ GLFOGCOORD_VFUNC(FogCoorddvEXT,GLdouble,ary2cdbl)
320
+ #undef GLFOGCOORD_VFUNC
321
+
322
+ extern VALUE g_FogCoord_ptr;
323
+ static void (APIENTRY * fptr_glFogCoordPointerEXT)(GLenum,GLsizei,const GLvoid *);
324
+ static VALUE
325
+ gl_FogCoordPointerEXT(obj,arg1,arg2,arg3)
326
+ VALUE obj,arg1,arg2,arg3;
80
327
  {
81
- LOAD_GL_EXT_FUNC(glRenderbufferStorageEXT,"GL_EXT_framebuffer_object")
82
- fptr_glRenderbufferStorageEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2INT(arg3),NUM2INT(arg4));
328
+ GLenum type;
329
+ GLsizei stride;
330
+ LOAD_GL_FUNC(glFogCoordPointerEXT,"GL_EXT_secondary_color")
331
+ type = (GLenum)NUM2INT(arg1);
332
+ stride = (GLsizei)NUM2UINT(arg2);
333
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
334
+ g_FogCoord_ptr = arg3;
335
+ fptr_glFogCoordPointerEXT(type, stride, (const GLvoid*)NUM2INT(arg3));
336
+ } else {
337
+ VALUE data;
338
+ data = pack_array_or_pass_string(type,arg3);
339
+ rb_str_freeze(data);
340
+ g_FogCoord_ptr = data;
341
+ fptr_glFogCoordPointerEXT(type, stride, (const GLvoid*)RSTRING_PTR(data));
342
+ }
343
+ CHECK_GLERROR
83
344
  return Qnil;
84
345
  }
85
346
 
347
+ /* #173 - GL_EXT_blend_func_separate */
348
+ GL_FUNC_LOAD_4(BlendFuncSeparateEXT,GLvoid, GLenum,GLenum,GLenum,GLenum, "GL_EXT_blend_func_separate")
349
+
350
+ /* #268 - GL_EXT_stencil_two_side */
351
+ GL_FUNC_LOAD_1(ActiveStencilFaceEXT,GLvoid, GLenum, "GL_EXT_stencil_two_side")
352
+
353
+ /* #297 - GL_EXT_depth_bounds_test */
354
+ GL_FUNC_LOAD_2(DepthBoundsEXT,GLvoid, GLclampd,GLclampd, "GL_EXT_depth_bounds_test")
355
+
356
+ /* #299 - GL_EXT_blend_equation_separate */
357
+ GL_FUNC_LOAD_2(BlendEquationSeparateEXT,GLvoid, GLenum,GLenum, "GL_EXT_blend_equation_separate")
358
+
359
+ /* #310 - GL_EXT_framebuffer_object */
360
+ GL_FUNC_LOAD_1(IsRenderbufferEXT,GLboolean, GLuint, "GL_EXT_framebuffer_object")
361
+ GL_FUNC_LOAD_2(BindRenderbufferEXT,GLvoid, GLenum,GLuint, "GL_EXT_framebuffer_object")
362
+ GL_FUNC_LOAD_4(RenderbufferStorageEXT,GLvoid, GLenum,GLenum,GLsizei,GLsizei, "GL_EXT_framebuffer_object")
363
+ GL_FUNC_GENOBJECTS_LOAD(GenRenderbuffersEXT,"GL_EXT_framebuffer_object")
364
+ GL_FUNC_DELETEOBJECTS_LOAD(DeleteRenderbuffersEXT,"GL_EXT_framebuffer_object")
365
+
86
366
  static void (APIENTRY * fptr_glGetRenderbufferParameterivEXT)(GLenum,GLenum,GLint *);
87
367
  static VALUE gl_GetRenderbufferParameterivEXT(VALUE obj,VALUE arg1,VALUE arg2)
88
368
  {
89
369
  GLint param = 0;
90
- LOAD_GL_EXT_FUNC(glGetRenderbufferParameterivEXT,"GL_EXT_framebuffer_object")
370
+ LOAD_GL_FUNC(glGetRenderbufferParameterivEXT,"GL_EXT_framebuffer_object")
91
371
  fptr_glGetRenderbufferParameterivEXT(NUM2UINT(arg1),NUM2UINT(arg2),&param);
372
+ CHECK_GLERROR
92
373
  return INT2NUM(param);
93
374
  }
94
375
 
95
- static GLboolean (APIENTRY * fptr_glIsFramebufferEXT)(GLuint);
96
- static VALUE gl_IsFramebufferEXT(VALUE obj,VALUE arg1)
376
+ GL_FUNC_GENOBJECTS_LOAD(GenFramebuffersEXT,"GL_EXT_framebuffer_object")
377
+ GL_FUNC_DELETEOBJECTS_LOAD(DeleteFramebuffersEXT,"GL_EXT_framebuffer_object")
378
+ GL_FUNC_LOAD_1(IsFramebufferEXT,GLboolean, GLuint, "GL_EXT_framebuffer_object")
379
+ GL_FUNC_LOAD_2(BindFramebufferEXT,GLvoid, GLenum,GLuint, "GL_EXT_framebuffer_object")
380
+ GL_FUNC_LOAD_1(CheckFramebufferStatusEXT,GLenum, GLenum, "GL_EXT_framebuffer_object")
381
+ GL_FUNC_LOAD_5(FramebufferTexture1DEXT,GLvoid, GLenum,GLenum,GLenum,GLuint,GLint, "GL_EXT_framebuffer_object")
382
+ GL_FUNC_LOAD_5(FramebufferTexture2DEXT,GLvoid, GLenum,GLenum,GLenum,GLuint,GLint, "GL_EXT_framebuffer_object")
383
+ GL_FUNC_LOAD_6(FramebufferTexture3DEXT,GLvoid, GLenum,GLenum,GLenum,GLuint,GLint,GLint, "GL_EXT_framebuffer_object")
384
+
385
+ GL_FUNC_LOAD_4(FramebufferRenderbufferEXT,GLvoid, GLuint,GLuint,GLuint,GLuint, "GL_EXT_framebuffer_object")
386
+
387
+ static void (APIENTRY * fptr_glGetFramebufferAttachmentParameterivEXT)(GLenum,GLenum,GLenum,GLint *);
388
+ static VALUE gl_GetFramebufferAttachmentParameterivEXT(VALUE obj,VALUE arg1, VALUE arg2, VALUE arg3)
97
389
  {
98
- GLboolean ret;
99
- LOAD_GL_EXT_FUNC(glIsFramebufferEXT,"GL_EXT_framebuffer_object")
100
- ret = fptr_glIsFramebufferEXT(NUM2UINT(arg1));
101
- return INT2NUM(ret);
390
+ GLint ret = 0;
391
+ LOAD_GL_FUNC(glGetFramebufferAttachmentParameterivEXT,"GL_EXT_framebuffer_object")
392
+ fptr_glGetFramebufferAttachmentParameterivEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),&ret);
393
+ CHECK_GLERROR
394
+ return cond_GLBOOL2RUBY(NUM2UINT(arg3),ret);
102
395
  }
103
396
 
104
- static void (APIENTRY * fptr_glBindFramebufferEXT)(GLenum,GLuint);
105
- static VALUE gl_BindFramebufferEXT(VALUE obj,VALUE arg1,VALUE arg2)
106
- {
107
- LOAD_GL_EXT_FUNC(glBindFramebufferEXT,"GL_EXT_framebuffer_object")
108
- fptr_glBindFramebufferEXT((GLenum)NUM2INT(arg1),(GLuint)NUM2UINT(arg2));
109
- return Qnil;
397
+ GL_FUNC_LOAD_1(GenerateMipmapEXT,GLvoid, GLenum, "GL_EXT_framebuffer_object")
398
+
399
+ /* #314 - GL_EXT_stencil_clear_tag */
400
+ GL_FUNC_LOAD_2(StencilClearTagEXT,GLvoid, GLsizei,GLuint, "GL_EXT_stencil_clear_tag")
401
+
402
+ /* #316 - GL_EXT_framebuffer_blit */
403
+ GL_FUNC_LOAD_10(BlitFramebufferEXT,GLvoid, GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum, "GL_EXT_framebuffer_blit")
404
+
405
+ /* #317 - GL_EXT_framebuffer_multisample */
406
+ GL_FUNC_LOAD_5(RenderbufferStorageMultisampleEXT,GLvoid, GLenum,GLsizei,GLenum,GLsizei,GLsizei, "GL_EXT_framebuffer_multisample")
407
+
408
+ /* #319 - GL_EXT_timer_query */
409
+
410
+ #define GETQUERY_FUNC(_name_,_type_,_conv_) \
411
+ static void (APIENTRY * fptr_gl##_name_)(GLuint,GLenum,_type_ *); \
412
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1,VALUE arg2) \
413
+ { \
414
+ _type_ ret = 0; \
415
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_timer_query") \
416
+ fptr_gl##_name_(NUM2INT(arg1),NUM2INT(arg2),&ret); \
417
+ CHECK_GLERROR \
418
+ return _conv_(NUM2INT(arg2),ret); \
419
+ }
420
+
421
+ GETQUERY_FUNC(GetQueryObjecti64vEXT,GLint64EXT,cond_GLBOOL2RUBY_LL)
422
+ GETQUERY_FUNC(GetQueryObjectui64vEXT,GLuint64EXT,cond_GLBOOL2RUBY_ULL)
423
+ #undef GETQUERY_FUNC
424
+
425
+
426
+ /* #320 - GL_EXT_gpu_program_parameters */
427
+ #define PROGRAMPARAM_MULTI_FUNC_V(_name_,_type_,_conv_,_extension_) \
428
+ static void (APIENTRY * fptr_gl##_name_)(GLenum,GLuint,GLsizei,const _type_ *); \
429
+ static VALUE \
430
+ gl_##_name_(obj,arg1,arg2,arg3) \
431
+ VALUE obj,arg1,arg2,arg3; \
432
+ { \
433
+ _type_ *cary; \
434
+ int len; \
435
+ LOAD_GL_FUNC(gl##_name_,_extension_) \
436
+ len = RARRAY(rb_Array(arg3))->len; \
437
+ if (len<=0 || (len % 4) != 0) \
438
+ rb_raise(rb_eArgError, "Parameter array size must be multiplication of 4"); \
439
+ cary = ALLOC_N(_type_,len); \
440
+ _conv_(arg3,cary,len); \
441
+ fptr_gl##_name_(NUM2UINT(arg1),NUM2UINT(arg2),len / 4, cary); \
442
+ xfree(cary); \
443
+ CHECK_GLERROR \
444
+ return Qnil; \
445
+ }
446
+
447
+ PROGRAMPARAM_MULTI_FUNC_V(ProgramEnvParameters4fvEXT,GLfloat,ary2cflt,"GL_EXT_gpu_program_parameters")
448
+ PROGRAMPARAM_MULTI_FUNC_V(ProgramLocalParameters4fvEXT,GLfloat,ary2cflt,"GL_EXT_gpu_program_parameters")
449
+ #undef PROGRAMPARAM_MULTI_FUNC_V
450
+
451
+ /* #324 - GL_EXT_geometry_shader4 */
452
+ GL_FUNC_LOAD_3(ProgramParameteriEXT,GLvoid, GLuint,GLenum,GLint, "GL_EXT_geometry_shader4")
453
+
454
+ /* #326 - GL_EXT_gpu_shader4 */
455
+ GL_FUNC_LOAD_2(VertexAttribI1iEXT,GLvoid, GLuint,GLint, "GL_ARB_shader_objects")
456
+ GL_FUNC_LOAD_3(VertexAttribI2iEXT,GLvoid, GLuint,GLint,GLint, "GL_ARB_shader_objects")
457
+ GL_FUNC_LOAD_4(VertexAttribI3iEXT,GLvoid, GLuint,GLint,GLint,GLint, "GL_ARB_shader_objects")
458
+ GL_FUNC_LOAD_5(VertexAttribI4iEXT,GLvoid, GLuint,GLint,GLint,GLint,GLint, "GL_ARB_shader_objects")
459
+ GL_FUNC_LOAD_2(VertexAttribI1uiEXT,GLvoid, GLuint,GLuint, "GL_ARB_shader_objects")
460
+ GL_FUNC_LOAD_3(VertexAttribI2uiEXT,GLvoid, GLuint,GLuint,GLuint, "GL_ARB_shader_objects")
461
+ GL_FUNC_LOAD_4(VertexAttribI3uiEXT,GLvoid, GLuint,GLuint,GLuint,GLuint, "GL_ARB_shader_objects")
462
+ GL_FUNC_LOAD_5(VertexAttribI4uiEXT,GLvoid, GLuint,GLuint,GLuint,GLuint,GLuint, "GL_ARB_shader_objects")
463
+
464
+ #define GLVERTEXATTRIB_VFUNC(_name_,_type_,_conv_,_size_) \
465
+ static void (APIENTRY * fptr_gl##_name_)(GLuint,const _type_ *); \
466
+ static VALUE \
467
+ gl_##_name_(obj,arg1,arg2) \
468
+ VALUE obj,arg1,arg2; \
469
+ { \
470
+ _type_ value[_size_]; \
471
+ LOAD_GL_FUNC(gl##_name_,"GL_ARB_shader_objects") \
472
+ _conv_(arg2,value,_size_); \
473
+ fptr_gl##_name_(NUM2UINT(arg1),value); \
474
+ CHECK_GLERROR \
475
+ return Qnil; \
110
476
  }
111
477
 
112
- static void (APIENTRY * fptr_glDeleteFramebuffersEXT)(GLsizei,const GLuint *);
113
- static VALUE gl_DeleteFramebuffersEXT(VALUE obj,VALUE arg1)
478
+ GLVERTEXATTRIB_VFUNC(VertexAttribI1ivEXT,GLint,ary2cint,1)
479
+ GLVERTEXATTRIB_VFUNC(VertexAttribI2ivEXT,GLint,ary2cint,2)
480
+ GLVERTEXATTRIB_VFUNC(VertexAttribI3ivEXT,GLint,ary2cint,3)
481
+ GLVERTEXATTRIB_VFUNC(VertexAttribI4ivEXT,GLint,ary2cint,4)
482
+ GLVERTEXATTRIB_VFUNC(VertexAttribI1uivEXT,GLuint,ary2cuint,1)
483
+ GLVERTEXATTRIB_VFUNC(VertexAttribI2uivEXT,GLuint,ary2cuint,2)
484
+ GLVERTEXATTRIB_VFUNC(VertexAttribI3uivEXT,GLuint,ary2cuint,3)
485
+ GLVERTEXATTRIB_VFUNC(VertexAttribI4uivEXT,GLuint,ary2cuint,4)
486
+ GLVERTEXATTRIB_VFUNC(VertexAttribI4bvEXT,GLbyte,ary2cbyte,4)
487
+ GLVERTEXATTRIB_VFUNC(VertexAttribI4svEXT,GLshort,ary2cshort,4)
488
+ GLVERTEXATTRIB_VFUNC(VertexAttribI4ubvEXT,GLubyte,ary2cubyte,4)
489
+ GLVERTEXATTRIB_VFUNC(VertexAttribI4usvEXT,GLushort,ary2cushort,4)
490
+ #undef GLVERTEXATTRIB_VFUNC
491
+
492
+ #define GETVERTEXATTRIB_FUNC(_name_,_type_,_conv_,_extension_) \
493
+ static void (APIENTRY * fptr_gl##_name_)(GLuint,GLenum,_type_ *); \
494
+ static VALUE \
495
+ gl_##_name_(obj,arg1,arg2) \
496
+ VALUE obj,arg1,arg2; \
497
+ { \
498
+ GLuint index; \
499
+ GLenum pname; \
500
+ _type_ params[4] = {0,0,0,0}; \
501
+ GLint size; \
502
+ LOAD_GL_FUNC(gl##_name_,_extension_) \
503
+ index = (GLuint)NUM2UINT(arg1); \
504
+ pname = (GLenum)NUM2INT(arg2); \
505
+ if (pname==GL_CURRENT_VERTEX_ATTRIB_ARB) \
506
+ size = 4; \
507
+ else \
508
+ size = 1; \
509
+ fptr_gl##_name_(index,pname,params); \
510
+ RET_ARRAY_OR_SINGLE_BOOL(size,_conv_,pname,params) \
511
+ }
512
+
513
+ GETVERTEXATTRIB_FUNC(GetVertexAttribIivEXT,GLint,cond_GLBOOL2RUBY,"GL_EXT_gpu_shader4")
514
+ GETVERTEXATTRIB_FUNC(GetVertexAttribIuivEXT,GLuint,cond_GLBOOL2RUBY_U,"GL_EXT_gpu_shader4")
515
+ #undef GETVERTEXATTRIB_FUNC
516
+
517
+ extern VALUE g_VertexAttrib_ptr[];
518
+
519
+ static void (APIENTRY * fptr_glVertexAttribIPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid *);
520
+ static VALUE gl_VertexAttribIPointerEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5)
114
521
  {
115
- GLsizei n;
116
- LOAD_GL_EXT_FUNC(glDeleteFramebuffersEXT,"GL_EXT_framebuffer_object")
117
- if (TYPE(arg1)==T_ARRAY) {
118
- GLuint *framebuffers;
119
- n = RARRAY(arg1)->len;
120
- framebuffers = ALLOC_N(GLuint,n);
121
- ary2cuint(arg1,framebuffers,n);
122
- fptr_glDeleteFramebuffersEXT(n,framebuffers);
123
- xfree(framebuffers);
522
+ GLuint index;
523
+ GLuint size;
524
+ GLenum type;
525
+ GLsizei stride;
526
+
527
+ LOAD_GL_FUNC(glVertexAttribIPointerEXT,"GL_EXT_gpu_shader4")
528
+
529
+ index = (GLuint)NUM2UINT(arg1);
530
+ size = (GLuint)NUM2UINT(arg2);
531
+ type = (GLenum)NUM2INT(arg3);
532
+ stride = (GLsizei)NUM2UINT(arg4);
533
+ if (index>_MAX_VERTEX_ATTRIBS)
534
+ rb_raise(rb_eArgError, "Index too large, maximum allowed value '%i'",_MAX_VERTEX_ATTRIBS);
535
+
536
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
537
+ g_VertexAttrib_ptr[index] = arg5;
538
+ fptr_glVertexAttribIPointerEXT(index,size,type,stride,(GLvoid *)NUM2INT(arg5));
124
539
  } else {
125
- GLuint framebuffer;
126
- framebuffer = NUM2UINT(arg1);
127
- fptr_glDeleteFramebuffersEXT(1,&framebuffer);
540
+ VALUE data;
541
+ data = pack_array_or_pass_string(type,arg5);
542
+ rb_str_freeze(data);
543
+ g_VertexAttrib_ptr[index] = data;
544
+ fptr_glVertexAttribIPointerEXT(index,size,type,stride,(GLvoid *)RSTRING_PTR(data));
128
545
  }
546
+
547
+ CHECK_GLERROR
129
548
  return Qnil;
130
549
  }
131
550
 
132
- static void (APIENTRY * fptr_glGenFramebuffersEXT)(GLsizei,GLuint *);
133
- static VALUE gl_GenFramebuffersEXT(VALUE obj,VALUE arg1)
134
- {
135
- GLsizei n;
136
- GLuint *framebuffers;
137
- VALUE ret;
138
- int i;
139
- LOAD_GL_EXT_FUNC(glGenFramebuffersEXT,"GL_EXT_framebuffer_object")
140
- n = (GLsizei)NUM2UINT(arg1);
141
- framebuffers = ALLOC_N(GLuint, n);
142
- fptr_glGenFramebuffersEXT(n,framebuffers);
143
- ret = rb_ary_new2(n);
144
- for (i = 0; i < n; i++)
145
- rb_ary_push(ret, INT2NUM(framebuffers[i]));
146
- xfree(framebuffers);
147
- return ret;
148
- }
149
-
150
- static GLenum (APIENTRY * fptr_glCheckFramebufferStatusEXT)(GLenum);
151
- static VALUE gl_CheckFramebufferStatusEXT(VALUE obj,VALUE arg1)
152
- {
153
- GLenum ret;
154
- LOAD_GL_EXT_FUNC(glCheckFramebufferStatusEXT,"GL_EXT_framebuffer_object")
155
- ret = fptr_glCheckFramebufferStatusEXT(NUM2UINT(arg1));
156
- return INT2NUM(ret);
551
+ GL_FUNC_LOAD_2(Uniform1uiEXT,GLvoid, GLint,GLuint, "GL_EXT_gpu_shader4")
552
+ GL_FUNC_LOAD_3(Uniform2uiEXT,GLvoid, GLint,GLuint,GLuint, "GL_EXT_gpu_shader4")
553
+ GL_FUNC_LOAD_4(Uniform3uiEXT,GLvoid, GLint,GLuint,GLuint,GLuint, "GL_EXT_gpu_shader4")
554
+ GL_FUNC_LOAD_5(Uniform4uiEXT,GLvoid, GLint,GLuint,GLuint,GLuint,GLuint, "GL_EXT_gpu_shader4")
555
+
556
+ #define GLUNIFORM_VFUNC(_name_,_type_,_conv_,_size_) \
557
+ static void (APIENTRY * fptr_gl##_name_)(GLint,GLsizei,const _type_ *); \
558
+ static VALUE \
559
+ gl_##_name_(obj,arg1,arg2) \
560
+ VALUE obj,arg1,arg2; \
561
+ { \
562
+ GLint location; \
563
+ GLsizei count; \
564
+ _type_ *value; \
565
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_gpu_shader4") \
566
+ Check_Type(arg2,T_ARRAY); \
567
+ count = RARRAY_LEN(arg2); \
568
+ if (count<=0 || (count % _size_) != 0) \
569
+ rb_raise(rb_eArgError, "Parameter array size must be multiplication of %i",_size_); \
570
+ location = (GLint)NUM2INT(arg1); \
571
+ value = ALLOC_N(_type_,count); \
572
+ _conv_(arg2,value,count); \
573
+ fptr_gl##_name_(location,count / _size_,value); \
574
+ xfree(value); \
575
+ CHECK_GLERROR \
576
+ return Qnil; \
577
+ }
578
+
579
+ GLUNIFORM_VFUNC(Uniform1uivEXT,GLuint,ary2cuint,1)
580
+ GLUNIFORM_VFUNC(Uniform2uivEXT,GLuint,ary2cuint,2)
581
+ GLUNIFORM_VFUNC(Uniform3uivEXT,GLuint,ary2cuint,3)
582
+ GLUNIFORM_VFUNC(Uniform4uivEXT,GLuint,ary2cuint,4)
583
+ #undef GLUNIFORM_VFUNC
584
+
585
+ static void (APIENTRY * fptr_glGetActiveUniformARB)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
586
+ #define GETUNIFORM_FUNC(_name_,_type_) \
587
+ static void (APIENTRY * fptr_gl##_name_)(GLuint,GLint,_type_ *); \
588
+ static VALUE \
589
+ gl_##_name_(obj,arg1,arg2) \
590
+ VALUE obj,arg1,arg2; \
591
+ { \
592
+ GLuint program; \
593
+ GLint location; \
594
+ _type_ params[16]; \
595
+ GLint unused = 0; \
596
+ GLenum uniform_type = 0; \
597
+ GLint uniform_size = 0; \
598
+ \
599
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_gpu_shader4") \
600
+ LOAD_GL_FUNC(glGetActiveUniformARB,"GL_ARB_shader_objects") \
601
+ program = (GLuint)NUM2UINT(arg1); \
602
+ location = (GLint)NUM2INT(arg2); \
603
+ \
604
+ fptr_glGetActiveUniformARB(program,location,0,NULL,&unused,&uniform_type,NULL); \
605
+ CHECK_GLERROR \
606
+ if (uniform_type==0) \
607
+ rb_raise(rb_eTypeError, "Can't determine the uniform's type"); \
608
+ \
609
+ uniform_size = get_uniform_size(uniform_type); \
610
+ \
611
+ memset(params,0,16*sizeof(_type_)); \
612
+ fptr_gl##_name_(program,location,params); \
613
+ RET_ARRAY_OR_SINGLE(uniform_size,RETCONV_##_type_,params) \
157
614
  }
158
615
 
159
- static void (APIENTRY * fptr_glFramebufferTexture1DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
160
- static VALUE gl_FramebufferTexture1DEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5)
616
+ GETUNIFORM_FUNC(GetUniformuivEXT,GLuint)
617
+ #undef GETUNIFORM_FUNC
618
+
619
+ static void (APIENTRY * fptr_glBindFragDataLocationEXT)(GLuint,GLuint,const GLchar *);
620
+ static VALUE gl_BindFragDataLocationEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3)
161
621
  {
162
- LOAD_GL_EXT_FUNC(glFramebufferTexture1DEXT,"GL_EXT_framebuffer_object")
163
- fptr_glFramebufferTexture1DEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),NUM2UINT(arg4),NUM2INT(arg5));
622
+ LOAD_GL_FUNC(glBindFragDataLocationEXT,"GL_EXT_gpu_shader4")
623
+ Check_Type(arg3,T_STRING);
624
+ fptr_glBindFragDataLocationEXT(NUM2UINT(arg1),NUM2UINT(arg2),RSTRING_PTR(arg3));
625
+ CHECK_GLERROR
164
626
  return Qnil;
165
627
  }
166
628
 
167
- static void (APIENTRY * fptr_glFramebufferTexture2DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
168
- static VALUE gl_FramebufferTexture2DEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5)
629
+ static GLint (APIENTRY * fptr_glGetFragDataLocationEXT)(GLuint,const GLchar *);
630
+ static VALUE gl_GetFragDataLocationEXT(VALUE obj,VALUE arg1,VALUE arg2)
169
631
  {
170
- LOAD_GL_EXT_FUNC(glFramebufferTexture2DEXT,"GL_EXT_framebuffer_object")
171
- fptr_glFramebufferTexture2DEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),NUM2UINT(arg4),NUM2INT(arg5));
172
- return Qnil;
632
+ GLint ret;
633
+ LOAD_GL_FUNC(glGetFragDataLocationEXT,"GL_EXT_gpu_shader4")
634
+ Check_Type(arg2,T_STRING);
635
+ ret = fptr_glGetFragDataLocationEXT(NUM2UINT(arg1),RSTRING_PTR(arg2));
636
+ CHECK_GLERROR
637
+ return INT2NUM(ret);
173
638
  }
174
639
 
175
- static void (APIENTRY * fptr_glFramebufferTexture3DEXT)(GLenum,GLenum,GLenum,GLuint,GLint,GLint);
176
- static VALUE gl_FramebufferTexture3DEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5,VALUE arg6)
640
+ /* #327 - GL_EXT_draw_instanced */
641
+ GL_FUNC_LOAD_4(DrawArraysInstancedEXT,GLvoid, GLenum,GLint,GLsizei,GLsizei, "GL_EXT_draw_instanced")
642
+
643
+ static void (APIENTRY * fptr_glDrawElementsInstancedEXT)(GLenum,GLsizei,GLenum,const GLvoid *,GLsizei);
644
+ static VALUE gl_DrawElementsInstancedEXT(obj,arg1,arg2,arg3,arg4,arg5)
645
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
177
646
  {
178
- LOAD_GL_EXT_FUNC(glFramebufferTexture3DEXT,"GL_EXT_framebuffer_object")
179
- fptr_glFramebufferTexture3DEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),NUM2UINT(arg4),NUM2INT(arg5),NUM2INT(arg6));
647
+ GLenum mode;
648
+ GLsizei count;
649
+ GLenum type;
650
+ GLsizei primcount;
651
+ LOAD_GL_FUNC(glDrawElementsInstancedEXT,"GL_EXT_draw_instanced")
652
+ mode = (GLenum)NUM2INT(arg1);
653
+ count = (GLsizei)NUM2UINT(arg2);
654
+ type = (GLenum)NUM2INT(arg3);
655
+ primcount = (GLsizei)NUM2INT(arg5);
656
+ if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
657
+ fptr_glDrawElementsInstancedEXT(mode, count, type, (const GLvoid*)NUM2INT(arg4), primcount);
658
+ } else {
659
+ VALUE data;
660
+ data = pack_array_or_pass_string(type,arg4);
661
+ fptr_glDrawElementsInstancedEXT(mode, count, type, (const GLvoid*)RSTRING_PTR(data), primcount);
662
+ }
663
+ CHECK_GLERROR
180
664
  return Qnil;
181
665
  }
182
666
 
183
- GL_EXT_SIMPLE_FUNC_LOAD(FramebufferRenderbufferEXT,4,GLuint,NUM2UINT,"GL_EXT_framebuffer_object")
667
+ /* #330 - GL_EXT_texture_buffer_object */
668
+ GL_FUNC_LOAD_3(TexBufferEXT,GLvoid, GLenum,GLenum,GLenum, "GL_EXT_texture_buffer_object")
184
669
 
670
+ /* #343 - GL_EXT_texture_integer */
671
+ GL_FUNC_LOAD_4(ClearColorIiEXT,GLvoid, GLint,GLint,GLint,GLint, "GL_EXT_texture_integer")
672
+ GL_FUNC_LOAD_4(ClearColorIuiEXT,GLvoid, GLuint,GLuint,GLuint,GLuint, "GL_EXT_texture_integer")
185
673
 
186
- static void (APIENTRY * fptr_glGetFramebufferAttachmentParameterivEXT)(GLenum,GLenum,GLenum,GLint *);
187
- static VALUE gl_GetFramebufferAttachmentParameterivEXT(VALUE obj,VALUE arg1, VALUE arg2, VALUE arg3)
188
- {
189
- GLint ret = 0;
190
- LOAD_GL_EXT_FUNC(glGetFramebufferAttachmentParameterivEXT,"GL_EXT_framebuffer_object")
191
- fptr_glGetFramebufferAttachmentParameterivEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),&ret);
192
- return INT2NUM(ret);
674
+ #define TEXPARAMETER_VFUNC(_name_,_type_,_conv_) \
675
+ static void (APIENTRY * fptr_gl##_name_)(GLenum,GLenum,_type_ *); \
676
+ static VALUE \
677
+ gl_##_name_(obj,arg1,arg2,arg3) \
678
+ VALUE obj,arg1,arg2,arg3; \
679
+ { \
680
+ GLenum target; \
681
+ GLenum pname; \
682
+ _type_ params[4] = {0,0,0,0}; \
683
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_texture_integer") \
684
+ target = (GLenum)NUM2UINT(arg1); \
685
+ pname = (GLenum)NUM2UINT(arg2); \
686
+ Check_Type(arg3,T_ARRAY); \
687
+ _conv_(arg3,params,4); \
688
+ fptr_gl##_name_(target,pname,params); \
689
+ CHECK_GLERROR \
690
+ return Qnil; \
691
+ }
692
+
693
+ TEXPARAMETER_VFUNC(TexParameterIivEXT,GLint,ary2cint)
694
+ TEXPARAMETER_VFUNC(TexParameterIuivEXT,GLuint,ary2cuint)
695
+ #undef TEXPARAMETER_VFUNC
696
+
697
+ #define GETTEXPARAMETER_VFUNC(_name_,_type_,_conv_) \
698
+ static void (APIENTRY * fptr_gl##_name_)(GLenum,GLenum,_type_ *); \
699
+ static VALUE \
700
+ gl_##_name_(obj,arg1,arg2) \
701
+ VALUE obj,arg1,arg2; \
702
+ { \
703
+ GLenum target; \
704
+ GLenum pname; \
705
+ _type_ params[4] = {0,0,0,0}; \
706
+ int size; \
707
+ LOAD_GL_FUNC(gl##_name_,"GL_EXT_texture_integer") \
708
+ target = (GLenum)NUM2INT(arg1); \
709
+ pname = (GLenum)NUM2INT(arg2); \
710
+ switch(pname) { \
711
+ case GL_TEXTURE_BORDER_COLOR: \
712
+ case GL_TEXTURE_BORDER_VALUES_NV: \
713
+ case GL_POST_TEXTURE_FILTER_BIAS_SGIX: \
714
+ case GL_POST_TEXTURE_FILTER_SCALE_SGIX: \
715
+ size = 4; \
716
+ break; \
717
+ default: \
718
+ size = 1; \
719
+ break; \
720
+ } \
721
+ fptr_gl##_name_(target,pname,params); \
722
+ RET_ARRAY_OR_SINGLE_BOOL(size,_conv_,pname,params) \
193
723
  }
194
724
 
195
- GL_EXT_SIMPLE_FUNC_LOAD(GenerateMipmapEXT,1,GLenum,NUM2UINT,"GL_EXT_framebuffer_object")
725
+ GETTEXPARAMETER_VFUNC(GetTexParameterIivEXT,GLint,cond_GLBOOL2RUBY)
726
+ GETTEXPARAMETER_VFUNC(GetTexParameterIuivEXT,GLuint,cond_GLBOOL2RUBY_U)
727
+ #undef GETTEXPARAMETER_VFUNC
196
728
 
197
729
  void gl_init_functions_ext_ext(VALUE module)
198
730
  {
731
+ /* #2 - GL_EXT_blend_color */
732
+ rb_define_module_function(module, "glBlendColorEXT", gl_BlendColorEXT, 4);
733
+
734
+ /* #3 - GL_EXT_polygon_offset */
735
+ rb_define_module_function(module, "glPolygonOffsetEXT", gl_PolygonOffsetEXT, 2);
736
+
737
+ /* #20 - GL_EXT_texture_object */
738
+ rb_define_module_function(module, "glGenTexturesEXT", gl_GenTexturesEXT, 1);
739
+ rb_define_module_function(module, "glDeleteTexturesEXT", gl_DeleteTexturesEXT, 1);
740
+ rb_define_module_function(module, "glBindTextureEXT", gl_BindTextureEXT, 2);
741
+ rb_define_module_function(module, "glPrioritizeTexturesEXT", gl_PrioritizeTexturesEXT, 2);
742
+ rb_define_module_function(module, "glAreTexturesResidentEXT", gl_AreTexturesResidentEXT, 1);
743
+ rb_define_module_function(module, "glIsTextureEXT", gl_IsTextureEXT, 1);
744
+
745
+ /* #37 - GL_EXT_blend_minmax */
746
+ rb_define_module_function(module, "glBlendEquationEXT", gl_BlendEquationEXT, 1);
747
+
748
+ /* #54 - GL_EXT_point_parameters */
749
+ rb_define_module_function(module, "glPointParameterfEXT", gl_PointParameterfEXT, 2);
750
+ rb_define_module_function(module, "glPointParameterfvEXT", gl_PointParameterfvEXT, 2);
751
+
752
+ /* #97 - GL_EXT_compiled_vertex_array */
753
+ rb_define_module_function(module, "glLockArraysEXT", gl_LockArraysEXT, 2);
754
+ rb_define_module_function(module, "glUnlockArraysEXT", gl_UnlockArraysEXT, 0);
755
+
756
+ /* #112 - GL_EXT_draw_range_elements */
757
+ rb_define_module_function(module, "glDrawRangeElementsEXT", gl_DrawRangeElementsEXT, 6);
758
+
759
+ /* #145 - GL_EXT_secondary_color */
760
+ rb_define_module_function(module, "glSecondaryColor3bEXT", gl_SecondaryColor3bEXT, 3);
761
+ rb_define_module_function(module, "glSecondaryColor3dEXT", gl_SecondaryColor3dEXT, 3);
762
+ rb_define_module_function(module, "glSecondaryColor3fEXT", gl_SecondaryColor3fEXT, 3);
763
+ rb_define_module_function(module, "glSecondaryColor3iEXT", gl_SecondaryColor3iEXT, 3);
764
+ rb_define_module_function(module, "glSecondaryColor3sEXT", gl_SecondaryColor3sEXT, 3);
765
+ rb_define_module_function(module, "glSecondaryColor3ubEXT", gl_SecondaryColor3ubEXT, 3);
766
+ rb_define_module_function(module, "glSecondaryColor3uiEXT", gl_SecondaryColor3uiEXT, 3);
767
+ rb_define_module_function(module, "glSecondaryColor3usEXT", gl_SecondaryColor3usEXT, 3);
768
+ rb_define_module_function(module, "glSecondaryColor3bvEXT", gl_SecondaryColor3bvEXT, 1);
769
+ rb_define_module_function(module, "glSecondaryColor3dvEXT", gl_SecondaryColor3dvEXT, 1);
770
+ rb_define_module_function(module, "glSecondaryColor3fvEXT", gl_SecondaryColor3fvEXT, 1);
771
+ rb_define_module_function(module, "glSecondaryColor3ivEXT", gl_SecondaryColor3ivEXT, 1);
772
+ rb_define_module_function(module, "glSecondaryColor3svEXT", gl_SecondaryColor3svEXT, 1);
773
+ rb_define_module_function(module, "glSecondaryColor3ubvEXT", gl_SecondaryColor3ubvEXT, 1);
774
+ rb_define_module_function(module, "glSecondaryColor3uivEXT", gl_SecondaryColor3uivEXT, 1);
775
+ rb_define_module_function(module, "glSecondaryColor3usvEXT", gl_SecondaryColor3usvEXT, 1);
776
+ rb_define_module_function(module, "glSecondaryColorPointerEXT", gl_SecondaryColorPointerEXT, 4);
777
+
778
+ /* #148 - GL_EXT_multi_draw_arrays */
779
+ rb_define_module_function(module, "glMultiDrawArraysEXT", gl_MultiDrawArraysEXT, 3);
780
+ rb_define_module_function(module, "glMultiDrawElementsEXT", gl_MultiDrawElementsEXT, -1);
781
+
782
+ /* #149 - GL_EXT_fog_coord */
783
+ rb_define_module_function(module, "glFogCoordfEXT", gl_FogCoordfEXT, 1);
784
+ rb_define_module_function(module, "glFogCoorddEXT", gl_FogCoorddEXT, 1);
785
+ rb_define_module_function(module, "glFogCoordfvEXT", gl_FogCoordfvEXT, 1);
786
+ rb_define_module_function(module, "glFogCoorddvEXT", gl_FogCoorddvEXT, 1);
787
+ rb_define_module_function(module, "glFogCoordPointerEXT", gl_FogCoordPointerEXT, 3);
788
+
789
+ /* #173 - GL_EXT_blend_func_separate */
790
+ rb_define_module_function(module, "glBlendFuncSeparateEXT", gl_BlendFuncSeparateEXT, 4);
791
+
792
+ /* #268 - GL_EXT_stencil_two_side */
793
+ rb_define_module_function(module, "glActiveStencilFaceEXT", gl_ActiveStencilFaceEXT, 1);
794
+
795
+ /* #297 - GL_EXT_depth_bounds_test */
796
+ rb_define_module_function(module, "glDepthBoundsEXT", gl_DepthBoundsEXT, 2);
797
+
798
+ /* #299 - GL_EXT_blend_equation_separate */
799
+ rb_define_module_function(module, "glBlendEquationSeparateEXT", gl_BlendEquationSeparateEXT, 2);
800
+
199
801
  /* #310 - GL_EXT_framebuffer_object */
200
802
  rb_define_module_function(module, "glIsRenderbufferEXT", gl_IsRenderbufferEXT, 1);
201
803
  rb_define_module_function(module, "glBindRenderbufferEXT", gl_BindRenderbufferEXT, 2);
@@ -215,4 +817,74 @@ void gl_init_functions_ext_ext(VALUE module)
215
817
  rb_define_module_function(module, "glGetFramebufferAttachmentParameterivEXT", gl_GetFramebufferAttachmentParameterivEXT, 3);
216
818
  rb_define_module_function(module, "glGenerateMipmapEXT", gl_GenerateMipmapEXT, 1);
217
819
 
820
+ /* #314 - GL_EXT_stencil_clear_tag */
821
+ rb_define_module_function(module, "glStencilClearTagEXT", gl_StencilClearTagEXT, 2);
822
+
823
+ /* #316 - GL_EXT_framebuffer_blit */
824
+ rb_define_module_function(module, "glBlitFramebufferEXT", gl_BlitFramebufferEXT, 10);
825
+
826
+ /* #317 - GL_EXT_framebuffer_multisample */
827
+ rb_define_module_function(module, "glRenderbufferStorageMultisampleEXT", gl_RenderbufferStorageMultisampleEXT, 5);
828
+
829
+ /* #319 - GL_EXT_timer_query */
830
+ rb_define_module_function(module, "glGetQueryObjecti64vEXT", gl_GetQueryObjecti64vEXT, 2);
831
+ rb_define_module_function(module, "glGetQueryObjectui64vEXT", gl_GetQueryObjectui64vEXT, 2);
832
+
833
+ /* #320 - GL_EXT_gpu_program_parameters */
834
+ rb_define_module_function(module, "glProgramEnvParameters4fvEXT", gl_ProgramEnvParameters4fvEXT, 3);
835
+ rb_define_module_function(module, "glProgramLocalParameters4fvEXT", gl_ProgramLocalParameters4fvEXT, 3);
836
+
837
+ /* #324 - GL_EXT_geometry_shader4 */
838
+ rb_define_module_function(module, "glProgramParameteriEXT", gl_ProgramParameteriEXT, 3);
839
+
840
+ /* #326 - GL_EXT_gpu_shader4 */
841
+ rb_define_module_function(module, "glVertexAttribI1iEXT", gl_VertexAttribI1iEXT, 2);
842
+ rb_define_module_function(module, "glVertexAttribI2iEXT", gl_VertexAttribI2iEXT, 3);
843
+ rb_define_module_function(module, "glVertexAttribI3iEXT", gl_VertexAttribI3iEXT, 4);
844
+ rb_define_module_function(module, "glVertexAttribI4iEXT", gl_VertexAttribI4iEXT, 5);
845
+ rb_define_module_function(module, "glVertexAttribI1uiEXT", gl_VertexAttribI1uiEXT, 2);
846
+ rb_define_module_function(module, "glVertexAttribI2uiEXT", gl_VertexAttribI2uiEXT, 3);
847
+ rb_define_module_function(module, "glVertexAttribI3uiEXT", gl_VertexAttribI3uiEXT, 4);
848
+ rb_define_module_function(module, "glVertexAttribI4uiEXT", gl_VertexAttribI4uiEXT, 5);
849
+ rb_define_module_function(module, "glVertexAttribI1ivEXT", gl_VertexAttribI1ivEXT, 2);
850
+ rb_define_module_function(module, "glVertexAttribI2ivEXT", gl_VertexAttribI2ivEXT, 2);
851
+ rb_define_module_function(module, "glVertexAttribI3ivEXT", gl_VertexAttribI3ivEXT, 2);
852
+ rb_define_module_function(module, "glVertexAttribI4ivEXT", gl_VertexAttribI4ivEXT, 2);
853
+ rb_define_module_function(module, "glVertexAttribI1uivEXT", gl_VertexAttribI1uivEXT, 2);
854
+ rb_define_module_function(module, "glVertexAttribI2uivEXT", gl_VertexAttribI2uivEXT, 2);
855
+ rb_define_module_function(module, "glVertexAttribI3uivEXT", gl_VertexAttribI3uivEXT, 2);
856
+ rb_define_module_function(module, "glVertexAttribI4uivEXT", gl_VertexAttribI4uivEXT, 2);
857
+ rb_define_module_function(module, "glVertexAttribI4bvEXT", gl_VertexAttribI4bvEXT, 2);
858
+ rb_define_module_function(module, "glVertexAttribI4svEXT", gl_VertexAttribI4svEXT, 2);
859
+ rb_define_module_function(module, "glVertexAttribI4ubvEXT", gl_VertexAttribI4ubvEXT, 2);
860
+ rb_define_module_function(module, "glVertexAttribI4usvEXT", gl_VertexAttribI4usvEXT, 2);
861
+ rb_define_module_function(module, "glVertexAttribIPointerEXT", gl_VertexAttribIPointerEXT, 5);
862
+ rb_define_module_function(module, "glGetVertexAttribIivEXT", gl_GetVertexAttribIivEXT, 2);
863
+ rb_define_module_function(module, "glGetVertexAttribIuivEXT", gl_GetVertexAttribIuivEXT, 2);
864
+ rb_define_module_function(module, "glUniform1uiEXT", gl_Uniform1uiEXT, 2);
865
+ rb_define_module_function(module, "glUniform2uiEXT", gl_Uniform2uiEXT, 3);
866
+ rb_define_module_function(module, "glUniform3uiEXT", gl_Uniform3uiEXT, 4);
867
+ rb_define_module_function(module, "glUniform4uiEXT", gl_Uniform4uiEXT, 5);
868
+ rb_define_module_function(module, "glUniform1uivEXT", gl_Uniform1uivEXT, 2);
869
+ rb_define_module_function(module, "glUniform2uivEXT", gl_Uniform2uivEXT, 2);
870
+ rb_define_module_function(module, "glUniform3uivEXT", gl_Uniform3uivEXT, 2);
871
+ rb_define_module_function(module, "glUniform4uivEXT", gl_Uniform4uivEXT, 2);
872
+ rb_define_module_function(module, "glGetUniformuivEXT", gl_GetUniformuivEXT, 2);
873
+ rb_define_module_function(module, "glBindFragDataLocationEXT", gl_BindFragDataLocationEXT, 3);
874
+ rb_define_module_function(module, "glGetFragDataLocationEXT", gl_GetFragDataLocationEXT, 2);
875
+
876
+ /* #327 - GL_EXT_draw_instanced */
877
+ rb_define_module_function(module, "glDrawArraysInstancedEXT", gl_DrawArraysInstancedEXT, 4);
878
+ rb_define_module_function(module, "glDrawElementsInstancedEXT", gl_DrawElementsInstancedEXT, 5);
879
+
880
+ /* #330 - GL_EXT_texture_buffer_object */
881
+ rb_define_module_function(module, "glTexBufferEXT", gl_TexBufferEXT, 3);
882
+
883
+ /* #343 - GL_EXT_texture_integer */
884
+ rb_define_module_function(module, "glClearColorIiEXT", gl_ClearColorIiEXT, 4);
885
+ rb_define_module_function(module, "glClearColorIuiEXT", gl_ClearColorIuiEXT, 4);
886
+ rb_define_module_function(module, "glTexParameterIivEXT", gl_TexParameterIivEXT, 3);
887
+ rb_define_module_function(module, "glTexParameterIuivEXT", gl_TexParameterIuivEXT, 3);
888
+ rb_define_module_function(module, "glGetTexParameterIivEXT", gl_GetTexParameterIivEXT, 2);
889
+ rb_define_module_function(module, "glGetTexParameterIuivEXT", gl_GetTexParameterIuivEXT, 2);
218
890
  }