ruby-opengl 0.40.1 → 0.50.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/Rakefile +2 -2
  2. data/doc/build_install.txt +48 -28
  3. data/doc/extensions.txt +361 -0
  4. data/doc/history.txt +8 -2
  5. data/doc/requirements_and_design.txt +0 -13
  6. data/doc/roadmap.txt +11 -13
  7. data/doc/supplies/page_template.html +11 -5
  8. data/doc/thanks.txt +2 -4
  9. data/doc/tutorial.txt +1 -4
  10. data/examples/{nehe_lesson02.rb → NeHe/nehe_lesson02.rb} +0 -0
  11. data/examples/{nehe_lesson03.rb → NeHe/nehe_lesson03.rb} +0 -0
  12. data/examples/{nehe_lesson04.rb → NeHe/nehe_lesson04.rb} +0 -0
  13. data/examples/{nehe_lesson05.rb → NeHe/nehe_lesson05.rb} +0 -0
  14. data/examples/NeHe/nehe_lesson36.rb +303 -0
  15. data/examples/OrangeBook/3Dlabs-License.txt +33 -0
  16. data/examples/OrangeBook/brick.frag +36 -0
  17. data/examples/OrangeBook/brick.rb +388 -0
  18. data/examples/OrangeBook/brick.vert +41 -0
  19. data/examples/OrangeBook/particle.frag +17 -0
  20. data/examples/OrangeBook/particle.rb +424 -0
  21. data/examples/OrangeBook/particle.vert +38 -0
  22. data/examples/README +13 -83
  23. data/examples/RedBook/aaindex.rb +97 -0
  24. data/examples/RedBook/aapoly.rb +142 -0
  25. data/examples/RedBook/aargb.rb +119 -0
  26. data/examples/RedBook/accanti.rb +162 -0
  27. data/examples/RedBook/accpersp.rb +215 -0
  28. data/examples/RedBook/alpha.rb +123 -0
  29. data/examples/RedBook/alpha3D.rb +158 -0
  30. data/examples/RedBook/bezcurve.rb +105 -0
  31. data/examples/RedBook/bezmesh.rb +137 -0
  32. data/examples/RedBook/checker.rb +124 -0
  33. data/examples/RedBook/clip.rb +95 -0
  34. data/examples/RedBook/colormat.rb +135 -0
  35. data/examples/RedBook/cube.rb +69 -0
  36. data/examples/RedBook/depthcue.rb +99 -0
  37. data/examples/RedBook/dof.rb +205 -0
  38. data/examples/{legacy → RedBook}/double.rb +59 -58
  39. data/examples/{legacy → RedBook}/drawf.rb +47 -54
  40. data/examples/RedBook/feedback.rb +145 -0
  41. data/examples/RedBook/fog.rb +167 -0
  42. data/examples/RedBook/font.rb +151 -0
  43. data/examples/RedBook/hello.rb +79 -0
  44. data/examples/RedBook/image.rb +137 -0
  45. data/examples/{legacy → RedBook}/jitter.rb +60 -62
  46. data/examples/RedBook/lines.rb +128 -0
  47. data/examples/RedBook/list.rb +111 -0
  48. data/examples/RedBook/material.rb +275 -0
  49. data/examples/RedBook/mipmap.rb +156 -0
  50. data/examples/{legacy → RedBook}/model.rb +66 -72
  51. data/examples/{legacy → RedBook}/movelight.rb +67 -75
  52. data/examples/RedBook/pickdepth.rb +179 -0
  53. data/examples/{legacy → RedBook}/planet.rb +62 -66
  54. data/examples/RedBook/quadric.rb +158 -0
  55. data/examples/RedBook/robot.rb +115 -0
  56. data/examples/RedBook/select.rb +196 -0
  57. data/examples/RedBook/smooth.rb +95 -0
  58. data/examples/RedBook/stencil.rb +163 -0
  59. data/examples/RedBook/stroke.rb +167 -0
  60. data/examples/RedBook/surface.rb +166 -0
  61. data/examples/RedBook/teaambient.rb +132 -0
  62. data/examples/RedBook/teapots.rb +182 -0
  63. data/examples/RedBook/tess.rb +183 -0
  64. data/examples/RedBook/texbind.rb +147 -0
  65. data/examples/RedBook/texgen.rb +169 -0
  66. data/examples/RedBook/texturesurf.rb +128 -0
  67. data/examples/RedBook/varray.rb +159 -0
  68. data/examples/RedBook/wrap.rb +148 -0
  69. data/examples/misc/anisotropic.rb +194 -0
  70. data/examples/misc/font-glut.rb +46 -0
  71. data/examples/{plane.rb → misc/plane.rb} +0 -0
  72. data/examples/misc/readpixel.rb +65 -0
  73. data/examples/{smooth.rb → misc/smooth.rb} +0 -0
  74. data/examples/{test.rb → misc/test.rb} +0 -0
  75. data/ext/common/common.h +252 -70
  76. data/ext/common/gl-enums.h +6102 -7334
  77. data/ext/common/gl-types.h +47 -0
  78. data/ext/common/glu-enums.h +469 -0
  79. data/ext/gl/gl-1.0-1.1.c +842 -2464
  80. data/ext/gl/gl-1.2.c +217 -281
  81. data/ext/gl/gl-1.3.c +113 -133
  82. data/ext/gl/gl-1.4.c +98 -334
  83. data/ext/gl/gl-1.5.c +28 -34
  84. data/ext/gl/gl-2.0.c +26 -235
  85. data/ext/gl/gl-2.1.c +31 -124
  86. data/ext/gl/gl-enums.c +786 -631
  87. data/ext/gl/gl-ext-arb.c +66 -0
  88. data/ext/gl/gl-ext-ext.c +218 -0
  89. data/ext/gl/gl.c +138 -31
  90. data/ext/gl/mkrf_conf.rb +1 -0
  91. data/ext/glu/glu-enums.c +163 -0
  92. data/ext/glu/glu.c +1003 -1205
  93. data/ext/glu/mkrf_conf.rb +1 -0
  94. data/ext/glut/glut.c +1056 -1175
  95. data/lib/opengl.rb +90 -3
  96. data/test/tc_common.rb +26 -13
  97. data/test/tc_ext_arb.rb +73 -0
  98. data/test/tc_ext_ext.rb +74 -0
  99. data/test/tc_func_12.rb +8 -8
  100. data/test/tc_func_13.rb +17 -11
  101. data/test/tc_func_14.rb +8 -8
  102. data/test/tc_func_15.rb +190 -2
  103. data/test/tc_func_20.rb +36 -10
  104. data/test/tc_func_21.rb +445 -2
  105. data/test/tc_glu.rb +305 -0
  106. data/test/tc_misc.rb +1 -0
  107. metadata +84 -68
  108. data/doc/screenshots.txt +0 -23
  109. data/examples/legacy/COPYRIGHT +0 -8
  110. data/examples/legacy/aaindex.rb +0 -98
  111. data/examples/legacy/aapoly.rb +0 -153
  112. data/examples/legacy/aargb.rb +0 -139
  113. data/examples/legacy/accanti.rb +0 -159
  114. data/examples/legacy/accpersp.rb +0 -216
  115. data/examples/legacy/alpha.rb +0 -133
  116. data/examples/legacy/alpha3D.rb +0 -165
  117. data/examples/legacy/bezcurve.rb +0 -107
  118. data/examples/legacy/bezmesh.rb +0 -131
  119. data/examples/legacy/checker.rb +0 -121
  120. data/examples/legacy/clip.rb +0 -104
  121. data/examples/legacy/colormat.rb +0 -145
  122. data/examples/legacy/cube.rb +0 -73
  123. data/examples/legacy/depthcue.rb +0 -101
  124. data/examples/legacy/dof.rb +0 -212
  125. data/examples/legacy/feedback.rb +0 -152
  126. data/examples/legacy/fog.rb +0 -172
  127. data/examples/legacy/font-glut.rb +0 -41
  128. data/examples/legacy/font.rb +0 -158
  129. data/examples/legacy/hello.rb +0 -75
  130. data/examples/legacy/image.rb +0 -145
  131. data/examples/legacy/lines.rb +0 -135
  132. data/examples/legacy/list.rb +0 -120
  133. data/examples/legacy/material.rb +0 -290
  134. data/examples/legacy/mipmap.rb +0 -159
  135. data/examples/legacy/pickdepth.rb +0 -180
  136. data/examples/legacy/quadric.rb +0 -180
  137. data/examples/legacy/readpixel.rb +0 -59
  138. data/examples/legacy/robot.rb +0 -120
  139. data/examples/legacy/select.rb +0 -207
  140. data/examples/legacy/smooth.rb +0 -41
  141. data/examples/legacy/stencil.rb +0 -154
  142. data/examples/legacy/stroke.rb +0 -170
  143. data/examples/legacy/surface.rb +0 -170
  144. data/examples/legacy/teaambient.rb +0 -132
  145. data/examples/legacy/teapots.rb +0 -188
  146. data/examples/legacy/tess.rb +0 -222
  147. data/examples/legacy/texbind.rb +0 -157
  148. data/examples/legacy/texgen.rb +0 -171
  149. data/examples/legacy/texturesurf.rb +0 -128
  150. data/examples/legacy/varray.rb +0 -167
  151. data/examples/legacy/wrap.rb +0 -158
  152. data/lib/gl_prev.rb +0 -46
  153. data/lib/glu_prev.rb +0 -46
  154. data/lib/glut_prev.rb +0 -45
data/ext/gl/gl-1.5.c CHANGED
@@ -13,18 +13,12 @@
13
13
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  */
15
15
 
16
- #ifdef __APPLE__
17
- #include <OpenGL/gl.h>
18
- #elif defined WIN32
19
- #include <windows.h>
20
- #include <GL/gl.h>
21
- #else
22
- #include <GL/gl.h>
23
- #endif
24
16
  #include "../common/common.h"
25
17
 
26
18
  /* OpenGL 1.5 functions */
27
19
 
20
+ GL_SIMPLE_FUNC_LOAD(EndQuery,1,GLenum,NUM2INT)
21
+
28
22
  static void (APIENTRY * fptr_glGenQueries)(GLsizei,GLuint *);
29
23
  static VALUE
30
24
  gl_GenQueries(obj,arg1)
@@ -53,12 +47,17 @@ VALUE obj,arg1;
53
47
  GLsizei n;
54
48
  GLuint *queries;
55
49
  LOAD_GL_FUNC(glDeleteQueries)
56
- Check_Type(arg1,T_ARRAY);
57
- n = RARRAY(arg1)->len;
58
- queries = ALLOC_N(GLuint,n);
59
- ary2cuint(arg1,queries,n);
60
- fptr_glDeleteQueries( n, queries);
61
- xfree(queries);
50
+ if (TYPE(arg1)==T_ARRAY) {
51
+ n = RARRAY(arg1)->len;
52
+ queries = ALLOC_N(GLuint,n);
53
+ ary2cuint(arg1,queries,n);
54
+ fptr_glDeleteQueries( n, queries);
55
+ xfree(queries);
56
+ } else {
57
+ GLuint query;
58
+ query = NUM2INT(arg1);
59
+ fptr_glDeleteQueries( 1, &query);
60
+ }
62
61
  return Qnil;
63
62
  }
64
63
 
@@ -89,18 +88,6 @@ VALUE obj,arg1,arg2;
89
88
  return Qnil;
90
89
  }
91
90
 
92
- static void (APIENTRY * fptr_glEndQuery)(GLenum);
93
- static VALUE
94
- gl_EndQuery(obj,arg1)
95
- VALUE obj,arg1;
96
- {
97
- GLenum target;
98
- LOAD_GL_FUNC(glEndQuery)
99
- target = (GLenum)NUM2INT(arg1);
100
- fptr_glEndQuery(target);
101
- return Qnil;
102
- }
103
-
104
91
  static void (APIENTRY * fptr_glGetQueryiv)(GLenum,GLenum,GLint *);
105
92
  static VALUE
106
93
  gl_GetQueryiv(obj,arg1,arg2)
@@ -177,12 +164,17 @@ VALUE obj,arg1;
177
164
  GLsizei n;
178
165
  GLuint *buffers;
179
166
  LOAD_GL_FUNC(glDeleteBuffers)
180
- Check_Type(arg1,T_ARRAY);
181
- n = RARRAY(arg1)->len;
182
- buffers = ALLOC_N(GLuint,n);
183
- ary2cuint(arg1,buffers,n);
184
- fptr_glDeleteBuffers(n, buffers);
185
- xfree(buffers);
167
+ if (TYPE(arg1)==T_ARRAY) {
168
+ n = RARRAY(arg1)->len;
169
+ buffers = ALLOC_N(GLuint,n);
170
+ ary2cuint(arg1,buffers,n);
171
+ fptr_glDeleteBuffers(n, buffers);
172
+ xfree(buffers);
173
+ } else {
174
+ GLuint buffer;
175
+ buffer = NUM2INT(arg1);
176
+ fptr_glDeleteBuffers(1, &buffer);
177
+ }
186
178
  return Qnil;
187
179
  }
188
180
 
@@ -303,13 +295,15 @@ VALUE obj,arg1,arg2;
303
295
  GLenum access;
304
296
  GLint size = 0;
305
297
  VALUE data;
306
- GLvoid *buffer_ptr;
298
+ GLvoid *buffer_ptr = NULL;
307
299
  LOAD_GL_FUNC(glMapBuffer)
308
300
  LOAD_GL_FUNC(glGetBufferParameteriv)
309
301
  target = (GLenum)NUM2INT(arg1);
310
302
  access = (GLenum)NUM2INT(arg2);
311
303
  fptr_glGetBufferParameteriv(target,GL_BUFFER_SIZE,&size);
312
304
  buffer_ptr = fptr_glMapBuffer(target,access);
305
+ if (buffer_ptr==NULL || size<=0)
306
+ return Qnil;
313
307
  data = allocate_buffer_with_string(size);
314
308
  memcpy(RSTRING(data)->ptr, buffer_ptr, size);
315
309
  return data;
@@ -334,7 +328,7 @@ gl_GetBufferPointerv(obj,arg1,arg2,arg3)
334
328
  VALUE obj,arg1,arg2,arg3;
335
329
  {
336
330
  LOAD_GL_FUNC(glGetBufferPointerv)
337
- /* not implemented */
331
+ rb_raise(rb_eArgError, "glGetBufferPointerv not implemented");
338
332
  return Qnil;
339
333
  }
340
334
 
data/ext/gl/gl-2.0.c CHANGED
@@ -13,29 +13,24 @@
13
13
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  */
15
15
 
16
- #ifdef __APPLE__
17
- #include <OpenGL/gl.h>
18
- #elif defined WIN32
19
- #include <windows.h>
20
- #include <GL/gl.h>
21
- #else
22
- #include <GL/gl.h>
23
- #endif
24
16
  #include "../common/common.h"
25
17
 
26
- static void (APIENTRY * fptr_glBlendEquationSeparate)(GLenum,GLenum);
27
- static VALUE
28
- gl_BlendEquationSeparate(obj,arg1,arg2)
29
- VALUE obj,arg1,arg2;
30
- {
31
- GLenum modeRGB;
32
- GLenum modeAlpha;
33
- LOAD_GL_FUNC(glBlendEquationSeparate)
34
- modeRGB = (GLenum)NUM2INT(arg1);
35
- modeAlpha = (GLenum)NUM2INT(arg2);
36
- fptr_glBlendEquationSeparate(modeRGB,modeAlpha);
37
- return Qnil;
38
- }
18
+ GL_SIMPLE_FUNC_LOAD(BlendEquationSeparate,2,GLenum,NUM2INT)
19
+ GL_SIMPLE_FUNC_LOAD(StencilOpSeparate,4,GLenum,NUM2INT)
20
+ GL_SIMPLE_FUNC_LOAD(AttachShader,2,GLuint,NUM2UINT)
21
+ GL_SIMPLE_FUNC_LOAD(CompileShader,1,GLuint,NUM2UINT)
22
+ GL_SIMPLE_FUNC_LOAD(DeleteProgram,1,GLuint,NUM2UINT)
23
+ GL_SIMPLE_FUNC_LOAD(DeleteShader,1,GLuint,NUM2UINT)
24
+ GL_SIMPLE_FUNC_LOAD(DetachShader,2,GLuint,NUM2UINT)
25
+ GL_SIMPLE_FUNC_LOAD(DisableVertexAttribArray,1,GLuint,NUM2UINT)
26
+ GL_SIMPLE_FUNC_LOAD(EnableVertexAttribArray,1,GLuint,NUM2UINT)
27
+ GL_SIMPLE_FUNC_LOAD(LinkProgram,1,GLuint,NUM2UINT)
28
+ GL_SIMPLE_FUNC_LOAD(UseProgram,1,GLuint,NUM2UINT)
29
+ GL_SIMPLE_FUNC_LOAD(ValidateProgram,1,GLuint,NUM2UINT)
30
+ GL_SIMPLE_FUNC_LOAD(Uniform1i,2,GLint,NUM2INT)
31
+ GL_SIMPLE_FUNC_LOAD(Uniform2i,3,GLint,NUM2INT)
32
+ GL_SIMPLE_FUNC_LOAD(Uniform3i,4,GLint,NUM2INT)
33
+ GL_SIMPLE_FUNC_LOAD(Uniform4i,5,GLint,NUM2INT)
39
34
 
40
35
  static void (APIENTRY * fptr_glDrawBuffers)(GLsizei,GLenum *);
41
36
  static VALUE
@@ -54,24 +49,6 @@ VALUE obj,arg1;
54
49
  return Qnil;
55
50
  }
56
51
 
57
- static void (APIENTRY * fptr_glStencilOpSeparate)(GLenum,GLenum,GLenum,GLenum);
58
- static VALUE
59
- gl_StencilOpSeparate(obj,arg1,arg2,arg3,arg4)
60
- VALUE obj,arg1,arg2,arg3,arg4;
61
- {
62
- GLenum face;
63
- GLenum sfail;
64
- GLenum dpfail;
65
- GLenum dppass;
66
- LOAD_GL_FUNC(glStencilOpSeparate)
67
- face = (GLenum)NUM2INT(arg1);
68
- sfail = (GLenum)NUM2INT(arg2);
69
- dpfail = (GLenum)NUM2INT(arg3);
70
- dppass = (GLenum)NUM2INT(arg4);
71
- fptr_glStencilOpSeparate(face,sfail,dpfail,dppass);
72
- return Qnil;
73
- }
74
-
75
52
  static void (APIENTRY * fptr_glStencilFuncSeparate)(GLenum,GLenum,GLint,GLuint);
76
53
  static VALUE
77
54
  gl_StencilFuncSeparate(obj,arg1,arg2,arg3,arg4)
@@ -104,20 +81,6 @@ VALUE obj,arg1,arg2;
104
81
  return Qnil;
105
82
  }
106
83
 
107
- static void (APIENTRY * fptr_glAttachShader)(GLuint,GLuint);
108
- static VALUE
109
- gl_AttachShader(obj,arg1,arg2)
110
- VALUE obj,arg1,arg2;
111
- {
112
- GLuint program;
113
- GLuint shader;
114
- LOAD_GL_FUNC(glAttachShader)
115
- program = (GLuint)NUM2UINT(arg1);
116
- shader = (GLuint)NUM2UINT(arg2);
117
- fptr_glAttachShader(program,shader);
118
- return Qnil;
119
- }
120
-
121
84
  static void (APIENTRY * fptr_glBindAttribLocation)(GLuint,GLuint,GLchar *);
122
85
  static VALUE
123
86
  gl_BindAttribLocation(obj,arg1,arg2,arg3)
@@ -133,18 +96,6 @@ VALUE obj,arg1,arg2,arg3;
133
96
  return Qnil;
134
97
  }
135
98
 
136
- static void (APIENTRY * fptr_glCompileShader)(GLuint);
137
- static VALUE
138
- gl_CompileShader(obj,arg1)
139
- VALUE obj,arg1;
140
- {
141
- GLuint shader;
142
- LOAD_GL_FUNC(glCompileShader)
143
- shader = (GLuint)NUM2UINT(arg1);
144
- fptr_glCompileShader(shader);
145
- return Qnil;
146
- }
147
-
148
99
  static GLuint (APIENTRY * fptr_glCreateProgram)(void);
149
100
  static VALUE
150
101
  gl_CreateProgram(obj)
@@ -169,68 +120,6 @@ VALUE obj,arg1;
169
120
  return INT2NUM(ret);
170
121
  }
171
122
 
172
- static void (APIENTRY * fptr_glDeleteProgram)(GLuint);
173
- static VALUE
174
- gl_DeleteProgram(obj,arg1)
175
- VALUE obj,arg1;
176
- {
177
- GLuint program;
178
- LOAD_GL_FUNC(glDeleteProgram)
179
- program = (GLuint)NUM2UINT(arg1);
180
- fptr_glDeleteProgram(program);
181
- return Qnil;
182
- }
183
-
184
- static void (APIENTRY * fptr_glDeleteShader)(GLuint);
185
- static VALUE
186
- gl_DeleteShader(obj,arg1)
187
- VALUE obj,arg1;
188
- {
189
- GLuint shader;
190
- LOAD_GL_FUNC(glDeleteShader)
191
- shader = (GLuint)NUM2UINT(arg1);
192
- fptr_glDeleteShader(shader);
193
- return Qnil;
194
- }
195
-
196
- static void (APIENTRY * fptr_glDetachShader)(GLuint,GLuint);
197
- static VALUE
198
- gl_DetachShader(obj,arg1,arg2)
199
- VALUE obj,arg1,arg2;
200
- {
201
- GLuint program;
202
- GLuint shader;
203
- LOAD_GL_FUNC(glDetachShader)
204
- program=(GLuint)NUM2UINT(arg1);
205
- shader=(GLuint)NUM2UINT(arg2);
206
- fptr_glDetachShader(program,shader);
207
- return Qnil;
208
- }
209
-
210
- static void (APIENTRY * fptr_glDisableVertexAttribArray)(GLuint);
211
- static VALUE
212
- gl_DisableVertexAttribArray(obj,arg1)
213
- VALUE obj,arg1;
214
- {
215
- GLuint index;
216
- LOAD_GL_FUNC(glDisableVertexAttribArray)
217
- index=(GLuint)NUM2UINT(arg1);
218
- fptr_glDisableVertexAttribArray(index);
219
- return Qnil;
220
- }
221
-
222
- static void (APIENTRY * fptr_glEnableVertexAttribArray)(GLuint);
223
- static VALUE
224
- gl_EnableVertexAttribArray(obj,arg1)
225
- VALUE obj,arg1;
226
- {
227
- GLuint index;
228
- LOAD_GL_FUNC(glEnableVertexAttribArray)
229
- index=(GLuint)NUM2UINT(arg1);
230
- fptr_glEnableVertexAttribArray(index);
231
- return Qnil;
232
- }
233
-
234
123
  static void (APIENTRY * fptr_glGetProgramiv)(GLuint,GLenum,GLint *);
235
124
  static VALUE
236
125
  gl_GetProgramiv(obj,arg1,arg2)
@@ -673,18 +562,6 @@ VALUE obj,arg1;
673
562
  return INT2NUM(ret);
674
563
  }
675
564
 
676
- static void (APIENTRY * fptr_glLinkProgram)(GLuint);
677
- static VALUE
678
- gl_LinkProgram(obj,arg1)
679
- VALUE obj,arg1;
680
- {
681
- GLuint program;
682
- LOAD_GL_FUNC(glLinkProgram)
683
- program = (GLuint)NUM2UINT(arg1);
684
- fptr_glLinkProgram(program);
685
- return Qnil;
686
- }
687
-
688
565
  static void (APIENTRY * fptr_glShaderSource)(GLuint,GLsizei,GLchar**,GLint *);
689
566
  static VALUE
690
567
  gl_ShaderSource(obj,arg1,arg2)
@@ -702,18 +579,6 @@ VALUE obj,arg1,arg2;
702
579
  return Qnil;
703
580
  }
704
581
 
705
- static void (APIENTRY * fptr_glUseProgram)(GLuint);
706
- static VALUE
707
- gl_UseProgram(obj,arg1)
708
- VALUE obj,arg1;
709
- {
710
- GLuint program;
711
- LOAD_GL_FUNC(glUseProgram)
712
- program = (GLuint)NUM2UINT(arg1);
713
- fptr_glUseProgram(program);
714
- return Qnil;
715
- }
716
-
717
582
  static void (APIENTRY * fptr_glUniform1f)(GLint,GLfloat);
718
583
  static VALUE
719
584
  gl_Uniform1f(obj,arg1,arg2)
@@ -782,74 +647,6 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
782
647
  return Qnil;
783
648
  }
784
649
 
785
- static void (APIENTRY * fptr_glUniform1i)(GLint,GLint);
786
- static VALUE
787
- gl_Uniform1i(obj,arg1,arg2)
788
- VALUE obj,arg1,arg2;
789
- {
790
- GLint location;
791
- GLint v0;
792
- LOAD_GL_FUNC(glUniform1i)
793
- location = (GLint)NUM2INT(arg1);
794
- v0 = (GLint)NUM2INT(arg2);
795
- fptr_glUniform1i(location,v0);
796
- return Qnil;
797
- }
798
-
799
- static void (APIENTRY * fptr_glUniform2i)(GLint,GLint,GLint);
800
- static VALUE
801
- gl_Uniform2i(obj,arg1,arg2,arg3)
802
- VALUE obj,arg1,arg2,arg3;
803
- {
804
- GLint location;
805
- GLint v0;
806
- GLint v1;
807
- LOAD_GL_FUNC(glUniform2i)
808
- location = (GLint)NUM2INT(arg1);
809
- v0 = (GLint)NUM2INT(arg2);
810
- v1 = (GLint)NUM2INT(arg3);
811
- fptr_glUniform2i(location,v0,v1);
812
- return Qnil;
813
- }
814
-
815
- static void (APIENTRY * fptr_glUniform3i)(GLint,GLint,GLint,GLint);
816
- static VALUE
817
- gl_Uniform3i(obj,arg1,arg2,arg3,arg4)
818
- VALUE obj,arg1,arg2,arg3,arg4;
819
- {
820
- GLint location;
821
- GLint v0;
822
- GLint v1;
823
- GLint v2;
824
- LOAD_GL_FUNC(glUniform3i)
825
- location = (GLint)NUM2INT(arg1);
826
- v0 = (GLint)NUM2INT(arg2);
827
- v1 = (GLint)NUM2INT(arg3);
828
- v2 = (GLint)NUM2INT(arg4);
829
- fptr_glUniform3i(location,v0,v1,v2);
830
- return Qnil;
831
- }
832
-
833
- static void (APIENTRY * fptr_glUniform4i)(GLint,GLint,GLint,GLint,GLint);
834
- static VALUE
835
- gl_Uniform4i(obj,arg1,arg2,arg3,arg4,arg5)
836
- VALUE obj,arg1,arg2,arg3,arg4,arg5;
837
- {
838
- GLint location;
839
- GLint v0;
840
- GLint v1;
841
- GLint v2;
842
- GLint v3;
843
- LOAD_GL_FUNC(glUniform4i)
844
- location = (GLint)NUM2INT(arg1);
845
- v0 = (GLint)NUM2INT(arg2);
846
- v1 = (GLint)NUM2INT(arg3);
847
- v2 = (GLint)NUM2INT(arg4);
848
- v3 = (GLint)NUM2INT(arg5);
849
- fptr_glUniform4i(location,v0,v1,v2,v3);
850
- return Qnil;
851
- }
852
-
853
650
  static void (APIENTRY * fptr_glUniform1fv)(GLint,GLsizei,GLfloat *);
854
651
  static VALUE
855
652
  gl_Uniform1fv(obj,arg1,arg2,arg3)
@@ -1054,18 +851,6 @@ VALUE obj,arg1,arg2,arg3,arg4;
1054
851
  return Qnil;
1055
852
  }
1056
853
 
1057
- static void (APIENTRY * fptr_glValidateProgram)(GLuint);
1058
- static VALUE
1059
- gl_ValidateProgram(obj,arg1)
1060
- VALUE obj,arg1;
1061
- {
1062
- GLuint program;
1063
- LOAD_GL_FUNC(glValidateProgram)
1064
- program = (GLuint)NUM2UINT(arg1);
1065
- fptr_glValidateProgram(program);
1066
- return Qnil;
1067
- }
1068
-
1069
854
  static void (APIENTRY * fptr_glVertexAttrib1d)(GLuint,GLdouble);
1070
855
  static VALUE
1071
856
  gl_VertexAttrib1d(obj,arg1,arg2)
@@ -1519,10 +1304,16 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
1519
1304
  stride = (GLsizei)NUM2UINT(arg5);
1520
1305
  if (index>_MAX_VERTEX_ATTRIBS)
1521
1306
  rb_raise(rb_eArgError, "Index too large, maximum allowed value '%i'",_MAX_VERTEX_ATTRIBS);
1522
- Check_Type(arg6, T_STRING);
1523
- rb_str_freeze(arg6);
1524
- g_VertexAttrib_ptr[index] = arg6;
1525
- fptr_glVertexAttribPointer(index,size,type,normalized,stride,(GLvoid *)RSTRING(arg6)->ptr);
1307
+
1308
+ if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) {
1309
+ g_VertexAttrib_ptr[index] = arg6;
1310
+ fptr_glVertexAttribPointer(index,size,type,normalized,stride,(GLvoid *)NUM2INT(arg6));
1311
+ } else {
1312
+ Check_Type(arg6, T_STRING);
1313
+ rb_str_freeze(arg6);
1314
+ g_VertexAttrib_ptr[index] = arg6;
1315
+ fptr_glVertexAttribPointer(index,size,type,normalized,stride,(GLvoid *)RSTRING(arg6)->ptr);
1316
+ }
1526
1317
  return Qnil;
1527
1318
  }
1528
1319
 
data/ext/gl/gl-2.1.c CHANGED
@@ -13,135 +13,42 @@
13
13
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  */
15
15
 
16
- #ifdef __APPLE__
17
- #include <OpenGL/gl.h>
18
- #elif defined WIN32
19
- #include <windows.h>
20
- #include <GL/gl.h>
21
- #else
22
- #include <GL/gl.h>
23
- #endif
24
16
  #include "../common/common.h"
25
17
 
26
- static void (APIENTRY * fptr_glUniformMatrix2x3fv)(GLint,GLsizei,GLboolean,GLfloat *);
27
- static VALUE
28
- gl_UniformMatrix2x3fv(obj,arg1,arg2,arg3,arg4)
29
- VALUE obj,arg1,arg2,arg3,arg4;
30
- {
31
- GLint location;
32
- GLsizei count;
33
- GLboolean transpose;
34
- GLfloat *value;
35
- LOAD_GL_FUNC(glUniformMatrix2x3fv)
36
- location = (GLint)NUM2INT(arg1);
37
- count = (GLint)NUM2INT(arg2);
38
- transpose = (GLboolean)NUM2INT(arg3);
39
- value = ALLOC_N(GLfloat, 2*3*count);
40
- ary2cflt(arg4,value,2*3*count);
41
- fptr_glUniformMatrix2x3fv(location,count,transpose,value);
42
- xfree(value);
43
- return Qnil;
44
- }
45
-
46
- static void (APIENTRY * fptr_glUniformMatrix3x2fv)(GLint,GLsizei,GLboolean,GLfloat *);
47
- static VALUE
48
- gl_UniformMatrix3x2fv(obj,arg1,arg2,arg3,arg4)
49
- VALUE obj,arg1,arg2,arg3,arg4;
50
- {
51
- GLint location;
52
- GLsizei count;
53
- GLboolean transpose;
54
- GLfloat *value;
55
- LOAD_GL_FUNC(glUniformMatrix3x2fv)
56
- location = (GLint)NUM2INT(arg1);
57
- count = (GLint)NUM2INT(arg2);
58
- transpose = (GLboolean)NUM2INT(arg3);
59
- value = ALLOC_N(GLfloat, 3*2*count);
60
- ary2cflt(arg4,value,3*2*count);
61
- fptr_glUniformMatrix3x2fv(location,count,transpose,value);
62
- xfree(value);
63
- return Qnil;
64
- }
65
-
66
- static void (APIENTRY * fptr_glUniformMatrix2x4fv)(GLint,GLsizei,GLboolean,GLfloat *);
67
- static VALUE
68
- gl_UniformMatrix2x4fv(obj,arg1,arg2,arg3,arg4)
69
- VALUE obj,arg1,arg2,arg3,arg4;
70
- {
71
- GLint location;
72
- GLsizei count;
73
- GLboolean transpose;
74
- GLfloat *value;
75
- LOAD_GL_FUNC(glUniformMatrix2x4fv)
76
- location = (GLint)NUM2INT(arg1);
77
- count = (GLint)NUM2INT(arg2);
78
- transpose = (GLboolean)NUM2INT(arg3);
79
- value = ALLOC_N(GLfloat, 2*4*count);
80
- ary2cflt(arg4,value,2*4*count);
81
- fptr_glUniformMatrix2x4fv(location,count,transpose,value);
82
- xfree(value);
83
- return Qnil;
18
+ #define UNIFORMMATRIX_FUNC(_x_,_y_) \
19
+ static void (APIENTRY * fptr_glUniformMatrix##_x_##x##_y_##fv)(GLint,GLsizei,GLboolean,GLfloat *); \
20
+ static VALUE \
21
+ gl_UniformMatrix##_x_##x##_y_##fv(obj,arg1,arg2,arg3,arg4) \
22
+ VALUE obj,arg1,arg2,arg3,arg4; \
23
+ { \
24
+ GLint location; \
25
+ GLsizei count; \
26
+ GLboolean transpose; \
27
+ GLfloat *value; \
28
+ VALUE ary; \
29
+ LOAD_GL_FUNC(glUniformMatrix##_x_##x##_y_##fv) \
30
+ location = (GLint)NUM2INT(arg1); \
31
+ count = (GLint)NUM2INT(arg2); \
32
+ transpose = (GLboolean)NUM2INT(arg3); \
33
+ ary = rb_ary_new(); \
34
+ mary2ary(arg4, ary); \
35
+ if (RARRAY(ary)->len!=(_x_*_y_*count)) \
36
+ rb_raise(rb_eArgError, "Incorrect array length %i",RARRAY(ary)->len); \
37
+ value = ALLOC_N(GLfloat, _x_*_y_*count); \
38
+ ary2cflt(arg4,value,_x_*_y_*count); \
39
+ fptr_glUniformMatrix##_x_##x##_y_##fv(location,count,transpose,value); \
40
+ xfree(value); \
41
+ return Qnil; \
84
42
  }
85
43
 
86
- static void (APIENTRY * fptr_glUniformMatrix4x2fv)(GLint,GLsizei,GLboolean,GLfloat *);
87
- static VALUE
88
- gl_UniformMatrix4x2fv(obj,arg1,arg2,arg3,arg4)
89
- VALUE obj,arg1,arg2,arg3,arg4;
90
- {
91
- GLint location;
92
- GLsizei count;
93
- GLboolean transpose;
94
- GLfloat *value;
95
- LOAD_GL_FUNC(glUniformMatrix4x2fv)
96
- location = (GLint)NUM2INT(arg1);
97
- count = (GLint)NUM2INT(arg2);
98
- transpose = (GLboolean)NUM2INT(arg3);
99
- value = ALLOC_N(GLfloat, 4*2*count);
100
- ary2cflt(arg4,value,4*2*count);
101
- fptr_glUniformMatrix4x2fv(location,count,transpose,value);
102
- xfree(value);
103
- return Qnil;
104
- }
44
+ UNIFORMMATRIX_FUNC(2,3)
45
+ UNIFORMMATRIX_FUNC(3,2)
46
+ UNIFORMMATRIX_FUNC(2,4)
47
+ UNIFORMMATRIX_FUNC(4,2)
48
+ UNIFORMMATRIX_FUNC(3,4)
49
+ UNIFORMMATRIX_FUNC(4,3)
105
50
 
106
- static void (APIENTRY * fptr_glUniformMatrix3x4fv)(GLint,GLsizei,GLboolean,GLfloat *);
107
- static VALUE
108
- gl_UniformMatrix3x4fv(obj,arg1,arg2,arg3,arg4)
109
- VALUE obj,arg1,arg2,arg3,arg4;
110
- {
111
- GLint location;
112
- GLsizei count;
113
- GLboolean transpose;
114
- GLfloat *value;
115
- LOAD_GL_FUNC(glUniformMatrix3x4fv)
116
- location = (GLint)NUM2INT(arg1);
117
- count = (GLint)NUM2INT(arg2);
118
- transpose = (GLboolean)NUM2INT(arg3);
119
- value = ALLOC_N(GLfloat, 3*4*count);
120
- ary2cflt(arg4,value,3*4*count);
121
- fptr_glUniformMatrix3x4fv(location,count,transpose,value);
122
- xfree(value);
123
- return Qnil;
124
- }
125
-
126
- static void (APIENTRY * fptr_glUniformMatrix4x3fv)(GLint,GLsizei,GLboolean,GLfloat *);
127
- static VALUE
128
- gl_UniformMatrix4x3fv(obj,arg1,arg2,arg3,arg4)
129
- VALUE obj,arg1,arg2,arg3,arg4;
130
- {
131
- GLint location;
132
- GLsizei count;
133
- GLboolean transpose;
134
- GLfloat *value;
135
- LOAD_GL_FUNC(glUniformMatrix4x3fv)
136
- location = (GLint)NUM2INT(arg1);
137
- count = (GLint)NUM2INT(arg2);
138
- transpose = (GLboolean)NUM2INT(arg3);
139
- value = ALLOC_N(GLfloat, 4*3*count);
140
- ary2cflt(arg4,value,4*3*count);
141
- fptr_glUniformMatrix4x3fv(location,count,transpose,value);
142
- xfree(value);
143
- return Qnil;
144
- }
51
+ #undef UNIFORMMATRIX_FUNC
145
52
 
146
53
  void gl_init_functions_2_1(VALUE module)
147
54
  {