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.
- data/Rakefile +42 -15
- data/doc/build_install.txt +70 -25
- data/doc/history.txt +4 -0
- data/doc/requirements_and_design.txt +2 -3
- data/doc/roadmap.txt +15 -2
- data/doc/screenshots.txt +23 -0
- data/doc/supplies/page_template.html +2 -1
- data/doc/thanks.txt +3 -0
- data/doc/tutorial.txt +5 -3
- data/examples/README +57 -7
- data/examples/legacy/COPYRIGHT +8 -0
- data/examples/{aaindex.rb → legacy/aaindex.rb} +6 -5
- data/examples/legacy/aapoly.rb +153 -0
- data/examples/legacy/aargb.rb +139 -0
- data/examples/legacy/accanti.rb +159 -0
- data/examples/legacy/accpersp.rb +216 -0
- data/examples/legacy/alpha.rb +133 -0
- data/examples/legacy/alpha3D.rb +165 -0
- data/examples/legacy/bezcurve.rb +107 -0
- data/examples/legacy/bezmesh.rb +131 -0
- data/examples/legacy/checker.rb +121 -0
- data/examples/legacy/clip.rb +104 -0
- data/examples/legacy/colormat.rb +145 -0
- data/examples/legacy/cube.rb +73 -0
- data/examples/legacy/depthcue.rb +101 -0
- data/examples/legacy/dof.rb +212 -0
- data/examples/legacy/double.rb +104 -0
- data/examples/legacy/drawf.rb +98 -0
- data/examples/legacy/feedback.rb +152 -0
- data/examples/legacy/fog.rb +172 -0
- data/examples/legacy/font-glut.rb +41 -0
- data/examples/legacy/font.rb +158 -0
- data/examples/legacy/hello.rb +75 -0
- data/examples/legacy/image.rb +145 -0
- data/examples/legacy/jitter.rb +209 -0
- data/examples/legacy/lines.rb +135 -0
- data/examples/legacy/list.rb +120 -0
- data/examples/legacy/material.rb +290 -0
- data/examples/legacy/mipmap.rb +159 -0
- data/examples/legacy/model.rb +119 -0
- data/examples/legacy/movelight.rb +140 -0
- data/examples/legacy/pickdepth.rb +180 -0
- data/examples/legacy/planet.rb +112 -0
- data/examples/legacy/quadric.rb +180 -0
- data/examples/legacy/readpixel.rb +59 -0
- data/examples/legacy/robot.rb +120 -0
- data/examples/legacy/select.rb +207 -0
- data/examples/{smooth_prev.rb → legacy/smooth.rb} +3 -2
- data/examples/legacy/stencil.rb +154 -0
- data/examples/legacy/stroke.rb +170 -0
- data/examples/legacy/surface.rb +170 -0
- data/examples/legacy/teaambient.rb +132 -0
- data/examples/legacy/teapots.rb +188 -0
- data/examples/legacy/tess.rb +222 -0
- data/examples/legacy/texbind.rb +157 -0
- data/examples/legacy/texgen.rb +171 -0
- data/examples/legacy/texturesurf.rb +128 -0
- data/examples/legacy/varray.rb +167 -0
- data/examples/legacy/wrap.rb +158 -0
- data/examples/nehe_lesson02.rb +117 -0
- data/examples/nehe_lesson03.rb +122 -0
- data/examples/nehe_lesson04.rb +133 -0
- data/examples/nehe_lesson05.rb +186 -0
- data/examples/plane.rb +1 -1
- data/examples/smooth.rb +4 -2
- data/examples/test.rb +3 -2
- data/ext/common/{rbogl.c → common.h} +99 -32
- data/ext/common/gl-enums.h +39 -1
- data/ext/gl/gl-1.0-1.1.c +350 -305
- data/ext/gl/gl-1.2.c +933 -38
- data/ext/gl/gl-1.3.c +725 -0
- data/ext/gl/gl-1.4.c +647 -0
- data/ext/gl/gl-1.5.c +362 -0
- data/ext/gl/gl-2.0.c +1632 -0
- data/ext/gl/gl-2.1.c +154 -0
- data/ext/gl/gl-enums.c +1 -2
- data/ext/gl/gl.c +58 -2
- data/ext/gl/mkrf_conf.rb +4 -1
- data/ext/glu/glu.c +5 -4
- data/ext/glu/mkrf_conf.rb +4 -1
- data/ext/glut/glut.c +7 -1
- data/ext/glut/mkrf_conf.rb +5 -0
- data/lib/gl_prev.rb +4 -3
- data/lib/glu_prev.rb +4 -3
- data/lib/glut_prev.rb +3 -3
- data/{examples/all_tests.rb → lib/opengl.rb} +9 -12
- data/test/README +5 -18
- data/test/tc_common.rb +79 -0
- data/test/tc_func_10_11.rb +1255 -0
- data/test/tc_func_12.rb +186 -0
- data/test/tc_func_13.rb +203 -0
- data/test/tc_func_14.rb +197 -0
- data/test/tc_func_15.rb +82 -0
- data/test/tc_func_20.rb +320 -0
- data/test/tc_func_21.rb +67 -0
- data/test/tc_include_gl.rb +1 -1
- data/test/{tc_opengl_namespace.rb → tc_misc.rb} +20 -20
- data/test/tc_require_gl.rb +1 -1
- metadata +99 -27
- data/ext/common/Rakefile +0 -39
- data/ext/common/rbogl.h +0 -52
- data/test/runtests.sh +0 -7
- data/test/tc_gl_vertex.rb +0 -180
data/ext/gl/gl-1.5.c
ADDED
@@ -0,0 +1,362 @@
|
|
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
|
+
#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
|
+
#include "../common/common.h"
|
25
|
+
|
26
|
+
/* OpenGL 1.5 functions */
|
27
|
+
|
28
|
+
static void (APIENTRY * fptr_glGenQueries)(GLsizei,GLuint *);
|
29
|
+
static VALUE
|
30
|
+
gl_GenQueries(obj,arg1)
|
31
|
+
VALUE obj,arg1;
|
32
|
+
{
|
33
|
+
GLsizei n;
|
34
|
+
GLuint *queries;
|
35
|
+
RArray *ret;
|
36
|
+
int i;
|
37
|
+
LOAD_GL_FUNC(glGenQueries)
|
38
|
+
n = (GLsizei)NUM2UINT(arg1);
|
39
|
+
queries = ALLOC_N(GLuint, n);
|
40
|
+
fptr_glGenQueries(n, queries);
|
41
|
+
ret = RARRAY(rb_ary_new2(n));
|
42
|
+
for (i = 0; i < n; i++)
|
43
|
+
rb_ary_push((VALUE)ret, INT2NUM(queries[i]));
|
44
|
+
xfree(queries);
|
45
|
+
return (VALUE)ret;
|
46
|
+
}
|
47
|
+
|
48
|
+
static void (APIENTRY * fptr_glDeleteQueries)(GLsizei,GLuint *);
|
49
|
+
static VALUE
|
50
|
+
gl_DeleteQueries(obj,arg1)
|
51
|
+
VALUE obj,arg1;
|
52
|
+
{
|
53
|
+
GLsizei n;
|
54
|
+
GLuint *queries;
|
55
|
+
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);
|
62
|
+
return Qnil;
|
63
|
+
}
|
64
|
+
|
65
|
+
static GLboolean (APIENTRY * fptr_glIsQuery)(GLuint);
|
66
|
+
static VALUE
|
67
|
+
gl_IsQuery(obj,arg1)
|
68
|
+
VALUE obj,arg1;
|
69
|
+
{
|
70
|
+
GLuint query;
|
71
|
+
GLboolean ret;
|
72
|
+
LOAD_GL_FUNC(glIsQuery)
|
73
|
+
query = (GLuint)NUM2UINT(arg1);
|
74
|
+
ret = fptr_glIsQuery(query);
|
75
|
+
return INT2NUM(ret);
|
76
|
+
}
|
77
|
+
|
78
|
+
static void (APIENTRY * fptr_glBeginQuery)(GLenum,GLuint);
|
79
|
+
static VALUE
|
80
|
+
gl_BeginQuery(obj,arg1,arg2)
|
81
|
+
VALUE obj,arg1,arg2;
|
82
|
+
{
|
83
|
+
GLenum target;
|
84
|
+
GLuint id;
|
85
|
+
LOAD_GL_FUNC(glBeginQuery)
|
86
|
+
target = (GLenum)NUM2INT(arg1);
|
87
|
+
id = (GLuint)NUM2UINT(arg2);
|
88
|
+
fptr_glBeginQuery(target,id);
|
89
|
+
return Qnil;
|
90
|
+
}
|
91
|
+
|
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
|
+
static void (APIENTRY * fptr_glGetQueryiv)(GLenum,GLenum,GLint *);
|
105
|
+
static VALUE
|
106
|
+
gl_GetQueryiv(obj,arg1,arg2)
|
107
|
+
VALUE obj,arg1,arg2;
|
108
|
+
{
|
109
|
+
GLenum target;
|
110
|
+
GLenum pname;
|
111
|
+
GLint params = 0;
|
112
|
+
VALUE retary;
|
113
|
+
LOAD_GL_FUNC(glGetQueryiv)
|
114
|
+
target = (GLenum)NUM2INT(arg1);
|
115
|
+
pname = (GLenum)NUM2INT(arg2);
|
116
|
+
fptr_glGetQueryiv(target,pname,¶ms);
|
117
|
+
retary = rb_ary_new2(1);
|
118
|
+
rb_ary_push(retary, INT2NUM(params));
|
119
|
+
return retary;
|
120
|
+
}
|
121
|
+
|
122
|
+
static void (APIENTRY * fptr_glGetQueryObjectiv)(GLuint,GLenum,GLint *);
|
123
|
+
static VALUE
|
124
|
+
gl_GetQueryObjectiv(obj,arg1,arg2)
|
125
|
+
VALUE obj,arg1,arg2;
|
126
|
+
{
|
127
|
+
GLuint id;
|
128
|
+
GLenum pname;
|
129
|
+
GLint params = 0;
|
130
|
+
VALUE retary;
|
131
|
+
LOAD_GL_FUNC(glGetQueryObjectiv)
|
132
|
+
id = (GLuint)NUM2UINT(arg1);
|
133
|
+
pname = (GLenum)NUM2INT(arg2);
|
134
|
+
fptr_glGetQueryObjectiv(id,pname,¶ms);
|
135
|
+
retary = rb_ary_new2(1);
|
136
|
+
rb_ary_push(retary,INT2NUM(params));
|
137
|
+
return retary;
|
138
|
+
}
|
139
|
+
|
140
|
+
static void (APIENTRY * fptr_glGetQueryObjectuiv)(GLuint,GLenum,GLuint *);
|
141
|
+
static VALUE
|
142
|
+
gl_GetQueryObjectuiv(obj,arg1,arg2,arg3)
|
143
|
+
VALUE obj,arg1,arg2,arg3;
|
144
|
+
{
|
145
|
+
GLuint id;
|
146
|
+
GLenum pname;
|
147
|
+
GLuint params = 0;
|
148
|
+
VALUE retary;
|
149
|
+
LOAD_GL_FUNC(glGetQueryObjectuiv)
|
150
|
+
id = (GLuint)NUM2UINT(arg1);
|
151
|
+
pname = (GLenum)NUM2INT(arg2);
|
152
|
+
fptr_glGetQueryObjectuiv(id,pname,¶ms);
|
153
|
+
retary = rb_ary_new2(1);
|
154
|
+
rb_ary_push(retary,INT2NUM(params));
|
155
|
+
return retary;
|
156
|
+
}
|
157
|
+
|
158
|
+
static void (APIENTRY * fptr_glBindBuffer)(GLenum,GLuint);
|
159
|
+
static VALUE
|
160
|
+
gl_BindBuffer(obj,arg1,arg2)
|
161
|
+
VALUE obj,arg1,arg2;
|
162
|
+
{
|
163
|
+
GLenum target;
|
164
|
+
GLuint buffer;
|
165
|
+
LOAD_GL_FUNC(glBindBuffer)
|
166
|
+
target = (GLenum)NUM2INT(arg1);
|
167
|
+
buffer = (GLenum)NUM2INT(arg2);
|
168
|
+
fptr_glBindBuffer(target,buffer);
|
169
|
+
return Qnil;
|
170
|
+
}
|
171
|
+
|
172
|
+
static void (APIENTRY * fptr_glDeleteBuffers)(GLsizei,GLuint *);
|
173
|
+
static VALUE
|
174
|
+
gl_DeleteBuffers(obj,arg1)
|
175
|
+
VALUE obj,arg1;
|
176
|
+
{
|
177
|
+
GLsizei n;
|
178
|
+
GLuint *buffers;
|
179
|
+
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);
|
186
|
+
return Qnil;
|
187
|
+
}
|
188
|
+
|
189
|
+
static void (APIENTRY * fptr_glGenBuffers)(GLsizei,GLuint *);
|
190
|
+
static VALUE
|
191
|
+
gl_GenBuffers(obj,arg1)
|
192
|
+
VALUE obj,arg1;
|
193
|
+
{
|
194
|
+
GLsizei n;
|
195
|
+
GLuint *buffers;
|
196
|
+
RArray *ret;
|
197
|
+
int i;
|
198
|
+
LOAD_GL_FUNC(glGenBuffers)
|
199
|
+
n = (GLsizei)NUM2UINT(arg1);
|
200
|
+
buffers = ALLOC_N(GLuint, n);
|
201
|
+
fptr_glGenBuffers(n, buffers);
|
202
|
+
ret = RARRAY(rb_ary_new2(n));
|
203
|
+
for (i = 0; i < n; i++)
|
204
|
+
rb_ary_push((VALUE)ret, INT2NUM(buffers[i]));
|
205
|
+
xfree(buffers);
|
206
|
+
return (VALUE)ret;
|
207
|
+
}
|
208
|
+
|
209
|
+
static GLboolean (APIENTRY * fptr_glIsBuffer)(GLuint);
|
210
|
+
static VALUE
|
211
|
+
gl_IsBuffer(obj,arg1)
|
212
|
+
VALUE obj,arg1;
|
213
|
+
{
|
214
|
+
GLuint buffer;
|
215
|
+
GLboolean ret;
|
216
|
+
LOAD_GL_FUNC(glIsBuffer)
|
217
|
+
buffer = (GLuint)NUM2UINT(arg1);
|
218
|
+
ret = fptr_glIsBuffer(buffer);
|
219
|
+
return INT2NUM(ret);
|
220
|
+
}
|
221
|
+
|
222
|
+
static void (APIENTRY * fptr_glBufferData)(GLenum,GLsizeiptr,GLvoid *,GLenum);
|
223
|
+
static VALUE
|
224
|
+
gl_BufferData(obj,arg1,arg2,arg3,arg4)
|
225
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
226
|
+
{
|
227
|
+
GLenum target;
|
228
|
+
GLsizeiptr size;
|
229
|
+
GLenum usage;
|
230
|
+
LOAD_GL_FUNC(glBufferData)
|
231
|
+
target = (GLenum)NUM2INT(arg1);
|
232
|
+
size = (GLsizeiptr)NUM2INT(arg2);
|
233
|
+
usage = (GLenum)NUM2INT(arg4);
|
234
|
+
if (TYPE(arg3) == T_STRING) {
|
235
|
+
fptr_glBufferData(target,size,(GLvoid *)RSTRING(arg3)->ptr,usage);
|
236
|
+
} else if (NIL_P(arg3)) {
|
237
|
+
fptr_glBufferData(target,size,NULL,usage);
|
238
|
+
} else {
|
239
|
+
Check_Type(arg3,T_STRING); /* force exception */
|
240
|
+
}
|
241
|
+
return Qnil;
|
242
|
+
}
|
243
|
+
|
244
|
+
static void (APIENTRY * fptr_glBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid *);
|
245
|
+
static VALUE
|
246
|
+
gl_BufferSubData(obj,arg1,arg2,arg3,arg4)
|
247
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
248
|
+
{
|
249
|
+
GLenum target;
|
250
|
+
GLintptr offset;
|
251
|
+
GLsizeiptr size;
|
252
|
+
LOAD_GL_FUNC(glBufferSubData)
|
253
|
+
target = (GLenum)NUM2INT(arg1);
|
254
|
+
offset = (GLintptr)NUM2INT(arg2);
|
255
|
+
size = (GLsizeiptr)NUM2INT(arg3);
|
256
|
+
Check_Type(arg4,T_STRING);
|
257
|
+
fptr_glBufferSubData(target,offset,size,(GLvoid *)RSTRING(arg4)->ptr);
|
258
|
+
return Qnil;
|
259
|
+
}
|
260
|
+
|
261
|
+
static void (APIENTRY * fptr_glGetBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid *);
|
262
|
+
static VALUE
|
263
|
+
gl_GetBufferSubData(obj,arg1,arg2,arg3)
|
264
|
+
VALUE obj,arg1,arg2,arg3;
|
265
|
+
{
|
266
|
+
GLenum target;
|
267
|
+
GLintptr offset;
|
268
|
+
GLsizeiptr size;
|
269
|
+
VALUE data;
|
270
|
+
LOAD_GL_FUNC(glGetBufferSubData)
|
271
|
+
target = (GLenum)NUM2INT(arg1);
|
272
|
+
offset = (GLintptr)NUM2INT(arg2);
|
273
|
+
size = (GLsizeiptr)NUM2INT(arg3);
|
274
|
+
data = allocate_buffer_with_string(size);
|
275
|
+
fptr_glGetBufferSubData(target,offset,size,(GLvoid *)RSTRING(data)->ptr);
|
276
|
+
return data;
|
277
|
+
}
|
278
|
+
|
279
|
+
static void (APIENTRY * fptr_glGetBufferParameteriv)(GLenum,GLenum,GLint *);
|
280
|
+
static VALUE
|
281
|
+
gl_GetBufferParameteriv(obj,arg1,arg2)
|
282
|
+
VALUE obj,arg1,arg2;
|
283
|
+
{
|
284
|
+
GLenum target;
|
285
|
+
GLenum value;
|
286
|
+
GLint data = 0;
|
287
|
+
VALUE retary;
|
288
|
+
LOAD_GL_FUNC(glGetBufferParameteriv)
|
289
|
+
target = (GLenum)NUM2INT(arg1);
|
290
|
+
value = (GLenum)NUM2INT(arg2);
|
291
|
+
fptr_glGetBufferParameteriv(target,value,&data);
|
292
|
+
retary = rb_ary_new2(1);
|
293
|
+
rb_ary_push(retary,INT2NUM(data));
|
294
|
+
return retary;
|
295
|
+
}
|
296
|
+
|
297
|
+
static GLvoid * (APIENTRY * fptr_glMapBuffer)(GLenum,GLenum);
|
298
|
+
static VALUE
|
299
|
+
gl_MapBuffer(obj,arg1,arg2)
|
300
|
+
VALUE obj,arg1,arg2;
|
301
|
+
{
|
302
|
+
GLenum target;
|
303
|
+
GLenum access;
|
304
|
+
GLint size = 0;
|
305
|
+
VALUE data;
|
306
|
+
GLvoid *buffer_ptr;
|
307
|
+
LOAD_GL_FUNC(glMapBuffer)
|
308
|
+
LOAD_GL_FUNC(glGetBufferParameteriv)
|
309
|
+
target = (GLenum)NUM2INT(arg1);
|
310
|
+
access = (GLenum)NUM2INT(arg2);
|
311
|
+
fptr_glGetBufferParameteriv(target,GL_BUFFER_SIZE,&size);
|
312
|
+
buffer_ptr = fptr_glMapBuffer(target,access);
|
313
|
+
data = allocate_buffer_with_string(size);
|
314
|
+
memcpy(RSTRING(data)->ptr, buffer_ptr, size);
|
315
|
+
return data;
|
316
|
+
}
|
317
|
+
|
318
|
+
static GLboolean (APIENTRY * fptr_glUnmapBuffer)(GLenum);
|
319
|
+
static VALUE
|
320
|
+
gl_UnmapBuffer(obj,arg1)
|
321
|
+
VALUE obj,arg1;
|
322
|
+
{
|
323
|
+
GLenum target;
|
324
|
+
GLboolean ret;
|
325
|
+
LOAD_GL_FUNC(glUnmapBuffer)
|
326
|
+
target = (GLenum)NUM2INT(arg1);
|
327
|
+
ret = fptr_glUnmapBuffer(target);
|
328
|
+
return INT2NUM(ret);
|
329
|
+
}
|
330
|
+
|
331
|
+
static void (APIENTRY * fptr_glGetBufferPointerv)(GLenum,GLenum,GLvoid **);
|
332
|
+
static VALUE
|
333
|
+
gl_GetBufferPointerv(obj,arg1,arg2,arg3)
|
334
|
+
VALUE obj,arg1,arg2,arg3;
|
335
|
+
{
|
336
|
+
LOAD_GL_FUNC(glGetBufferPointerv)
|
337
|
+
/* not implemented */
|
338
|
+
return Qnil;
|
339
|
+
}
|
340
|
+
|
341
|
+
void gl_init_functions_1_5(VALUE module)
|
342
|
+
{
|
343
|
+
rb_define_module_function(module, "glGenQueries", gl_GenQueries, 1);
|
344
|
+
rb_define_module_function(module, "glDeleteQueries", gl_DeleteQueries, 1);
|
345
|
+
rb_define_module_function(module, "glIsQuery", gl_IsQuery, 1);
|
346
|
+
rb_define_module_function(module, "glBeginQuery", gl_BeginQuery, 2);
|
347
|
+
rb_define_module_function(module, "glEndQuery", gl_EndQuery, 1);
|
348
|
+
rb_define_module_function(module, "glGetQueryiv", gl_GetQueryiv, 2);
|
349
|
+
rb_define_module_function(module, "glGetQueryObjectiv", gl_GetQueryObjectiv, 2);
|
350
|
+
rb_define_module_function(module, "glGetQueryObjectuiv", gl_GetQueryObjectuiv, 2);
|
351
|
+
rb_define_module_function(module, "glBindBuffer", gl_BindBuffer, 2);
|
352
|
+
rb_define_module_function(module, "glDeleteBuffers", gl_DeleteBuffers, 1);
|
353
|
+
rb_define_module_function(module, "glGenBuffers", gl_GenBuffers, 1);
|
354
|
+
rb_define_module_function(module, "glIsBuffer", gl_IsBuffer, 1);
|
355
|
+
rb_define_module_function(module, "glBufferData", gl_BufferData, 4);
|
356
|
+
rb_define_module_function(module, "glBufferSubData", gl_BufferSubData, 4);
|
357
|
+
rb_define_module_function(module, "glGetBufferSubData", gl_GetBufferSubData, 3);
|
358
|
+
rb_define_module_function(module, "glMapBuffer", gl_MapBuffer, 2);
|
359
|
+
rb_define_module_function(module, "glUnmapBuffer", gl_UnmapBuffer, 1);
|
360
|
+
rb_define_module_function(module, "glGetBufferParameteriv", gl_GetBufferParameteriv, 2);
|
361
|
+
rb_define_module_function(module, "glGetBufferPointerv", gl_GetBufferPointerv, 3);
|
362
|
+
}
|
data/ext/gl/gl-2.0.c
ADDED
@@ -0,0 +1,1632 @@
|
|
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
|
+
#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
|
+
#include "../common/common.h"
|
25
|
+
|
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
|
+
}
|
39
|
+
|
40
|
+
static void (APIENTRY * fptr_glDrawBuffers)(GLsizei,GLenum *);
|
41
|
+
static VALUE
|
42
|
+
gl_DrawBuffers(obj,arg1)
|
43
|
+
VALUE obj,arg1;
|
44
|
+
{
|
45
|
+
GLsizei size;
|
46
|
+
GLenum *buffers;
|
47
|
+
LOAD_GL_FUNC(glDrawBuffers)
|
48
|
+
Check_Type(arg1,T_ARRAY);
|
49
|
+
size = RARRAY(arg1)->len;
|
50
|
+
buffers = ALLOC_N(GLenum,size);
|
51
|
+
ary2cuint(arg1,buffers,size);
|
52
|
+
fptr_glDrawBuffers(size,buffers);
|
53
|
+
xfree(buffers);
|
54
|
+
return Qnil;
|
55
|
+
}
|
56
|
+
|
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
|
+
static void (APIENTRY * fptr_glStencilFuncSeparate)(GLenum,GLenum,GLint,GLuint);
|
76
|
+
static VALUE
|
77
|
+
gl_StencilFuncSeparate(obj,arg1,arg2,arg3,arg4)
|
78
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
79
|
+
{
|
80
|
+
GLenum face;
|
81
|
+
GLenum func;
|
82
|
+
GLint ref;
|
83
|
+
GLuint mask;
|
84
|
+
LOAD_GL_FUNC(glStencilFuncSeparate)
|
85
|
+
face = (GLenum)NUM2INT(arg1);
|
86
|
+
func = (GLenum)NUM2INT(arg2);
|
87
|
+
ref = (GLint)NUM2INT(arg3);
|
88
|
+
mask = (GLuint)NUM2UINT(arg4);
|
89
|
+
fptr_glStencilFuncSeparate(face,func,ref,mask);
|
90
|
+
return Qnil;
|
91
|
+
}
|
92
|
+
|
93
|
+
static void (APIENTRY * fptr_glStencilMaskSeparate)(GLenum face,GLuint mask);
|
94
|
+
static VALUE
|
95
|
+
gl_StencilMaskSeparate(obj,arg1,arg2)
|
96
|
+
VALUE obj,arg1,arg2;
|
97
|
+
{
|
98
|
+
GLenum face;
|
99
|
+
GLuint mask;
|
100
|
+
LOAD_GL_FUNC(glStencilMaskSeparate)
|
101
|
+
face = (GLenum)NUM2INT(arg1);
|
102
|
+
mask = (GLenum)NUM2INT(arg2);
|
103
|
+
fptr_glStencilMaskSeparate(face,mask);
|
104
|
+
return Qnil;
|
105
|
+
}
|
106
|
+
|
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
|
+
static void (APIENTRY * fptr_glBindAttribLocation)(GLuint,GLuint,GLchar *);
|
122
|
+
static VALUE
|
123
|
+
gl_BindAttribLocation(obj,arg1,arg2,arg3)
|
124
|
+
VALUE obj,arg1,arg2,arg3;
|
125
|
+
{
|
126
|
+
GLuint program;
|
127
|
+
GLuint index;
|
128
|
+
LOAD_GL_FUNC(glBindAttribLocation)
|
129
|
+
program = (GLuint)NUM2UINT(arg1);
|
130
|
+
index = (GLuint)NUM2UINT(arg2);
|
131
|
+
Check_Type(arg3, T_STRING);
|
132
|
+
fptr_glBindAttribLocation(program,index,RSTRING(arg3)->ptr);
|
133
|
+
return Qnil;
|
134
|
+
}
|
135
|
+
|
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
|
+
static GLuint (APIENTRY * fptr_glCreateProgram)(void);
|
149
|
+
static VALUE
|
150
|
+
gl_CreateProgram(obj)
|
151
|
+
VALUE obj;
|
152
|
+
{
|
153
|
+
GLuint ret;
|
154
|
+
LOAD_GL_FUNC(glCreateProgram)
|
155
|
+
ret = fptr_glCreateProgram();
|
156
|
+
return INT2NUM(ret);
|
157
|
+
}
|
158
|
+
|
159
|
+
static GLuint (APIENTRY * fptr_glCreateShader)(GLenum);
|
160
|
+
static VALUE
|
161
|
+
gl_CreateShader(obj,arg1)
|
162
|
+
VALUE obj,arg1;
|
163
|
+
{
|
164
|
+
GLenum shaderType;
|
165
|
+
GLuint ret;
|
166
|
+
LOAD_GL_FUNC(glCreateShader)
|
167
|
+
shaderType = (GLenum)NUM2INT(arg1);
|
168
|
+
ret = fptr_glCreateShader(shaderType);
|
169
|
+
return INT2NUM(ret);
|
170
|
+
}
|
171
|
+
|
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
|
+
static void (APIENTRY * fptr_glGetProgramiv)(GLuint,GLenum,GLint *);
|
235
|
+
static VALUE
|
236
|
+
gl_GetProgramiv(obj,arg1,arg2)
|
237
|
+
VALUE obj,arg1,arg2;
|
238
|
+
{
|
239
|
+
GLuint program;
|
240
|
+
GLenum pname;
|
241
|
+
GLint params = 0;
|
242
|
+
LOAD_GL_FUNC(glGetProgramiv)
|
243
|
+
program = (GLuint)NUM2UINT(arg1);
|
244
|
+
pname = (GLenum)NUM2INT(arg2);
|
245
|
+
fptr_glGetProgramiv(program,pname,¶ms);
|
246
|
+
return INT2NUM(params);
|
247
|
+
}
|
248
|
+
|
249
|
+
static void (APIENTRY * fptr_glGetActiveAttrib)(GLuint,GLuint,GLsizei,GLsizei *,GLint *,GLenum *,GLchar *);
|
250
|
+
static VALUE
|
251
|
+
gl_GetActiveAttrib(obj,arg1,arg2)
|
252
|
+
VALUE obj,arg1,arg2;
|
253
|
+
{
|
254
|
+
GLuint program;
|
255
|
+
GLuint index;
|
256
|
+
GLsizei max_size = 0;
|
257
|
+
GLsizei written = 0;
|
258
|
+
GLint attrib_size = 0;
|
259
|
+
GLenum attrib_type = 0;
|
260
|
+
VALUE buffer;
|
261
|
+
VALUE retary;
|
262
|
+
LOAD_GL_FUNC(glGetActiveAttrib)
|
263
|
+
LOAD_GL_FUNC(glGetProgramiv)
|
264
|
+
program = (GLuint)NUM2UINT(arg1);
|
265
|
+
index = (GLuint)NUM2UINT(arg2);
|
266
|
+
fptr_glGetProgramiv(program,GL_ACTIVE_ATTRIBUTE_MAX_LENGTH,&max_size);
|
267
|
+
if (max_size==0)
|
268
|
+
rb_raise(rb_eTypeError, "Can't determine maximum attribute name length");
|
269
|
+
buffer = allocate_buffer_with_string(max_size-1);
|
270
|
+
fptr_glGetActiveAttrib(program,index,max_size,&written,&attrib_size,&attrib_type,RSTRING(buffer)->ptr);
|
271
|
+
retary = rb_ary_new2(3);
|
272
|
+
rb_ary_push(retary, INT2NUM(attrib_size));
|
273
|
+
rb_ary_push(retary, INT2NUM(attrib_type));
|
274
|
+
rb_ary_push(retary, buffer);
|
275
|
+
return retary;
|
276
|
+
}
|
277
|
+
|
278
|
+
static void (APIENTRY * fptr_glGetActiveUniform)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
|
279
|
+
static VALUE
|
280
|
+
gl_GetActiveUniform(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
281
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
282
|
+
{
|
283
|
+
GLuint program;
|
284
|
+
GLuint index;
|
285
|
+
GLsizei max_size = 0;
|
286
|
+
GLsizei written = 0;
|
287
|
+
GLint uniform_size = 0;
|
288
|
+
GLenum uniform_type = 0;
|
289
|
+
VALUE buffer;
|
290
|
+
VALUE retary;
|
291
|
+
LOAD_GL_FUNC(glGetActiveUniform)
|
292
|
+
LOAD_GL_FUNC(glGetProgramiv)
|
293
|
+
program = (GLuint)NUM2UINT(arg1);
|
294
|
+
index = (GLuint)NUM2UINT(arg2);
|
295
|
+
fptr_glGetProgramiv(program,GL_ACTIVE_UNIFORM_MAX_LENGTH,&max_size);
|
296
|
+
if (max_size==0)
|
297
|
+
rb_raise(rb_eTypeError, "Can't determine maximum uniform name length");
|
298
|
+
buffer = allocate_buffer_with_string(max_size-1);
|
299
|
+
fptr_glGetActiveUniform(program,index,max_size,&written,&uniform_size,&uniform_type,RSTRING(buffer)->ptr);
|
300
|
+
retary = rb_ary_new2(3);
|
301
|
+
rb_ary_push(retary, INT2NUM(uniform_size));
|
302
|
+
rb_ary_push(retary, INT2NUM(uniform_type));
|
303
|
+
rb_ary_push(retary, buffer);
|
304
|
+
return retary;
|
305
|
+
}
|
306
|
+
|
307
|
+
static void (APIENTRY * fptr_glGetAttachedShaders)(GLuint,GLsizei,GLsizei *,GLuint *);
|
308
|
+
static VALUE
|
309
|
+
gl_GetAttachedShaders(obj,arg1)
|
310
|
+
VALUE obj,arg1;
|
311
|
+
{
|
312
|
+
GLuint program;
|
313
|
+
GLint shaders_num = 0;
|
314
|
+
GLuint *shaders;
|
315
|
+
VALUE retary;
|
316
|
+
GLsizei count = 0;
|
317
|
+
GLint i;
|
318
|
+
LOAD_GL_FUNC(glGetAttachedShaders)
|
319
|
+
LOAD_GL_FUNC(glGetProgramiv)
|
320
|
+
program = (GLuint)NUM2UINT(arg1);
|
321
|
+
fptr_glGetProgramiv(program,GL_ATTACHED_SHADERS,&shaders_num);
|
322
|
+
if (shaders_num<=0)
|
323
|
+
return Qnil;
|
324
|
+
shaders = ALLOC_N(GLuint,shaders_num);
|
325
|
+
fptr_glGetAttachedShaders(program,shaders_num,&count,shaders);
|
326
|
+
retary = rb_ary_new2(shaders_num);
|
327
|
+
for(i=0;i<shaders_num;i++)
|
328
|
+
rb_ary_push(retary, INT2NUM(shaders[i]));
|
329
|
+
xfree(shaders);
|
330
|
+
return retary;
|
331
|
+
}
|
332
|
+
|
333
|
+
static GLint (APIENTRY * fptr_glGetAttribLocation)(GLuint, GLchar *);
|
334
|
+
static VALUE
|
335
|
+
gl_GetAttribLocation(obj,arg1,arg2)
|
336
|
+
VALUE obj,arg1,arg2;
|
337
|
+
{
|
338
|
+
GLuint program;
|
339
|
+
GLint ret;
|
340
|
+
LOAD_GL_FUNC(glGetAttribLocation)
|
341
|
+
program=(GLuint)NUM2UINT(arg1);
|
342
|
+
Check_Type(arg2,T_STRING);
|
343
|
+
ret = fptr_glGetAttribLocation(program,RSTRING(arg2)->ptr);
|
344
|
+
return INT2NUM(ret);
|
345
|
+
}
|
346
|
+
|
347
|
+
static void (APIENTRY * fptr_glGetProgramInfoLog)(GLuint,GLsizei,GLsizei *,GLchar *);
|
348
|
+
static VALUE
|
349
|
+
gl_GetProgramInfoLog(obj,arg1)
|
350
|
+
VALUE obj,arg1;
|
351
|
+
{
|
352
|
+
GLuint program;
|
353
|
+
GLint max_size = 0;
|
354
|
+
GLsizei ret_length = 0;
|
355
|
+
VALUE buffer;
|
356
|
+
LOAD_GL_FUNC(glGetProgramInfoLog)
|
357
|
+
LOAD_GL_FUNC(glGetProgramiv)
|
358
|
+
program = (GLuint)NUM2UINT(arg1);
|
359
|
+
fptr_glGetProgramiv(program,GL_INFO_LOG_LENGTH,&max_size);
|
360
|
+
if (max_size<=0)
|
361
|
+
return rb_str_new2("");
|
362
|
+
buffer = allocate_buffer_with_string(max_size);
|
363
|
+
fptr_glGetProgramInfoLog(program,max_size,&ret_length,RSTRING(buffer)->ptr);
|
364
|
+
RSTRING(buffer)->len = ret_length;
|
365
|
+
return buffer;
|
366
|
+
}
|
367
|
+
|
368
|
+
static void (APIENTRY * fptr_glGetShaderiv)(GLuint,GLenum,GLint *);
|
369
|
+
static VALUE
|
370
|
+
gl_GetShaderiv(obj,arg1,arg2)
|
371
|
+
VALUE obj,arg1,arg2;
|
372
|
+
{
|
373
|
+
GLuint program;
|
374
|
+
GLenum pname;
|
375
|
+
GLint params = 0;
|
376
|
+
LOAD_GL_FUNC(glGetShaderiv)
|
377
|
+
program = (GLuint)NUM2UINT(arg1);
|
378
|
+
pname = (GLenum)NUM2INT(arg2);
|
379
|
+
fptr_glGetShaderiv(program,pname,¶ms);
|
380
|
+
return INT2NUM(params);
|
381
|
+
}
|
382
|
+
|
383
|
+
static void (APIENTRY * fptr_glGetShaderInfoLog)(GLuint,GLsizei,GLsizei *,GLchar *);
|
384
|
+
static VALUE
|
385
|
+
gl_GetShaderInfoLog(obj,arg1)
|
386
|
+
VALUE obj,arg1;
|
387
|
+
{
|
388
|
+
GLuint program;
|
389
|
+
GLint max_size = 0;
|
390
|
+
GLsizei ret_length = 0;
|
391
|
+
VALUE ret_buffer;
|
392
|
+
GLchar *buffer;
|
393
|
+
LOAD_GL_FUNC(glGetShaderInfoLog)
|
394
|
+
LOAD_GL_FUNC(glGetShaderiv)
|
395
|
+
program = (GLuint)NUM2UINT(arg1);
|
396
|
+
fptr_glGetShaderiv(program,GL_INFO_LOG_LENGTH,&max_size);
|
397
|
+
if (max_size<=0)
|
398
|
+
return rb_str_new2("");
|
399
|
+
buffer = ALLOC_N(GLchar,max_size+1);
|
400
|
+
memset(buffer,0,sizeof(GLchar) * (max_size+1));
|
401
|
+
fptr_glGetShaderInfoLog(program,max_size,&ret_length,buffer);
|
402
|
+
ret_buffer = rb_str_new(buffer, ret_length);
|
403
|
+
xfree(buffer);
|
404
|
+
return ret_buffer;
|
405
|
+
}
|
406
|
+
|
407
|
+
static void (APIENTRY * fptr_glGetShaderSource)(GLuint,GLsizei,GLsizei *,GLchar *);
|
408
|
+
static VALUE
|
409
|
+
gl_GetShaderSource(obj,arg1)
|
410
|
+
VALUE obj,arg1;
|
411
|
+
{
|
412
|
+
GLuint shader;
|
413
|
+
GLint max_size = 0;
|
414
|
+
GLsizei ret_length = 0;
|
415
|
+
VALUE buffer;
|
416
|
+
LOAD_GL_FUNC(glGetShaderSource)
|
417
|
+
LOAD_GL_FUNC(glGetShaderiv)
|
418
|
+
shader = (GLuint)NUM2UINT(arg1);
|
419
|
+
fptr_glGetShaderiv(shader,GL_SHADER_SOURCE_LENGTH,&max_size);
|
420
|
+
if (max_size==0)
|
421
|
+
rb_raise(rb_eTypeError, "Can't determine maximum shader source length");
|
422
|
+
buffer = allocate_buffer_with_string(max_size-1);
|
423
|
+
fptr_glGetShaderSource(shader,max_size,&ret_length,RSTRING(buffer)->ptr);
|
424
|
+
return buffer;
|
425
|
+
}
|
426
|
+
|
427
|
+
static GLint (APIENTRY * fptr_glGetUniformLocation)(GLuint,const GLchar*);
|
428
|
+
static VALUE
|
429
|
+
gl_GetUniformLocation(obj,arg1,arg2)
|
430
|
+
VALUE obj,arg1,arg2;
|
431
|
+
{
|
432
|
+
GLuint program;
|
433
|
+
GLint ret;
|
434
|
+
LOAD_GL_FUNC(glGetUniformLocation)
|
435
|
+
program=(GLuint)NUM2UINT(arg1);
|
436
|
+
Check_Type(arg2,T_STRING);
|
437
|
+
ret = fptr_glGetUniformLocation(program,RSTRING(arg2)->ptr);
|
438
|
+
return INT2NUM(ret);
|
439
|
+
}
|
440
|
+
|
441
|
+
|
442
|
+
#define GET_UNIFORM_SIZE \
|
443
|
+
switch (uniform_type) { \
|
444
|
+
case GL_FLOAT: \
|
445
|
+
case GL_INT: \
|
446
|
+
case GL_BOOL: \
|
447
|
+
case GL_SAMPLER_1D: \
|
448
|
+
case GL_SAMPLER_2D: \
|
449
|
+
case GL_SAMPLER_3D: \
|
450
|
+
case GL_SAMPLER_CUBE: \
|
451
|
+
case GL_SAMPLER_1D_SHADOW: \
|
452
|
+
case GL_SAMPLER_2D_SHADOW: \
|
453
|
+
uniform_size = 1; \
|
454
|
+
break; \
|
455
|
+
case GL_FLOAT_VEC2: \
|
456
|
+
case GL_INT_VEC2: \
|
457
|
+
case GL_BOOL_VEC2: \
|
458
|
+
uniform_size = 2; \
|
459
|
+
break; \
|
460
|
+
case GL_FLOAT_VEC3: \
|
461
|
+
case GL_INT_VEC3: \
|
462
|
+
case GL_BOOL_VEC3: \
|
463
|
+
uniform_size = 3; \
|
464
|
+
break; \
|
465
|
+
case GL_FLOAT_VEC4: \
|
466
|
+
case GL_INT_VEC4: \
|
467
|
+
case GL_BOOL_VEC4: \
|
468
|
+
case GL_FLOAT_MAT2: \
|
469
|
+
uniform_size = 4; \
|
470
|
+
break; \
|
471
|
+
case GL_FLOAT_MAT2x3: \
|
472
|
+
case GL_FLOAT_MAT3x2: \
|
473
|
+
uniform_size = 6; \
|
474
|
+
break; \
|
475
|
+
case GL_FLOAT_MAT2x4: \
|
476
|
+
case GL_FLOAT_MAT4x2: \
|
477
|
+
uniform_size = 8; \
|
478
|
+
break; \
|
479
|
+
case GL_FLOAT_MAT3: \
|
480
|
+
uniform_size = 9; \
|
481
|
+
break; \
|
482
|
+
case GL_FLOAT_MAT4x3: \
|
483
|
+
case GL_FLOAT_MAT3x4: \
|
484
|
+
uniform_size = 12; \
|
485
|
+
break; \
|
486
|
+
case GL_FLOAT_MAT4: \
|
487
|
+
uniform_size = 16; \
|
488
|
+
break; \
|
489
|
+
default: \
|
490
|
+
rb_raise(rb_eTypeError, "Unsupported type '%i'",uniform_type); \
|
491
|
+
}
|
492
|
+
|
493
|
+
static void (APIENTRY * fptr_glGetUniformfv)(GLuint,GLint,GLfloat *);
|
494
|
+
static VALUE
|
495
|
+
gl_GetUniformfv(obj,arg1,arg2)
|
496
|
+
VALUE obj,arg1,arg2;
|
497
|
+
{
|
498
|
+
GLuint program;
|
499
|
+
GLint location;
|
500
|
+
GLfloat params[16];
|
501
|
+
VALUE retary;
|
502
|
+
GLint i;
|
503
|
+
GLint unused = 0;
|
504
|
+
GLenum uniform_type = 0;
|
505
|
+
GLint uniform_size = 0;
|
506
|
+
|
507
|
+
LOAD_GL_FUNC(glGetUniformfv)
|
508
|
+
LOAD_GL_FUNC(glGetActiveUniform)
|
509
|
+
program = (GLuint)NUM2UINT(arg1);
|
510
|
+
location = (GLint)NUM2INT(arg2);
|
511
|
+
|
512
|
+
fptr_glGetActiveUniform(program,location,0,NULL,&unused,&uniform_type,NULL);
|
513
|
+
if (uniform_type==0)
|
514
|
+
rb_raise(rb_eTypeError, "Can't determine the uniform's type");
|
515
|
+
|
516
|
+
GET_UNIFORM_SIZE
|
517
|
+
|
518
|
+
memset(params,0,16*sizeof(GLfloat));
|
519
|
+
fptr_glGetUniformfv(program,location,params);
|
520
|
+
retary = rb_ary_new2(uniform_size);
|
521
|
+
for(i=0;i<uniform_size;i++)
|
522
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
523
|
+
return retary;
|
524
|
+
}
|
525
|
+
|
526
|
+
static void (APIENTRY * fptr_glGetUniformiv)(GLuint,GLint,GLint *);
|
527
|
+
static VALUE
|
528
|
+
gl_GetUniformiv(obj,arg1,arg2)
|
529
|
+
VALUE obj,arg1,arg2;
|
530
|
+
{
|
531
|
+
GLuint program;
|
532
|
+
GLint location;
|
533
|
+
GLint params[16];
|
534
|
+
VALUE retary;
|
535
|
+
GLint i;
|
536
|
+
GLint unused = 0;
|
537
|
+
GLenum uniform_type = 0;
|
538
|
+
GLint uniform_size = 0;
|
539
|
+
LOAD_GL_FUNC(glGetUniformiv)
|
540
|
+
LOAD_GL_FUNC(glGetActiveUniform)
|
541
|
+
program = (GLuint)NUM2UINT(arg1);
|
542
|
+
location = (GLint)NUM2INT(arg2);
|
543
|
+
|
544
|
+
fptr_glGetActiveUniform(program,location,0,NULL,&unused,&uniform_type,NULL);
|
545
|
+
if (uniform_type==0)
|
546
|
+
rb_raise(rb_eTypeError, "Can't determine the uniform's type");
|
547
|
+
|
548
|
+
GET_UNIFORM_SIZE
|
549
|
+
|
550
|
+
memset(params,0,16*sizeof(GLint));
|
551
|
+
fptr_glGetUniformiv(program,location,params);
|
552
|
+
retary = rb_ary_new2(uniform_size);
|
553
|
+
for(i=0;i<uniform_size;i++)
|
554
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
555
|
+
return retary;
|
556
|
+
}
|
557
|
+
|
558
|
+
static void (APIENTRY * fptr_glGetVertexAttribdv)(GLuint,GLenum,GLdouble *);
|
559
|
+
static VALUE
|
560
|
+
gl_GetVertexAttribdv(obj,arg1,arg2)
|
561
|
+
VALUE obj,arg1,arg2;
|
562
|
+
{
|
563
|
+
GLuint index;
|
564
|
+
GLenum pname;
|
565
|
+
GLdouble params[4] = {0.0,0.0,0.0,0.0};
|
566
|
+
GLint size;
|
567
|
+
GLint i;
|
568
|
+
VALUE retary;
|
569
|
+
LOAD_GL_FUNC(glGetVertexAttribdv)
|
570
|
+
index = (GLuint)NUM2UINT(arg1);
|
571
|
+
pname = (GLenum)NUM2INT(arg2);
|
572
|
+
if (pname==GL_CURRENT_VERTEX_ATTRIB)
|
573
|
+
size = 4;
|
574
|
+
else
|
575
|
+
size = 1;
|
576
|
+
fptr_glGetVertexAttribdv(index,pname,params);
|
577
|
+
retary = rb_ary_new2(size);
|
578
|
+
for(i=0;i<size;i++)
|
579
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
580
|
+
return retary;
|
581
|
+
}
|
582
|
+
|
583
|
+
static void (APIENTRY * fptr_glGetVertexAttribfv)(GLuint,GLenum,GLfloat *);
|
584
|
+
static VALUE
|
585
|
+
gl_GetVertexAttribfv(obj,arg1,arg2)
|
586
|
+
VALUE obj,arg1,arg2;
|
587
|
+
{
|
588
|
+
GLuint index;
|
589
|
+
GLenum pname;
|
590
|
+
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
591
|
+
GLint size;
|
592
|
+
GLint i;
|
593
|
+
VALUE retary;
|
594
|
+
LOAD_GL_FUNC(glGetVertexAttribfv)
|
595
|
+
index = (GLuint)NUM2UINT(arg1);
|
596
|
+
pname = (GLenum)NUM2INT(arg2);
|
597
|
+
if (pname==GL_CURRENT_VERTEX_ATTRIB)
|
598
|
+
size = 4;
|
599
|
+
else
|
600
|
+
size = 1;
|
601
|
+
fptr_glGetVertexAttribfv(index,pname,params);
|
602
|
+
retary = rb_ary_new2(size);
|
603
|
+
for(i=0;i<size;i++)
|
604
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
605
|
+
return retary;
|
606
|
+
}
|
607
|
+
|
608
|
+
static void (APIENTRY * fptr_glGetVertexAttribiv)(GLuint,GLenum,GLint *);
|
609
|
+
static VALUE
|
610
|
+
gl_GetVertexAttribiv(obj,arg1,arg2)
|
611
|
+
VALUE obj,arg1,arg2;
|
612
|
+
{
|
613
|
+
GLuint index;
|
614
|
+
GLenum pname;
|
615
|
+
GLint params[4] = {0,0,0,0};
|
616
|
+
GLint size;
|
617
|
+
GLint i;
|
618
|
+
VALUE retary;
|
619
|
+
LOAD_GL_FUNC(glGetVertexAttribiv)
|
620
|
+
index = (GLuint)NUM2UINT(arg1);
|
621
|
+
pname = (GLenum)NUM2INT(arg2);
|
622
|
+
if (pname==GL_CURRENT_VERTEX_ATTRIB)
|
623
|
+
size = 4;
|
624
|
+
else
|
625
|
+
size = 1;
|
626
|
+
fptr_glGetVertexAttribiv(index,pname,params);
|
627
|
+
retary = rb_ary_new2(size);
|
628
|
+
for(i=0;i<size;i++)
|
629
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
630
|
+
return retary;
|
631
|
+
}
|
632
|
+
|
633
|
+
#define _MAX_VERTEX_ATTRIBS 64 /* at least GL_MAX_VERTEX_ATTRIBS - usually 16 or 32 on today's high-end cards */
|
634
|
+
static VALUE g_VertexAttrib_ptr[_MAX_VERTEX_ATTRIBS];
|
635
|
+
|
636
|
+
static void (APIENTRY * fptr_glGetVertexAttribPointerv)(GLuint,GLenum,GLvoid **);
|
637
|
+
static VALUE
|
638
|
+
gl_GetVertexAttribPointerv(obj,arg1)
|
639
|
+
VALUE obj,arg1;
|
640
|
+
{
|
641
|
+
GLuint index;
|
642
|
+
LOAD_GL_FUNC(glGetVertexAttribPointerv)
|
643
|
+
index =(GLuint) NUM2INT(arg1);
|
644
|
+
if (index>_MAX_VERTEX_ATTRIBS)
|
645
|
+
rb_raise(rb_eArgError, "Index too large, maximum allowed value '%i'",_MAX_VERTEX_ATTRIBS);
|
646
|
+
|
647
|
+
return g_VertexAttrib_ptr[index];
|
648
|
+
}
|
649
|
+
|
650
|
+
static GLboolean (APIENTRY * fptr_glIsProgram)(GLuint);
|
651
|
+
static VALUE
|
652
|
+
gl_IsProgram(obj,arg1)
|
653
|
+
VALUE obj,arg1;
|
654
|
+
{
|
655
|
+
GLuint program;
|
656
|
+
GLboolean ret;
|
657
|
+
LOAD_GL_FUNC(glIsProgram)
|
658
|
+
program = (GLuint)NUM2UINT(arg1);
|
659
|
+
ret = fptr_glIsProgram(program);
|
660
|
+
return INT2NUM(ret);
|
661
|
+
}
|
662
|
+
|
663
|
+
static GLboolean (APIENTRY * fptr_glIsShader)(GLuint);
|
664
|
+
static VALUE
|
665
|
+
gl_IsShader(obj,arg1)
|
666
|
+
VALUE obj,arg1;
|
667
|
+
{
|
668
|
+
GLuint program;
|
669
|
+
GLboolean ret;
|
670
|
+
LOAD_GL_FUNC(glIsShader)
|
671
|
+
program = (GLuint)NUM2UINT(arg1);
|
672
|
+
ret = fptr_glIsShader(program);
|
673
|
+
return INT2NUM(ret);
|
674
|
+
}
|
675
|
+
|
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
|
+
static void (APIENTRY * fptr_glShaderSource)(GLuint,GLsizei,GLchar**,GLint *);
|
689
|
+
static VALUE
|
690
|
+
gl_ShaderSource(obj,arg1,arg2)
|
691
|
+
VALUE obj,arg1,arg2;
|
692
|
+
{
|
693
|
+
GLuint shader;
|
694
|
+
GLint length;
|
695
|
+
GLchar *str;
|
696
|
+
LOAD_GL_FUNC(glShaderSource)
|
697
|
+
shader = (GLuint)NUM2UINT(arg1);
|
698
|
+
Check_Type(arg2,T_STRING);
|
699
|
+
str = RSTRING(arg2)->ptr;
|
700
|
+
length = RSTRING(arg2)->len;
|
701
|
+
fptr_glShaderSource(shader,1,&str,&length);
|
702
|
+
return Qnil;
|
703
|
+
}
|
704
|
+
|
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
|
+
static void (APIENTRY * fptr_glUniform1f)(GLint,GLfloat);
|
718
|
+
static VALUE
|
719
|
+
gl_Uniform1f(obj,arg1,arg2)
|
720
|
+
VALUE obj,arg1,arg2;
|
721
|
+
{
|
722
|
+
GLint location;
|
723
|
+
GLfloat v0;
|
724
|
+
LOAD_GL_FUNC(glUniform1f)
|
725
|
+
location = (GLint)NUM2INT(arg1);
|
726
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
727
|
+
fptr_glUniform1f(location,v0);
|
728
|
+
return Qnil;
|
729
|
+
}
|
730
|
+
|
731
|
+
static void (APIENTRY * fptr_glUniform2f)(GLint,GLfloat,GLfloat);
|
732
|
+
static VALUE
|
733
|
+
gl_Uniform2f(obj,arg1,arg2,arg3)
|
734
|
+
VALUE obj,arg1,arg2,arg3;
|
735
|
+
{
|
736
|
+
GLint location;
|
737
|
+
GLfloat v0;
|
738
|
+
GLfloat v1;
|
739
|
+
LOAD_GL_FUNC(glUniform2f)
|
740
|
+
location = (GLint)NUM2INT(arg1);
|
741
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
742
|
+
v1 = (GLfloat)NUM2DBL(arg3);
|
743
|
+
fptr_glUniform2f(location,v0,v1);
|
744
|
+
return Qnil;
|
745
|
+
}
|
746
|
+
|
747
|
+
static void (APIENTRY * fptr_glUniform3f)(GLint,GLfloat,GLfloat,GLfloat);
|
748
|
+
static VALUE
|
749
|
+
gl_Uniform3f(obj,arg1,arg2,arg3,arg4)
|
750
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
751
|
+
{
|
752
|
+
GLint location;
|
753
|
+
GLfloat v0;
|
754
|
+
GLfloat v1;
|
755
|
+
GLfloat v2;
|
756
|
+
LOAD_GL_FUNC(glUniform3f)
|
757
|
+
location = (GLint)NUM2INT(arg1);
|
758
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
759
|
+
v1 = (GLfloat)NUM2DBL(arg3);
|
760
|
+
v2 = (GLfloat)NUM2DBL(arg4);
|
761
|
+
fptr_glUniform3f(location,v0,v1,v2);
|
762
|
+
return Qnil;
|
763
|
+
}
|
764
|
+
|
765
|
+
static void (APIENTRY * fptr_glUniform4f)(GLint,GLfloat,GLfloat,GLfloat,GLfloat);
|
766
|
+
static VALUE
|
767
|
+
gl_Uniform4f(obj,arg1,arg2,arg3,arg4,arg5)
|
768
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
769
|
+
{
|
770
|
+
GLint location;
|
771
|
+
GLfloat v0;
|
772
|
+
GLfloat v1;
|
773
|
+
GLfloat v2;
|
774
|
+
GLfloat v3;
|
775
|
+
LOAD_GL_FUNC(glUniform4f)
|
776
|
+
location = (GLint)NUM2INT(arg1);
|
777
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
778
|
+
v1 = (GLfloat)NUM2DBL(arg3);
|
779
|
+
v2 = (GLfloat)NUM2DBL(arg4);
|
780
|
+
v3 = (GLfloat)NUM2DBL(arg5);
|
781
|
+
fptr_glUniform4f(location,v0,v1,v2,v3);
|
782
|
+
return Qnil;
|
783
|
+
}
|
784
|
+
|
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
|
+
static void (APIENTRY * fptr_glUniform1fv)(GLint,GLsizei,GLfloat *);
|
854
|
+
static VALUE
|
855
|
+
gl_Uniform1fv(obj,arg1,arg2,arg3)
|
856
|
+
VALUE obj,arg1,arg2,arg3;
|
857
|
+
{
|
858
|
+
GLint location;
|
859
|
+
GLsizei count;
|
860
|
+
GLfloat *value;
|
861
|
+
LOAD_GL_FUNC(glUniform1fv)
|
862
|
+
location = (GLint)NUM2INT(arg1);
|
863
|
+
count = (GLsizei)NUM2UINT(arg2);
|
864
|
+
value = ALLOC_N(GLfloat,1*count);
|
865
|
+
ary2cflt(arg3,value,1*count);
|
866
|
+
fptr_glUniform1fv(location,count,value);
|
867
|
+
xfree(value);
|
868
|
+
return Qnil;
|
869
|
+
}
|
870
|
+
|
871
|
+
static void (APIENTRY * fptr_glUniform2fv)(GLint,GLsizei,GLfloat *);
|
872
|
+
static VALUE
|
873
|
+
gl_Uniform2fv(obj,arg1,arg2,arg3)
|
874
|
+
VALUE obj,arg1,arg2,arg3;
|
875
|
+
{
|
876
|
+
GLint location;
|
877
|
+
GLsizei count;
|
878
|
+
GLfloat *value;
|
879
|
+
LOAD_GL_FUNC(glUniform2fv)
|
880
|
+
location = (GLint)NUM2INT(arg1);
|
881
|
+
count = (GLsizei)NUM2UINT(arg2);
|
882
|
+
value = ALLOC_N(GLfloat,2*count);
|
883
|
+
ary2cflt(arg3,value,2*count);
|
884
|
+
fptr_glUniform2fv(location,count,value);
|
885
|
+
xfree(value);
|
886
|
+
return Qnil;
|
887
|
+
}
|
888
|
+
|
889
|
+
static void (APIENTRY * fptr_glUniform3fv)(GLint,GLsizei,GLfloat *);
|
890
|
+
static VALUE
|
891
|
+
gl_Uniform3fv(obj,arg1,arg2,arg3)
|
892
|
+
VALUE obj,arg1,arg2,arg3;
|
893
|
+
{
|
894
|
+
GLint location;
|
895
|
+
GLsizei count;
|
896
|
+
GLfloat *value;
|
897
|
+
LOAD_GL_FUNC(glUniform3fv)
|
898
|
+
location = (GLint)NUM2INT(arg1);
|
899
|
+
count = (GLsizei)NUM2UINT(arg2);
|
900
|
+
value = ALLOC_N(GLfloat,3*count);
|
901
|
+
ary2cflt(arg3,value,3*count);
|
902
|
+
fptr_glUniform3fv(location,count,value);
|
903
|
+
xfree(value);
|
904
|
+
return Qnil;
|
905
|
+
}
|
906
|
+
|
907
|
+
static void (APIENTRY * fptr_glUniform4fv)(GLint,GLsizei,GLfloat *);
|
908
|
+
static VALUE
|
909
|
+
gl_Uniform4fv(obj,arg1,arg2,arg3)
|
910
|
+
VALUE obj,arg1,arg2,arg3;
|
911
|
+
{
|
912
|
+
GLint location;
|
913
|
+
GLsizei count;
|
914
|
+
GLfloat *value;
|
915
|
+
LOAD_GL_FUNC(glUniform4fv)
|
916
|
+
location = (GLint)NUM2INT(arg1);
|
917
|
+
count = (GLsizei)NUM2UINT(arg2);
|
918
|
+
value = ALLOC_N(GLfloat,4*count);
|
919
|
+
ary2cflt(arg3,value,4*count);
|
920
|
+
fptr_glUniform4fv(location,count,value);
|
921
|
+
xfree(value);
|
922
|
+
return Qnil;
|
923
|
+
}
|
924
|
+
|
925
|
+
static void (APIENTRY * fptr_glUniform1iv)(GLint,GLsizei,GLint *);
|
926
|
+
static VALUE
|
927
|
+
gl_Uniform1iv(obj,arg1,arg2,arg3)
|
928
|
+
VALUE obj,arg1,arg2,arg3;
|
929
|
+
{
|
930
|
+
GLint location;
|
931
|
+
GLsizei count;
|
932
|
+
GLint *value;
|
933
|
+
LOAD_GL_FUNC(glUniform1iv)
|
934
|
+
location = (GLint)NUM2INT(arg1);
|
935
|
+
count = (GLsizei)NUM2UINT(arg2);
|
936
|
+
value = ALLOC_N(GLint,1*count);
|
937
|
+
ary2cint(arg3,value,1*count);
|
938
|
+
fptr_glUniform1iv(location,count,value);
|
939
|
+
xfree(value);
|
940
|
+
return Qnil;
|
941
|
+
}
|
942
|
+
|
943
|
+
static void (APIENTRY * fptr_glUniform2iv)(GLint,GLsizei,GLint *);
|
944
|
+
static VALUE
|
945
|
+
gl_Uniform2iv(obj,arg1,arg2,arg3)
|
946
|
+
VALUE obj,arg1,arg2,arg3;
|
947
|
+
{
|
948
|
+
GLint location;
|
949
|
+
GLsizei count;
|
950
|
+
GLint *value;
|
951
|
+
LOAD_GL_FUNC(glUniform2iv)
|
952
|
+
location = (GLint)NUM2INT(arg1);
|
953
|
+
count = (GLsizei)NUM2UINT(arg2);
|
954
|
+
value = ALLOC_N(GLint,2*count);
|
955
|
+
ary2cint(arg3,value,2*count);
|
956
|
+
fptr_glUniform2iv(location,count,value);
|
957
|
+
xfree(value);
|
958
|
+
return Qnil;
|
959
|
+
}
|
960
|
+
|
961
|
+
static void (APIENTRY * fptr_glUniform3iv)(GLint,GLsizei,GLint *);
|
962
|
+
static VALUE
|
963
|
+
gl_Uniform3iv(obj,arg1,arg2,arg3)
|
964
|
+
VALUE obj,arg1,arg2,arg3;
|
965
|
+
{
|
966
|
+
GLint location;
|
967
|
+
GLsizei count;
|
968
|
+
GLint *value;
|
969
|
+
LOAD_GL_FUNC(glUniform3iv)
|
970
|
+
location = (GLint)NUM2INT(arg1);
|
971
|
+
count = (GLsizei)NUM2UINT(arg2);
|
972
|
+
value = ALLOC_N(GLint,3*count);
|
973
|
+
ary2cint(arg3,value,3*count);
|
974
|
+
fptr_glUniform3iv(location,count,value);
|
975
|
+
xfree(value);
|
976
|
+
return Qnil;
|
977
|
+
}
|
978
|
+
|
979
|
+
static void (APIENTRY * fptr_glUniform4iv)(GLint,GLsizei,GLint *);
|
980
|
+
static VALUE
|
981
|
+
gl_Uniform4iv(obj,arg1,arg2,arg3)
|
982
|
+
VALUE obj,arg1,arg2,arg3;
|
983
|
+
{
|
984
|
+
GLint location;
|
985
|
+
GLsizei count;
|
986
|
+
GLint *value;
|
987
|
+
LOAD_GL_FUNC(glUniform4iv)
|
988
|
+
location = (GLint)NUM2INT(arg1);
|
989
|
+
count = (GLsizei)NUM2UINT(arg2);
|
990
|
+
value = ALLOC_N(GLint,4*count);
|
991
|
+
ary2cint(arg3,value,4*count);
|
992
|
+
fptr_glUniform4iv(location,count,value);
|
993
|
+
xfree(value);
|
994
|
+
return Qnil;
|
995
|
+
}
|
996
|
+
|
997
|
+
static void (APIENTRY * fptr_glUniformMatrix2fv)(GLint,GLsizei,GLboolean,GLfloat *);
|
998
|
+
static VALUE
|
999
|
+
gl_UniformMatrix2fv(obj,arg1,arg2,arg3,arg4)
|
1000
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
1001
|
+
{
|
1002
|
+
GLint location;
|
1003
|
+
GLsizei count;
|
1004
|
+
GLboolean transpose;
|
1005
|
+
GLfloat *value;
|
1006
|
+
LOAD_GL_FUNC(glUniformMatrix2fv)
|
1007
|
+
location = (GLint)NUM2INT(arg1);
|
1008
|
+
count = (GLint)NUM2INT(arg2);
|
1009
|
+
transpose = (GLboolean)NUM2INT(arg3);
|
1010
|
+
value = ALLOC_N(GLfloat, 2*2*count);
|
1011
|
+
ary2cflt(arg4,value,2*2*count);
|
1012
|
+
fptr_glUniformMatrix2fv(location,count,transpose,value);
|
1013
|
+
xfree(value);
|
1014
|
+
return Qnil;
|
1015
|
+
}
|
1016
|
+
|
1017
|
+
static void (APIENTRY * fptr_glUniformMatrix3fv)(GLint,GLsizei,GLboolean,GLfloat *);
|
1018
|
+
static VALUE
|
1019
|
+
gl_UniformMatrix3fv(obj,arg1,arg2,arg3,arg4)
|
1020
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
1021
|
+
{
|
1022
|
+
GLint location;
|
1023
|
+
GLsizei count;
|
1024
|
+
GLboolean transpose;
|
1025
|
+
GLfloat *value;
|
1026
|
+
LOAD_GL_FUNC(glUniformMatrix3fv)
|
1027
|
+
location = (GLint)NUM2INT(arg1);
|
1028
|
+
count = (GLint)NUM2INT(arg2);
|
1029
|
+
transpose = (GLboolean)NUM2INT(arg3);
|
1030
|
+
value = ALLOC_N(GLfloat, 3*3*count);
|
1031
|
+
ary2cflt(arg4,value,3*3*count);
|
1032
|
+
fptr_glUniformMatrix3fv(location,count,transpose,value);
|
1033
|
+
xfree(value);
|
1034
|
+
return Qnil;
|
1035
|
+
}
|
1036
|
+
|
1037
|
+
static void (APIENTRY * fptr_glUniformMatrix4fv)(GLint,GLsizei,GLboolean,GLfloat *);
|
1038
|
+
static VALUE
|
1039
|
+
gl_UniformMatrix4fv(obj,arg1,arg2,arg3,arg4)
|
1040
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
1041
|
+
{
|
1042
|
+
GLint location;
|
1043
|
+
GLsizei count;
|
1044
|
+
GLboolean transpose;
|
1045
|
+
GLfloat *value;
|
1046
|
+
LOAD_GL_FUNC(glUniformMatrix4fv)
|
1047
|
+
location = (GLint)NUM2INT(arg1);
|
1048
|
+
count = (GLint)NUM2INT(arg2);
|
1049
|
+
transpose = (GLboolean)NUM2INT(arg3);
|
1050
|
+
value = ALLOC_N(GLfloat, 4*4*count);
|
1051
|
+
ary2cflt(arg4,value,4*4*count);
|
1052
|
+
fptr_glUniformMatrix4fv(location,count,transpose,value);
|
1053
|
+
xfree(value);
|
1054
|
+
return Qnil;
|
1055
|
+
}
|
1056
|
+
|
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
|
+
static void (APIENTRY * fptr_glVertexAttrib1d)(GLuint,GLdouble);
|
1070
|
+
static VALUE
|
1071
|
+
gl_VertexAttrib1d(obj,arg1,arg2)
|
1072
|
+
VALUE obj,arg1,arg2;
|
1073
|
+
{
|
1074
|
+
GLuint index;
|
1075
|
+
GLdouble v0;
|
1076
|
+
LOAD_GL_FUNC(glVertexAttrib1d)
|
1077
|
+
index = (GLuint)NUM2UINT(arg1);
|
1078
|
+
v0 = (GLdouble)NUM2DBL(arg2);
|
1079
|
+
fptr_glVertexAttrib1d(index,v0);
|
1080
|
+
return Qnil;
|
1081
|
+
}
|
1082
|
+
|
1083
|
+
static void (APIENTRY * fptr_glVertexAttrib1f)(GLuint,GLfloat);
|
1084
|
+
static VALUE
|
1085
|
+
gl_VertexAttrib1f(obj,arg1,arg2)
|
1086
|
+
VALUE obj,arg1,arg2;
|
1087
|
+
{
|
1088
|
+
GLuint index;
|
1089
|
+
GLfloat v0;
|
1090
|
+
LOAD_GL_FUNC(glVertexAttrib1f)
|
1091
|
+
index = (GLuint)NUM2UINT(arg1);
|
1092
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
1093
|
+
fptr_glVertexAttrib1f(index,v0);
|
1094
|
+
return Qnil;
|
1095
|
+
}
|
1096
|
+
|
1097
|
+
static void (APIENTRY * fptr_glVertexAttrib1s)(GLuint,GLshort);
|
1098
|
+
static VALUE
|
1099
|
+
gl_VertexAttrib1s(obj,arg1,arg2)
|
1100
|
+
VALUE obj,arg1,arg2;
|
1101
|
+
{
|
1102
|
+
GLuint index;
|
1103
|
+
GLshort v0;
|
1104
|
+
LOAD_GL_FUNC(glVertexAttrib1s)
|
1105
|
+
index = (GLuint)NUM2UINT(arg1);
|
1106
|
+
v0 = (GLshort)NUM2INT(arg2);
|
1107
|
+
fptr_glVertexAttrib1s(index,v0);
|
1108
|
+
return Qnil;
|
1109
|
+
}
|
1110
|
+
|
1111
|
+
static void (APIENTRY * fptr_glVertexAttrib2d)(GLuint,GLdouble,GLdouble);
|
1112
|
+
static VALUE
|
1113
|
+
gl_VertexAttrib2d(obj,arg1,arg2,arg3)
|
1114
|
+
VALUE obj,arg1,arg2,arg3;
|
1115
|
+
{
|
1116
|
+
GLuint index;
|
1117
|
+
GLdouble v0;
|
1118
|
+
GLdouble v1;
|
1119
|
+
LOAD_GL_FUNC(glVertexAttrib2d)
|
1120
|
+
index = (GLuint)NUM2UINT(arg1);
|
1121
|
+
v0 = (GLdouble)NUM2DBL(arg2);
|
1122
|
+
v1 = (GLdouble)NUM2DBL(arg3);
|
1123
|
+
fptr_glVertexAttrib2d(index,v0,v1);
|
1124
|
+
return Qnil;
|
1125
|
+
}
|
1126
|
+
|
1127
|
+
static void (APIENTRY * fptr_glVertexAttrib2f)(GLuint,GLfloat,GLfloat);
|
1128
|
+
static VALUE
|
1129
|
+
gl_VertexAttrib2f(obj,arg1,arg2,arg3)
|
1130
|
+
VALUE obj,arg1,arg2,arg3;
|
1131
|
+
{
|
1132
|
+
GLuint index;
|
1133
|
+
GLfloat v0;
|
1134
|
+
GLfloat v1;
|
1135
|
+
LOAD_GL_FUNC(glVertexAttrib2f)
|
1136
|
+
index = (GLuint)NUM2UINT(arg1);
|
1137
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
1138
|
+
v1 = (GLfloat)NUM2DBL(arg3);
|
1139
|
+
fptr_glVertexAttrib2f(index,v0,v1);
|
1140
|
+
return Qnil;
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
static void (APIENTRY * fptr_glVertexAttrib2s)(GLuint,GLshort,GLshort);
|
1144
|
+
static VALUE
|
1145
|
+
gl_VertexAttrib2s(obj,arg1,arg2,arg3)
|
1146
|
+
VALUE obj,arg1,arg2,arg3;
|
1147
|
+
{
|
1148
|
+
GLuint index;
|
1149
|
+
GLshort v0;
|
1150
|
+
GLshort v1;
|
1151
|
+
LOAD_GL_FUNC(glVertexAttrib2s)
|
1152
|
+
index = (GLuint)NUM2UINT(arg1);
|
1153
|
+
v0 = (GLshort)NUM2INT(arg2);
|
1154
|
+
v1 = (GLshort)NUM2INT(arg3);
|
1155
|
+
fptr_glVertexAttrib2s(index,v0,v1);
|
1156
|
+
return Qnil;
|
1157
|
+
}
|
1158
|
+
|
1159
|
+
static void (APIENTRY * fptr_glVertexAttrib3d)(GLuint,GLdouble,GLdouble,GLdouble);
|
1160
|
+
static VALUE
|
1161
|
+
gl_VertexAttrib3d(obj,arg1,arg2,arg3,arg4)
|
1162
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
1163
|
+
{
|
1164
|
+
GLuint index;
|
1165
|
+
GLdouble v0;
|
1166
|
+
GLdouble v1;
|
1167
|
+
GLdouble v2;
|
1168
|
+
LOAD_GL_FUNC(glVertexAttrib3d)
|
1169
|
+
index = (GLuint)NUM2UINT(arg1);
|
1170
|
+
v0 = (GLdouble)NUM2DBL(arg2);
|
1171
|
+
v1 = (GLdouble)NUM2DBL(arg3);
|
1172
|
+
v2 = (GLdouble)NUM2DBL(arg4);
|
1173
|
+
fptr_glVertexAttrib3d(index,v0,v1,v2);
|
1174
|
+
return Qnil;
|
1175
|
+
}
|
1176
|
+
|
1177
|
+
static void (APIENTRY * fptr_glVertexAttrib3f)(GLuint,GLfloat,GLfloat,GLfloat);
|
1178
|
+
static VALUE
|
1179
|
+
gl_VertexAttrib3f(obj,arg1,arg2,arg3,arg4)
|
1180
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
1181
|
+
{
|
1182
|
+
GLuint index;
|
1183
|
+
GLfloat v0;
|
1184
|
+
GLfloat v1;
|
1185
|
+
GLfloat v2;
|
1186
|
+
LOAD_GL_FUNC(glVertexAttrib3f)
|
1187
|
+
index = (GLuint)NUM2UINT(arg1);
|
1188
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
1189
|
+
v1 = (GLfloat)NUM2DBL(arg3);
|
1190
|
+
v2 = (GLfloat)NUM2DBL(arg4);
|
1191
|
+
fptr_glVertexAttrib3f(index,v0,v1,v2);
|
1192
|
+
return Qnil;
|
1193
|
+
}
|
1194
|
+
|
1195
|
+
static void (APIENTRY * fptr_glVertexAttrib3s)(GLuint,GLshort,GLshort,GLshort);
|
1196
|
+
static VALUE
|
1197
|
+
gl_VertexAttrib3s(obj,arg1,arg2,arg3,arg4)
|
1198
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
1199
|
+
{
|
1200
|
+
GLuint index;
|
1201
|
+
GLshort v0;
|
1202
|
+
GLshort v1;
|
1203
|
+
GLshort v2;
|
1204
|
+
LOAD_GL_FUNC(glVertexAttrib3s)
|
1205
|
+
index = (GLuint)NUM2UINT(arg1);
|
1206
|
+
v0 = (GLshort)NUM2INT(arg2);
|
1207
|
+
v1 = (GLshort)NUM2INT(arg3);
|
1208
|
+
v2 = (GLshort)NUM2INT(arg4);
|
1209
|
+
fptr_glVertexAttrib3s(index,v0,v1,v2);
|
1210
|
+
return Qnil;
|
1211
|
+
}
|
1212
|
+
|
1213
|
+
static void (APIENTRY * fptr_glVertexAttrib4Nbv)(GLuint,GLbyte *);
|
1214
|
+
static VALUE
|
1215
|
+
gl_VertexAttrib4Nbv(obj,arg1,arg2)
|
1216
|
+
VALUE obj,arg1,arg2;
|
1217
|
+
{
|
1218
|
+
GLuint index;
|
1219
|
+
GLbyte v[4];
|
1220
|
+
LOAD_GL_FUNC(glVertexAttrib4Nbv)
|
1221
|
+
index = (GLuint)NUM2UINT(arg1);
|
1222
|
+
ary2cbyte(arg2,v,4);
|
1223
|
+
fptr_glVertexAttrib4Nbv(index,v);
|
1224
|
+
return Qnil;
|
1225
|
+
}
|
1226
|
+
|
1227
|
+
static void (APIENTRY * fptr_glVertexAttrib4Niv)(GLuint,GLint *);
|
1228
|
+
static VALUE
|
1229
|
+
gl_VertexAttrib4Niv(obj,arg1,arg2)
|
1230
|
+
VALUE obj,arg1,arg2;
|
1231
|
+
{
|
1232
|
+
GLuint index;
|
1233
|
+
GLint v[4];
|
1234
|
+
LOAD_GL_FUNC(glVertexAttrib4Niv)
|
1235
|
+
index = (GLuint)NUM2UINT(arg1);
|
1236
|
+
ary2cint(arg2,v,4);
|
1237
|
+
fptr_glVertexAttrib4Niv(index,v);
|
1238
|
+
return Qnil;
|
1239
|
+
}
|
1240
|
+
|
1241
|
+
static void (APIENTRY * fptr_glVertexAttrib4Nsv)(GLuint,GLshort *);
|
1242
|
+
static VALUE
|
1243
|
+
gl_VertexAttrib4Nsv(obj,arg1,arg2)
|
1244
|
+
VALUE obj,arg1,arg2;
|
1245
|
+
{
|
1246
|
+
GLuint index;
|
1247
|
+
GLshort v[4];
|
1248
|
+
LOAD_GL_FUNC(glVertexAttrib4Nsv)
|
1249
|
+
index = (GLuint)NUM2UINT(arg1);
|
1250
|
+
ary2cshort(arg2,v,4);
|
1251
|
+
fptr_glVertexAttrib4Nsv(index,v);
|
1252
|
+
return Qnil;
|
1253
|
+
}
|
1254
|
+
|
1255
|
+
static void (APIENTRY * fptr_glVertexAttrib4Nub)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
|
1256
|
+
static VALUE
|
1257
|
+
gl_VertexAttrib4Nub(obj,arg1,arg2,arg3,arg4,arg5)
|
1258
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
1259
|
+
{
|
1260
|
+
GLuint index;
|
1261
|
+
GLubyte v0;
|
1262
|
+
GLubyte v1;
|
1263
|
+
GLubyte v2;
|
1264
|
+
GLubyte v3;
|
1265
|
+
LOAD_GL_FUNC(glVertexAttrib4Nub)
|
1266
|
+
index = (GLuint)NUM2UINT(arg1);
|
1267
|
+
v0 = (GLubyte)NUM2INT(arg2);
|
1268
|
+
v1 = (GLubyte)NUM2INT(arg3);
|
1269
|
+
v2 = (GLubyte)NUM2INT(arg4);
|
1270
|
+
v3 = (GLubyte)NUM2INT(arg5);
|
1271
|
+
fptr_glVertexAttrib4Nub(index,v0,v1,v2,v3);
|
1272
|
+
return Qnil;
|
1273
|
+
}
|
1274
|
+
|
1275
|
+
static void (APIENTRY * fptr_glVertexAttrib4Nubv)(GLuint,GLubyte *);
|
1276
|
+
static VALUE
|
1277
|
+
gl_VertexAttrib4Nubv(obj,arg1,arg2)
|
1278
|
+
VALUE obj,arg1,arg2;
|
1279
|
+
{
|
1280
|
+
GLuint index;
|
1281
|
+
GLubyte v[4];
|
1282
|
+
LOAD_GL_FUNC(glVertexAttrib4Nubv)
|
1283
|
+
index = (GLuint)NUM2UINT(arg1);
|
1284
|
+
ary2cubyte(arg2,v,4);
|
1285
|
+
fptr_glVertexAttrib4Nubv(index,v);
|
1286
|
+
return Qnil;
|
1287
|
+
}
|
1288
|
+
|
1289
|
+
static void (APIENTRY * fptr_glVertexAttrib4Nuiv)(GLuint,GLuint *);
|
1290
|
+
static VALUE
|
1291
|
+
gl_VertexAttrib4Nuiv(obj,arg1,arg2)
|
1292
|
+
VALUE obj,arg1,arg2;
|
1293
|
+
{
|
1294
|
+
GLuint index;
|
1295
|
+
GLuint v[4];
|
1296
|
+
LOAD_GL_FUNC(glVertexAttrib4Nuiv)
|
1297
|
+
index = (GLuint)NUM2UINT(arg1);
|
1298
|
+
ary2cuint(arg2,v,4);
|
1299
|
+
fptr_glVertexAttrib4Nuiv(index,v);
|
1300
|
+
return Qnil;
|
1301
|
+
}
|
1302
|
+
|
1303
|
+
static void (APIENTRY * fptr_glVertexAttrib4Nusv)(GLuint,GLushort *);
|
1304
|
+
static VALUE
|
1305
|
+
gl_VertexAttrib4Nusv(obj,arg1,arg2)
|
1306
|
+
VALUE obj,arg1,arg2;
|
1307
|
+
{
|
1308
|
+
GLuint index;
|
1309
|
+
GLushort v[4];
|
1310
|
+
LOAD_GL_FUNC(glVertexAttrib4Nusv)
|
1311
|
+
index = (GLuint)NUM2UINT(arg1);
|
1312
|
+
ary2cushort(arg2,v,4);
|
1313
|
+
fptr_glVertexAttrib4Nusv(index,v);
|
1314
|
+
return Qnil;
|
1315
|
+
}
|
1316
|
+
|
1317
|
+
static void (APIENTRY * fptr_glVertexAttrib4bv)(GLuint,GLbyte *);
|
1318
|
+
static VALUE
|
1319
|
+
gl_VertexAttrib4bv(obj,arg1,arg2)
|
1320
|
+
VALUE obj,arg1,arg2;
|
1321
|
+
{
|
1322
|
+
GLuint index;
|
1323
|
+
GLbyte v[4];
|
1324
|
+
LOAD_GL_FUNC(glVertexAttrib4bv)
|
1325
|
+
index = (GLuint)NUM2UINT(arg1);
|
1326
|
+
ary2cbyte(arg2,v,4);
|
1327
|
+
fptr_glVertexAttrib4bv(index,v);
|
1328
|
+
return Qnil;
|
1329
|
+
}
|
1330
|
+
|
1331
|
+
static void (APIENTRY * fptr_glVertexAttrib4d)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
|
1332
|
+
static VALUE
|
1333
|
+
gl_VertexAttrib4d(obj,arg1,arg2,arg3,arg4,arg5)
|
1334
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
1335
|
+
{
|
1336
|
+
GLuint index;
|
1337
|
+
GLdouble v0;
|
1338
|
+
GLdouble v1;
|
1339
|
+
GLdouble v2;
|
1340
|
+
GLdouble v3;
|
1341
|
+
LOAD_GL_FUNC(glVertexAttrib4d)
|
1342
|
+
index = (GLuint)NUM2UINT(arg1);
|
1343
|
+
v0 = (GLdouble)NUM2DBL(arg2);
|
1344
|
+
v1 = (GLdouble)NUM2DBL(arg3);
|
1345
|
+
v2 = (GLdouble)NUM2DBL(arg4);
|
1346
|
+
v3 = (GLdouble)NUM2DBL(arg5);
|
1347
|
+
fptr_glVertexAttrib4d(index,v0,v1,v2,v3);
|
1348
|
+
return Qnil;
|
1349
|
+
}
|
1350
|
+
|
1351
|
+
static void (APIENTRY * fptr_glVertexAttrib4f)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
|
1352
|
+
static VALUE
|
1353
|
+
gl_VertexAttrib4f(obj,arg1,arg2,arg3,arg4,arg5)
|
1354
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
1355
|
+
{
|
1356
|
+
GLuint index;
|
1357
|
+
GLfloat v0;
|
1358
|
+
GLfloat v1;
|
1359
|
+
GLfloat v2;
|
1360
|
+
GLfloat v3;
|
1361
|
+
LOAD_GL_FUNC(glVertexAttrib4f)
|
1362
|
+
index = (GLuint)NUM2UINT(arg1);
|
1363
|
+
v0 = (GLfloat)NUM2DBL(arg2);
|
1364
|
+
v1 = (GLfloat)NUM2DBL(arg3);
|
1365
|
+
v2 = (GLfloat)NUM2DBL(arg4);
|
1366
|
+
v3 = (GLfloat)NUM2DBL(arg5);
|
1367
|
+
fptr_glVertexAttrib4f(index,v0,v1,v2,v3);
|
1368
|
+
return Qnil;
|
1369
|
+
}
|
1370
|
+
|
1371
|
+
static void (APIENTRY * fptr_glVertexAttrib4iv)(GLuint,GLint *);
|
1372
|
+
static VALUE
|
1373
|
+
gl_VertexAttrib4iv(obj,arg1,arg2)
|
1374
|
+
VALUE obj,arg1,arg2;
|
1375
|
+
{
|
1376
|
+
GLuint index;
|
1377
|
+
GLint v[4];
|
1378
|
+
LOAD_GL_FUNC(glVertexAttrib4iv)
|
1379
|
+
index = (GLuint)NUM2UINT(arg1);
|
1380
|
+
ary2cint(arg2,v,4);
|
1381
|
+
fptr_glVertexAttrib4iv(index,v);
|
1382
|
+
return Qnil;
|
1383
|
+
}
|
1384
|
+
|
1385
|
+
static void (APIENTRY * fptr_glVertexAttrib4s)(GLuint,GLshort,GLshort,GLshort,GLshort);
|
1386
|
+
static VALUE
|
1387
|
+
gl_VertexAttrib4s(obj,arg1,arg2,arg3,arg4,arg5)
|
1388
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
1389
|
+
{
|
1390
|
+
GLuint index;
|
1391
|
+
GLshort v0;
|
1392
|
+
GLshort v1;
|
1393
|
+
GLshort v2;
|
1394
|
+
GLshort v3;
|
1395
|
+
LOAD_GL_FUNC(glVertexAttrib4s)
|
1396
|
+
index = (GLuint)NUM2UINT(arg1);
|
1397
|
+
v0 = (GLshort)NUM2INT(arg2);
|
1398
|
+
v1 = (GLshort)NUM2INT(arg3);
|
1399
|
+
v2 = (GLshort)NUM2INT(arg4);
|
1400
|
+
v3 = (GLshort)NUM2INT(arg5);
|
1401
|
+
fptr_glVertexAttrib4s(index,v0,v1,v2,v3);
|
1402
|
+
return Qnil;
|
1403
|
+
}
|
1404
|
+
|
1405
|
+
static void (APIENTRY * fptr_glVertexAttrib4ubv)(GLuint,GLubyte *);
|
1406
|
+
static VALUE
|
1407
|
+
gl_VertexAttrib4ubv(obj,arg1,arg2)
|
1408
|
+
VALUE obj,arg1,arg2;
|
1409
|
+
{
|
1410
|
+
GLuint index;
|
1411
|
+
GLubyte v[4];
|
1412
|
+
LOAD_GL_FUNC(glVertexAttrib4ubv)
|
1413
|
+
index = (GLuint)NUM2UINT(arg1);
|
1414
|
+
ary2cubyte(arg2,v,4);
|
1415
|
+
fptr_glVertexAttrib4ubv(index,v);
|
1416
|
+
return Qnil;
|
1417
|
+
}
|
1418
|
+
|
1419
|
+
static void (APIENTRY * fptr_glVertexAttrib4uiv)(GLuint,GLuint *);
|
1420
|
+
static VALUE
|
1421
|
+
gl_VertexAttrib4uiv(obj,arg1,arg2)
|
1422
|
+
VALUE obj,arg1,arg2;
|
1423
|
+
{
|
1424
|
+
GLuint index;
|
1425
|
+
GLuint v[4];
|
1426
|
+
LOAD_GL_FUNC(glVertexAttrib4uiv)
|
1427
|
+
index = (GLuint)NUM2UINT(arg1);
|
1428
|
+
ary2cuint(arg2,v,4);
|
1429
|
+
fptr_glVertexAttrib4uiv(index,v);
|
1430
|
+
return Qnil;
|
1431
|
+
}
|
1432
|
+
|
1433
|
+
static void (APIENTRY * fptr_glVertexAttrib4usv)(GLuint,GLushort *);
|
1434
|
+
static VALUE
|
1435
|
+
gl_VertexAttrib4usv(obj,arg1,arg2)
|
1436
|
+
VALUE obj,arg1,arg2;
|
1437
|
+
{
|
1438
|
+
GLuint index;
|
1439
|
+
GLushort v[4];
|
1440
|
+
LOAD_GL_FUNC(glVertexAttrib4usv)
|
1441
|
+
index = (GLuint)NUM2UINT(arg1);
|
1442
|
+
ary2cushort(arg2,v,4);
|
1443
|
+
fptr_glVertexAttrib4usv(index,v);
|
1444
|
+
return Qnil;
|
1445
|
+
}
|
1446
|
+
|
1447
|
+
#define GLVERTEXATTRIB_VFUNC(_type_) \
|
1448
|
+
static VALUE \
|
1449
|
+
gl_VertexAttrib##_type_##v(argc,argv,obj) \
|
1450
|
+
int argc; \
|
1451
|
+
VALUE *argv; \
|
1452
|
+
VALUE obj; \
|
1453
|
+
{ \
|
1454
|
+
VALUE args[5]; \
|
1455
|
+
RArray *ary; \
|
1456
|
+
switch (rb_scan_args(argc, argv, "23", &args[0], &args[1], &args[2], &args[3], &args[4])) { \
|
1457
|
+
case 2: \
|
1458
|
+
if (TYPE(args[1]) == T_ARRAY) { \
|
1459
|
+
ary = RARRAY(args[1]); \
|
1460
|
+
switch (ary->len) { \
|
1461
|
+
case 1: \
|
1462
|
+
gl_VertexAttrib1##_type_(obj,args[0],ary->ptr[0]); \
|
1463
|
+
break; \
|
1464
|
+
case 2: \
|
1465
|
+
gl_VertexAttrib2##_type_(obj,args[0],ary->ptr[0],ary->ptr[1]); \
|
1466
|
+
break; \
|
1467
|
+
case 3: \
|
1468
|
+
gl_VertexAttrib3##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
|
1469
|
+
break; \
|
1470
|
+
case 4: \
|
1471
|
+
gl_VertexAttrib4##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
|
1472
|
+
break; \
|
1473
|
+
default: \
|
1474
|
+
rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%d", ary->len); \
|
1475
|
+
} \
|
1476
|
+
} \
|
1477
|
+
else { \
|
1478
|
+
gl_VertexAttrib1##_type_(obj,args[0], args[1]); \
|
1479
|
+
break; \
|
1480
|
+
} \
|
1481
|
+
break; \
|
1482
|
+
case 3: \
|
1483
|
+
gl_VertexAttrib2##_type_(obj,args[0], args[1], args[2]); \
|
1484
|
+
break; \
|
1485
|
+
case 4: \
|
1486
|
+
gl_VertexAttrib3##_type_(obj,args[0], args[1], args[2], args[3]); \
|
1487
|
+
break; \
|
1488
|
+
case 5: \
|
1489
|
+
gl_VertexAttrib4##_type_(obj,args[0], args[1], args[2], args[3], args[4]); \
|
1490
|
+
break; \
|
1491
|
+
default: \
|
1492
|
+
rb_raise(rb_eArgError, "Argument number error!"); \
|
1493
|
+
break; \
|
1494
|
+
} \
|
1495
|
+
return Qnil; \
|
1496
|
+
}
|
1497
|
+
|
1498
|
+
GLVERTEXATTRIB_VFUNC(d)
|
1499
|
+
GLVERTEXATTRIB_VFUNC(f)
|
1500
|
+
GLVERTEXATTRIB_VFUNC(s)
|
1501
|
+
|
1502
|
+
#undef GLVERTEXATTRIB_VFUNC
|
1503
|
+
|
1504
|
+
static void (APIENTRY * fptr_glVertexAttribPointer)(GLuint,GLint,GLenum,GLboolean,GLsizei,GLvoid *);
|
1505
|
+
static VALUE
|
1506
|
+
gl_VertexAttribPointer(obj,arg1,arg2,arg3,arg4,arg5,arg6)
|
1507
|
+
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
1508
|
+
{
|
1509
|
+
GLuint index;
|
1510
|
+
GLuint size;
|
1511
|
+
GLenum type;
|
1512
|
+
GLboolean normalized;
|
1513
|
+
GLsizei stride;
|
1514
|
+
LOAD_GL_FUNC(glVertexAttribPointer)
|
1515
|
+
index = (GLuint)NUM2UINT(arg1);
|
1516
|
+
size = (GLuint)NUM2UINT(arg2);
|
1517
|
+
type = (GLenum)NUM2INT(arg3);
|
1518
|
+
normalized = (GLboolean)NUM2INT(arg4);
|
1519
|
+
stride = (GLsizei)NUM2UINT(arg5);
|
1520
|
+
if (index>_MAX_VERTEX_ATTRIBS)
|
1521
|
+
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);
|
1526
|
+
return Qnil;
|
1527
|
+
}
|
1528
|
+
|
1529
|
+
void gl_init_functions_2_0(VALUE module)
|
1530
|
+
{
|
1531
|
+
rb_define_module_function(module, "glBlendEquationSeparate", gl_BlendEquationSeparate, 2);
|
1532
|
+
rb_define_module_function(module, "glDrawBuffers", gl_DrawBuffers, 1);
|
1533
|
+
rb_define_module_function(module, "glStencilOpSeparate", gl_StencilOpSeparate, 4);
|
1534
|
+
rb_define_module_function(module, "glStencilFuncSeparate", gl_StencilFuncSeparate, 4);
|
1535
|
+
rb_define_module_function(module, "glStencilMaskSeparate", gl_StencilMaskSeparate, 2);
|
1536
|
+
rb_define_module_function(module, "glAttachShader", gl_AttachShader, 2);
|
1537
|
+
rb_define_module_function(module, "glBindAttribLocation", gl_BindAttribLocation, 3);
|
1538
|
+
rb_define_module_function(module, "glCompileShader", gl_CompileShader, 1);
|
1539
|
+
rb_define_module_function(module, "glCreateProgram", gl_CreateProgram, 0);
|
1540
|
+
rb_define_module_function(module, "glCreateShader", gl_CreateShader, 1);
|
1541
|
+
rb_define_module_function(module, "glDeleteProgram", gl_DeleteProgram, 1);
|
1542
|
+
rb_define_module_function(module, "glDeleteShader", gl_DeleteShader, 1);
|
1543
|
+
rb_define_module_function(module, "glDetachShader", gl_DetachShader, 2);
|
1544
|
+
rb_define_module_function(module, "glDisableVertexAttribArray", gl_DisableVertexAttribArray, 1);
|
1545
|
+
rb_define_module_function(module, "glEnableVertexAttribArray", gl_EnableVertexAttribArray, 1);
|
1546
|
+
rb_define_module_function(module, "glGetActiveAttrib", gl_GetActiveAttrib, 2);
|
1547
|
+
rb_define_module_function(module, "glGetActiveUniform", gl_GetActiveUniform, 2);
|
1548
|
+
rb_define_module_function(module, "glGetAttachedShaders", gl_GetAttachedShaders, 1);
|
1549
|
+
rb_define_module_function(module, "glGetAttribLocation", gl_GetAttribLocation, 2);
|
1550
|
+
rb_define_module_function(module, "glGetProgramiv", gl_GetProgramiv, 2);
|
1551
|
+
rb_define_module_function(module, "glGetProgramInfoLog", gl_GetProgramInfoLog, 1);
|
1552
|
+
rb_define_module_function(module, "glGetShaderiv", gl_GetShaderiv, 2);
|
1553
|
+
rb_define_module_function(module, "glGetShaderInfoLog", gl_GetShaderInfoLog, 1);
|
1554
|
+
rb_define_module_function(module, "glGetShaderSource", gl_GetShaderSource, 1);
|
1555
|
+
rb_define_module_function(module, "glGetUniformLocation", gl_GetUniformLocation, 2);
|
1556
|
+
rb_define_module_function(module, "glGetUniformfv", gl_GetUniformfv, 2);
|
1557
|
+
rb_define_module_function(module, "glGetUniformiv", gl_GetUniformiv, 2);
|
1558
|
+
rb_define_module_function(module, "glGetVertexAttribdv", gl_GetVertexAttribdv, 2);
|
1559
|
+
rb_define_module_function(module, "glGetVertexAttribfv", gl_GetVertexAttribfv, 2);
|
1560
|
+
rb_define_module_function(module, "glGetVertexAttribiv", gl_GetVertexAttribiv, 2);
|
1561
|
+
rb_define_module_function(module, "glGetVertexAttribPointerv", gl_GetVertexAttribPointerv, 1);
|
1562
|
+
rb_define_module_function(module, "glIsProgram", gl_IsProgram, 1);
|
1563
|
+
rb_define_module_function(module, "glIsShader", gl_IsShader, 1);
|
1564
|
+
rb_define_module_function(module, "glLinkProgram", gl_LinkProgram, 1);
|
1565
|
+
rb_define_module_function(module, "glShaderSource", gl_ShaderSource, 2);
|
1566
|
+
rb_define_module_function(module, "glUseProgram", gl_UseProgram, 1);
|
1567
|
+
rb_define_module_function(module, "glUniform1f", gl_Uniform1f, 2);
|
1568
|
+
rb_define_module_function(module, "glUniform2f", gl_Uniform2f, 3);
|
1569
|
+
rb_define_module_function(module, "glUniform3f", gl_Uniform3f, 4);
|
1570
|
+
rb_define_module_function(module, "glUniform4f", gl_Uniform4f, 5);
|
1571
|
+
rb_define_module_function(module, "glUniform1i", gl_Uniform1i, 2);
|
1572
|
+
rb_define_module_function(module, "glUniform2i", gl_Uniform2i, 3);
|
1573
|
+
rb_define_module_function(module, "glUniform3i", gl_Uniform3i, 4);
|
1574
|
+
rb_define_module_function(module, "glUniform4i", gl_Uniform4i, 5);
|
1575
|
+
rb_define_module_function(module, "glUniform1fv", gl_Uniform1fv, 3);
|
1576
|
+
rb_define_module_function(module, "glUniform2fv", gl_Uniform2fv, 3);
|
1577
|
+
rb_define_module_function(module, "glUniform3fv", gl_Uniform3fv, 3);
|
1578
|
+
rb_define_module_function(module, "glUniform4fv", gl_Uniform4fv, 3);
|
1579
|
+
rb_define_module_function(module, "glUniform1iv", gl_Uniform1iv, 3);
|
1580
|
+
rb_define_module_function(module, "glUniform2iv", gl_Uniform2iv, 3);
|
1581
|
+
rb_define_module_function(module, "glUniform3iv", gl_Uniform3iv, 3);
|
1582
|
+
rb_define_module_function(module, "glUniform4iv", gl_Uniform4iv, 3);
|
1583
|
+
rb_define_module_function(module, "glUniformMatrix2fv", gl_UniformMatrix2fv, 4);
|
1584
|
+
rb_define_module_function(module, "glUniformMatrix3fv", gl_UniformMatrix3fv, 4);
|
1585
|
+
rb_define_module_function(module, "glUniformMatrix4fv", gl_UniformMatrix4fv, 4);
|
1586
|
+
rb_define_module_function(module, "glValidateProgram", gl_ValidateProgram, 1);
|
1587
|
+
rb_define_module_function(module, "glVertexAttrib1d", gl_VertexAttrib1d, 2);
|
1588
|
+
rb_define_module_function(module, "glVertexAttrib1f", gl_VertexAttrib1f, 2);
|
1589
|
+
rb_define_module_function(module, "glVertexAttrib1s", gl_VertexAttrib1s, 2);
|
1590
|
+
rb_define_module_function(module, "glVertexAttrib2d", gl_VertexAttrib2d, 3);
|
1591
|
+
rb_define_module_function(module, "glVertexAttrib2f", gl_VertexAttrib2f, 3);
|
1592
|
+
rb_define_module_function(module, "glVertexAttrib2s", gl_VertexAttrib2s, 3);
|
1593
|
+
rb_define_module_function(module, "glVertexAttrib3d", gl_VertexAttrib3d, 4);
|
1594
|
+
rb_define_module_function(module, "glVertexAttrib3f", gl_VertexAttrib3f, 4);
|
1595
|
+
rb_define_module_function(module, "glVertexAttrib3s", gl_VertexAttrib3s, 4);
|
1596
|
+
rb_define_module_function(module, "glVertexAttrib4Nbv", gl_VertexAttrib4Nbv, 2);
|
1597
|
+
rb_define_module_function(module, "glVertexAttrib4Niv", gl_VertexAttrib4Niv, 2);
|
1598
|
+
rb_define_module_function(module, "glVertexAttrib4Nsv", gl_VertexAttrib4Nsv, 2);
|
1599
|
+
rb_define_module_function(module, "glVertexAttrib4Nub", gl_VertexAttrib4Nub, 5);
|
1600
|
+
rb_define_module_function(module, "glVertexAttrib4Nubv", gl_VertexAttrib4Nubv, 2);
|
1601
|
+
rb_define_module_function(module, "glVertexAttrib4Nuiv", gl_VertexAttrib4Nuiv, 2);
|
1602
|
+
rb_define_module_function(module, "glVertexAttrib4Nusv", gl_VertexAttrib4Nusv, 2);
|
1603
|
+
rb_define_module_function(module, "glVertexAttrib4bv", gl_VertexAttrib4bv, 2);
|
1604
|
+
rb_define_module_function(module, "glVertexAttrib4d", gl_VertexAttrib4d, 5);
|
1605
|
+
rb_define_module_function(module, "glVertexAttrib4f", gl_VertexAttrib4f, 5);
|
1606
|
+
rb_define_module_function(module, "glVertexAttrib4iv", gl_VertexAttrib4iv, 2);
|
1607
|
+
rb_define_module_function(module, "glVertexAttrib4s", gl_VertexAttrib4s, 5);
|
1608
|
+
rb_define_module_function(module, "glVertexAttrib4ubv", gl_VertexAttrib4ubv, 2);
|
1609
|
+
rb_define_module_function(module, "glVertexAttrib4uiv", gl_VertexAttrib4uiv, 2);
|
1610
|
+
rb_define_module_function(module, "glVertexAttrib4usv", gl_VertexAttrib4usv, 2);
|
1611
|
+
rb_define_module_function(module, "glVertexAttribPointer", gl_VertexAttribPointer, 6);
|
1612
|
+
|
1613
|
+
/* Additional functions */
|
1614
|
+
rb_define_module_function(module, "glVertexAttrib1dv", gl_VertexAttribdv, -1);
|
1615
|
+
rb_define_module_function(module, "glVertexAttrib1fv", gl_VertexAttribfv, -1);
|
1616
|
+
rb_define_module_function(module, "glVertexAttrib1sv", gl_VertexAttribsv, -1);
|
1617
|
+
rb_define_module_function(module, "glVertexAttrib2dv", gl_VertexAttribdv, -1);
|
1618
|
+
rb_define_module_function(module, "glVertexAttrib2fv", gl_VertexAttribfv, -1);
|
1619
|
+
rb_define_module_function(module, "glVertexAttrib2sv", gl_VertexAttribsv, -1);
|
1620
|
+
rb_define_module_function(module, "glVertexAttrib3dv", gl_VertexAttribdv, -1);
|
1621
|
+
rb_define_module_function(module, "glVertexAttrib3fv", gl_VertexAttribfv, -1);
|
1622
|
+
rb_define_module_function(module, "glVertexAttrib3sv", gl_VertexAttribsv, -1);
|
1623
|
+
rb_define_module_function(module, "glVertexAttrib4dv", gl_VertexAttribdv, -1);
|
1624
|
+
rb_define_module_function(module, "glVertexAttrib4fv", gl_VertexAttribfv, -1);
|
1625
|
+
rb_define_module_function(module, "glVertexAttrib4sv", gl_VertexAttribsv, -1);
|
1626
|
+
|
1627
|
+
{
|
1628
|
+
int i;
|
1629
|
+
for (i=0;i<_MAX_VERTEX_ATTRIBS;i++)
|
1630
|
+
rb_global_variable(&g_VertexAttrib_ptr[i]);
|
1631
|
+
}
|
1632
|
+
}
|