ruby-opengl 0.50.0 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +15 -11
- data/doc/build_install.txt +10 -6
- data/doc/extensions.txt.in +348 -0
- data/doc/history.txt +4 -0
- data/doc/roadmap.txt +4 -6
- data/doc/scientific_use.txt +7 -0
- data/doc/supplies/page_template.html +2 -1
- data/doc/thanks.txt +5 -0
- data/doc/tutorial.txt +431 -121
- data/examples/NeHe/nehe_lesson02.rb +1 -1
- data/examples/NeHe/nehe_lesson03.rb +1 -1
- data/examples/NeHe/nehe_lesson04.rb +1 -1
- data/examples/NeHe/nehe_lesson05.rb +1 -1
- data/examples/NeHe/nehe_lesson36.rb +1 -1
- data/examples/OrangeBook/brick.rb +3 -15
- data/examples/OrangeBook/particle.rb +2 -20
- data/examples/RedBook/aapoly.rb +1 -1
- data/examples/RedBook/aargb.rb +2 -2
- data/examples/RedBook/accanti.rb +1 -1
- data/examples/RedBook/accpersp.rb +1 -1
- data/examples/RedBook/alpha.rb +2 -2
- data/examples/RedBook/alpha3D.rb +1 -1
- data/examples/RedBook/bezcurve.rb +1 -1
- data/examples/RedBook/bezmesh.rb +1 -1
- data/examples/RedBook/checker.rb +1 -1
- data/examples/RedBook/clip.rb +1 -1
- data/examples/RedBook/colormat.rb +1 -1
- data/examples/RedBook/cube.rb +1 -1
- data/examples/RedBook/depthcue.rb +1 -1
- data/examples/RedBook/dof.rb +1 -1
- data/examples/RedBook/double.rb +1 -1
- data/examples/RedBook/drawf.rb +1 -1
- data/examples/RedBook/feedback.rb +1 -1
- data/examples/RedBook/fog.rb +1 -1
- data/examples/RedBook/font.rb +2 -2
- data/examples/RedBook/hello.rb +1 -1
- data/examples/RedBook/image.rb +4 -4
- data/examples/RedBook/lines.rb +1 -1
- data/examples/RedBook/list.rb +1 -1
- data/examples/RedBook/material.rb +1 -1
- data/examples/RedBook/mipmap.rb +1 -1
- data/examples/RedBook/model.rb +1 -1
- data/examples/RedBook/movelight.rb +1 -1
- data/examples/RedBook/pickdepth.rb +1 -1
- data/examples/RedBook/planet.rb +5 -5
- data/examples/RedBook/quadric.rb +1 -1
- data/examples/RedBook/robot.rb +5 -5
- data/examples/RedBook/select.rb +1 -1
- data/examples/RedBook/smooth.rb +1 -1
- data/examples/RedBook/stencil.rb +1 -1
- data/examples/RedBook/stroke.rb +2 -2
- data/examples/RedBook/surface.rb +1 -1
- data/examples/RedBook/teaambient.rb +1 -1
- data/examples/RedBook/teapots.rb +1 -1
- data/examples/RedBook/tess.rb +1 -1
- data/examples/RedBook/texbind.rb +1 -1
- data/examples/RedBook/texgen.rb +5 -5
- data/examples/RedBook/texturesurf.rb +1 -1
- data/examples/RedBook/varray.rb +1 -1
- data/examples/RedBook/wrap.rb +5 -5
- data/examples/misc/OGLBench.rb +337 -0
- data/examples/misc/anisotropic.rb +1 -1
- data/examples/misc/fbo_test.rb +356 -0
- data/examples/misc/font-glut.rb +1 -1
- data/examples/misc/glfwtest.rb +30 -0
- data/examples/misc/md2model.rb +15 -0
- data/examples/misc/plane.rb +1 -1
- data/examples/misc/readpixel.rb +1 -1
- data/examples/misc/sdltest.rb +34 -0
- data/examples/misc/trislam.rb +828 -0
- data/ext/common/common.h +126 -218
- data/ext/common/conv.h +244 -0
- data/ext/common/funcdef.h +280 -0
- data/ext/common/gl-error.h +23 -0
- data/ext/common/gl-types.h +14 -0
- data/ext/gl/gl-1.0-1.1.c +497 -1255
- data/ext/gl/gl-1.2.c +121 -304
- data/ext/gl/gl-1.3.c +78 -339
- data/ext/gl/gl-1.4.c +102 -164
- data/ext/gl/gl-1.5.c +42 -173
- data/ext/gl/gl-2.0.c +273 -1039
- data/ext/gl/gl-2.1.c +15 -19
- data/ext/gl/gl-enums.c +3 -2
- data/ext/gl/gl-error.c +104 -0
- data/ext/gl/gl-ext-3dfx.c +27 -0
- data/ext/gl/gl-ext-arb.c +812 -12
- data/ext/gl/gl-ext-ati.c +41 -0
- data/ext/gl/gl-ext-ext.c +791 -119
- data/ext/gl/gl-ext-gremedy.c +41 -0
- data/ext/gl/gl-ext-nv.c +679 -0
- data/ext/gl/gl.c +48 -28
- data/ext/gl/mkrf_conf.rb +13 -10
- data/ext/glu/glu-enums.c +3 -2
- data/ext/glu/glu.c +136 -41
- data/ext/glu/mkrf_conf.rb +15 -12
- data/ext/glut/glut.c +37 -80
- data/ext/glut/mkrf_conf.rb +17 -13
- data/lib/opengl.rb +29 -53
- data/test/tc_common.rb +9 -3
- data/test/tc_ext_arb.rb +397 -3
- data/test/tc_ext_ati.rb +33 -0
- data/test/tc_ext_ext.rb +479 -2
- data/test/tc_ext_gremedy.rb +36 -0
- data/test/tc_ext_nv.rb +357 -0
- data/test/tc_func_10_11.rb +93 -67
- data/test/tc_func_12.rb +11 -11
- data/test/tc_func_13.rb +38 -18
- data/test/tc_func_14.rb +2 -2
- data/test/tc_func_15.rb +10 -10
- data/test/tc_func_20.rb +20 -20
- data/test/tc_func_21.rb +53 -22
- data/test/tc_glu.rb +9 -4
- data/test/tc_misc.rb +15 -2
- metadata +22 -8
- data/doc/extensions.txt +0 -361
- data/examples/RedBook/aaindex.rb +0 -97
- data/examples/misc/smooth.rb +0 -42
- data/examples/misc/test.rb +0 -65
|
@@ -0,0 +1,280 @@
|
|
|
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
|
+
/* These macros are for simplification of function definition, as passing
|
|
17
|
+
arguments from/to OpenGL usually follows the same few patterns. It would
|
|
18
|
+
be probably wise to adapt the whole bindings to C++ (templates, overloaded
|
|
19
|
+
functions, etc.), but for now supporting ruby extension for Windows means
|
|
20
|
+
MSVC6, and that in turn means unspeakable horrors and pains for everyone
|
|
21
|
+
attempting to merely write, much less debug or maintain any template-based
|
|
22
|
+
code.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/* Will load function pointer for function _NAME_ on first call to the
|
|
26
|
+
function, or raise if the OpenGL version is less then required or the
|
|
27
|
+
required extension is not supported */
|
|
28
|
+
#define LOAD_GL_FUNC(_NAME_,_VEREXT_) \
|
|
29
|
+
if (fptr_##_NAME_==NULL) { \
|
|
30
|
+
if (CheckVersionExtension(_VEREXT_)==GL_FALSE) { \
|
|
31
|
+
if (isdigit(_VEREXT_[0])) \
|
|
32
|
+
rb_raise(rb_eNotImpError,"OpenGL version %s is not available on this system",_VEREXT_); \
|
|
33
|
+
else \
|
|
34
|
+
rb_raise(rb_eNotImpError,"Extension %s is not available on this system",_VEREXT_); \
|
|
35
|
+
} \
|
|
36
|
+
fptr_##_NAME_ = load_gl_function(#_NAME_, 1); \
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Macroset for defining simple functions, i.e. functions that take n arguments and
|
|
40
|
+
pass them to GL API function without any additional processing.
|
|
41
|
+
|
|
42
|
+
Some checking is implicit in _conversion_ argument - e.g. NUM2INT makes sure that
|
|
43
|
+
user is really passing type that can be converted to INT, otherwire raises.
|
|
44
|
+
|
|
45
|
+
*_LOAD version of macros are for defining functions where we load function pointer
|
|
46
|
+
instead of direct call - that means all functions above OpenGL 1.1 (including all extensions)
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
#define ARGLIST0
|
|
50
|
+
#define ARGLIST1 ,arg1
|
|
51
|
+
#define ARGLIST2 ,arg1,arg2
|
|
52
|
+
#define ARGLIST3 ,arg1,arg2,arg3
|
|
53
|
+
#define ARGLIST4 ,arg1,arg2,arg3,arg4
|
|
54
|
+
#define ARGLIST5 ,arg1,arg2,arg3,arg4,arg5
|
|
55
|
+
#define ARGLIST6 ,arg1,arg2,arg3,arg4,arg5,arg6
|
|
56
|
+
#define ARGLIST7 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7
|
|
57
|
+
#define ARGLIST8 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8
|
|
58
|
+
#define ARGLIST9 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9
|
|
59
|
+
#define ARGLIST10 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10
|
|
60
|
+
|
|
61
|
+
#define CONV_GLenum (GLenum)NUM2UINT
|
|
62
|
+
#define CONV_GLboolean (GLboolean)NUM2UINT
|
|
63
|
+
#define CONV_GLbitfield (GLbitfield)NUM2UINT
|
|
64
|
+
#define CONV_GLbyte (GLbyte)NUM2INT
|
|
65
|
+
#define CONV_GLshort (GLshort)NUM2INT
|
|
66
|
+
#define CONV_GLint (GLint)NUM2INT
|
|
67
|
+
#define CONV_GLubyte (GLubyte)NUM2UINT
|
|
68
|
+
#define CONV_GLushort (GLushort)NUM2UINT
|
|
69
|
+
#define CONV_GLuint (GLuint)NUM2UINT
|
|
70
|
+
#define CONV_GLsizei (GLsizei)NUM2INT
|
|
71
|
+
#define CONV_GLfloat (GLfloat)NUM2DBL
|
|
72
|
+
#define CONV_GLclampf (GLclampf)NUM2DBL
|
|
73
|
+
#define CONV_GLdouble (GLdouble)NUM2DBL
|
|
74
|
+
#define CONV_GLclampd (GLclampd)NUM2DBL
|
|
75
|
+
|
|
76
|
+
#define RETDECL_BASE(_t_) _t_ ret = (_t_) 0;
|
|
77
|
+
#define RETDECL_GLvoid
|
|
78
|
+
#define RETDECL_void
|
|
79
|
+
#define RETDECL_GLenum RETDECL_BASE(GLenum)
|
|
80
|
+
#define RETDECL_GLboolean RETDECL_BASE(GLboolean)
|
|
81
|
+
#define RETDECL_GLbitfield RETDECL_BASE(GLbitfield)
|
|
82
|
+
#define RETDECL_GLbyte RETDECL_BASE(GLbyte)
|
|
83
|
+
#define RETDECL_GLshort RETDECL_BASE(GLshort)
|
|
84
|
+
#define RETDECL_GLint RETDECL_BASE(GLint)
|
|
85
|
+
#define RETDECL_GLubyte RETDECL_BASE(GLubyte)
|
|
86
|
+
#define RETDECL_GLushort RETDECL_BASE(GLushort)
|
|
87
|
+
#define RETDECL_GLuint RETDECL_BASE(GLuint)
|
|
88
|
+
#define RETDECL_GLsizei RETDECL_BASE(GLsizei)
|
|
89
|
+
#define RETDECL_GLfloat RETDECL_BASE(GLfloat)
|
|
90
|
+
#define RETDECL_GLclampf RETDECL_BASE(GLclampf)
|
|
91
|
+
#define RETDECL_GLdouble RETDECL_BASE(GLdouble)
|
|
92
|
+
#define RETDECL_GLclampd RETDECL_BASE(GLclampd)
|
|
93
|
+
|
|
94
|
+
#define RETSTAT_GLvoid
|
|
95
|
+
#define RETSTAT_void
|
|
96
|
+
#define RETSTAT_GLenum ret=
|
|
97
|
+
#define RETSTAT_GLboolean ret=
|
|
98
|
+
#define RETSTAT_GLbitfield ret=
|
|
99
|
+
#define RETSTAT_GLbyte ret=
|
|
100
|
+
#define RETSTAT_GLshort ret=
|
|
101
|
+
#define RETSTAT_GLint ret=
|
|
102
|
+
#define RETSTAT_GLubyte ret=
|
|
103
|
+
#define RETSTAT_GLushort ret=
|
|
104
|
+
#define RETSTAT_GLuint ret=
|
|
105
|
+
#define RETSTAT_GLsizei ret=
|
|
106
|
+
#define RETSTAT_GLfloat ret=
|
|
107
|
+
#define RETSTAT_GLclampf ret=
|
|
108
|
+
#define RETSTAT_GLdouble ret=
|
|
109
|
+
#define RETSTAT_GLclampd ret=
|
|
110
|
+
|
|
111
|
+
#define RETCONV_GLvoid(x) Qnil
|
|
112
|
+
#define RETCONV_void(x) Qnil
|
|
113
|
+
#define RETCONV_GLenum(x) UINT2NUM(x)
|
|
114
|
+
#define RETCONV_GLboolean(x) GLBOOL2RUBY(x)
|
|
115
|
+
#define RETCONV_GLbitfield(x) UINT2NUM(x)
|
|
116
|
+
#define RETCONV_GLbyte(x) INT2NUM(x)
|
|
117
|
+
#define RETCONV_GLshort(x) INT2NUM(x)
|
|
118
|
+
#define RETCONV_GLint(x) INT2NUM(x)
|
|
119
|
+
#define RETCONV_GLubyte(x) UINT2NUM(x)
|
|
120
|
+
#define RETCONV_GLushort(x) UINT2NUM(x)
|
|
121
|
+
#define RETCONV_GLuint(x) UINT2NUM(x)
|
|
122
|
+
#define RETCONV_GLsizei(x) INT2NUM(x)
|
|
123
|
+
#define RETCONV_GLfloat(x) rb_float_new(x)
|
|
124
|
+
#define RETCONV_GLclampf(x) rb_float_new(x)
|
|
125
|
+
#define RETCONV_GLdouble(x) rb_float_new(x)
|
|
126
|
+
#define RETCONV_GLclampd(x) rb_float_new(x)
|
|
127
|
+
|
|
128
|
+
#define PROTOPARAM0(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) void
|
|
129
|
+
#define PROTOPARAM1(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1
|
|
130
|
+
#define PROTOPARAM2(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2
|
|
131
|
+
#define PROTOPARAM3(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3
|
|
132
|
+
#define PROTOPARAM4(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4
|
|
133
|
+
#define PROTOPARAM5(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5
|
|
134
|
+
#define PROTOPARAM6(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6
|
|
135
|
+
#define PROTOPARAM7(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7
|
|
136
|
+
#define PROTOPARAM8(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7,p8
|
|
137
|
+
#define PROTOPARAM9(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7,p8,p9
|
|
138
|
+
#define PROTOPARAM10(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
|
|
139
|
+
|
|
140
|
+
#define CALLCONV0(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10)
|
|
141
|
+
#define CALLCONV1(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1)
|
|
142
|
+
#define CALLCONV2(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2)
|
|
143
|
+
#define CALLCONV3(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3)
|
|
144
|
+
#define CALLCONV4(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4)
|
|
145
|
+
#define CALLCONV5(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5)
|
|
146
|
+
#define CALLCONV6(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6)
|
|
147
|
+
#define CALLCONV7(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7)
|
|
148
|
+
#define CALLCONV8(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8)
|
|
149
|
+
#define CALLCONV9(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8),CONV_##cv9(arg9)
|
|
150
|
+
#define CALLCONV10(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8),CONV_##cv9(arg9),CONV_##cv10(arg10)
|
|
151
|
+
|
|
152
|
+
#define GL_FUNC_LOAD(_num_,_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_) \
|
|
153
|
+
static _returntype_ (APIENTRY * fptr_gl##_name_)(PROTOPARAM##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
|
|
154
|
+
static VALUE \
|
|
155
|
+
gl_##_name_(obj ARGLIST##_num_) \
|
|
156
|
+
VALUE obj ARGLIST##_num_; \
|
|
157
|
+
{ \
|
|
158
|
+
RETDECL_##_returntype_ \
|
|
159
|
+
LOAD_GL_FUNC(gl##_name_,_ver_) \
|
|
160
|
+
RETSTAT_##_returntype_ fptr_gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
|
|
161
|
+
CHECK_GLERROR \
|
|
162
|
+
return RETCONV_##_returntype_(ret) ; \
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
#define GL_FUNC_STATIC(_num_,_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10) \
|
|
166
|
+
static VALUE \
|
|
167
|
+
gl_##_name_(obj ARGLIST##_num_) \
|
|
168
|
+
VALUE obj ARGLIST##_num_; \
|
|
169
|
+
{ \
|
|
170
|
+
RETDECL_##_returntype_ \
|
|
171
|
+
RETSTAT_##_returntype_ gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
|
|
172
|
+
CHECK_GLERROR \
|
|
173
|
+
return RETCONV_##_returntype_(ret) ; \
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
#define GL_FUNC_LOAD_0(_name_,_returntype_,_ver_) GL_FUNC_LOAD(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0,_ver_)
|
|
177
|
+
#define GL_FUNC_LOAD_1(_name_,_returntype_,targ1,_ver_) GL_FUNC_LOAD(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0,_ver_)
|
|
178
|
+
#define GL_FUNC_LOAD_2(_name_,_returntype_,targ1,targ2,_ver_) GL_FUNC_LOAD(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0,_ver_)
|
|
179
|
+
#define GL_FUNC_LOAD_3(_name_,_returntype_,targ1,targ2,targ3,_ver_) GL_FUNC_LOAD(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0,_ver_)
|
|
180
|
+
#define GL_FUNC_LOAD_4(_name_,_returntype_,targ1,targ2,targ3,targ4,_ver_) GL_FUNC_LOAD(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0,_ver_)
|
|
181
|
+
#define GL_FUNC_LOAD_5(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,_ver_) GL_FUNC_LOAD(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0,_ver_)
|
|
182
|
+
#define GL_FUNC_LOAD_6(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,_ver_) GL_FUNC_LOAD(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0,_ver_)
|
|
183
|
+
#define GL_FUNC_LOAD_7(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,_ver_) GL_FUNC_LOAD(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0,_ver_)
|
|
184
|
+
#define GL_FUNC_LOAD_8(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,_ver_) GL_FUNC_LOAD(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0,_ver_)
|
|
185
|
+
#define GL_FUNC_LOAD_9(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,_ver_) GL_FUNC_LOAD(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0,_ver_)
|
|
186
|
+
#define GL_FUNC_LOAD_10(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_) GL_FUNC_LOAD(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_)
|
|
187
|
+
|
|
188
|
+
#define GL_FUNC_STATIC_0(_name_,_returntype_) GL_FUNC_STATIC(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0)
|
|
189
|
+
#define GL_FUNC_STATIC_1(_name_,_returntype_,targ1) GL_FUNC_STATIC(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0)
|
|
190
|
+
#define GL_FUNC_STATIC_2(_name_,_returntype_,targ1,targ2) GL_FUNC_STATIC(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0)
|
|
191
|
+
#define GL_FUNC_STATIC_3(_name_,_returntype_,targ1,targ2,targ3) GL_FUNC_STATIC(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0)
|
|
192
|
+
#define GL_FUNC_STATIC_4(_name_,_returntype_,targ1,targ2,targ3,targ4) GL_FUNC_STATIC(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0)
|
|
193
|
+
#define GL_FUNC_STATIC_5(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5) GL_FUNC_STATIC(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0)
|
|
194
|
+
#define GL_FUNC_STATIC_6(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6) GL_FUNC_STATIC(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0)
|
|
195
|
+
#define GL_FUNC_STATIC_7(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7) GL_FUNC_STATIC(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0)
|
|
196
|
+
#define GL_FUNC_STATIC_8(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8) GL_FUNC_STATIC(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0)
|
|
197
|
+
#define GL_FUNC_STATIC_9(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9) GL_FUNC_STATIC(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0)
|
|
198
|
+
#define GL_FUNC_STATIC_10(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10_ver_) GL_FUNC_STATIC(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)
|
|
199
|
+
|
|
200
|
+
/* Templates for glGen* and glDelete* */
|
|
201
|
+
|
|
202
|
+
#define GL_FUNC_GENOBJECTS_LOAD(_name_,_ver_) \
|
|
203
|
+
static void (APIENTRY * fptr_gl##_name_)(GLsizei,GLuint *); \
|
|
204
|
+
static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
|
|
205
|
+
{ \
|
|
206
|
+
GLsizei n; \
|
|
207
|
+
GLuint *objects; \
|
|
208
|
+
VALUE ret; \
|
|
209
|
+
unsigned int i; \
|
|
210
|
+
LOAD_GL_FUNC(gl##_name_,_ver_) \
|
|
211
|
+
n = CONV_GLsizei(arg1); \
|
|
212
|
+
objects = ALLOC_N(GLuint, n); \
|
|
213
|
+
fptr_gl##_name_(n,objects); \
|
|
214
|
+
ret = rb_ary_new2(n); \
|
|
215
|
+
for (i = 0; i < n; i++) \
|
|
216
|
+
rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
|
|
217
|
+
xfree(objects); \
|
|
218
|
+
CHECK_GLERROR \
|
|
219
|
+
return ret; \
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
#define GL_FUNC_GENOBJECTS(_name_) \
|
|
223
|
+
static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
|
|
224
|
+
{ \
|
|
225
|
+
GLsizei n; \
|
|
226
|
+
GLuint *objects; \
|
|
227
|
+
VALUE ret; \
|
|
228
|
+
unsigned int i; \
|
|
229
|
+
n = CONV_GLsizei(arg1); \
|
|
230
|
+
objects = ALLOC_N(GLuint, n); \
|
|
231
|
+
gl##_name_(n,objects); \
|
|
232
|
+
ret = rb_ary_new2(n); \
|
|
233
|
+
for (i = 0; i < n; i++) \
|
|
234
|
+
rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
|
|
235
|
+
xfree(objects); \
|
|
236
|
+
CHECK_GLERROR \
|
|
237
|
+
return ret; \
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
#define GL_FUNC_DELETEOBJECTS_LOAD(_name_,_ver_) \
|
|
241
|
+
static void (APIENTRY * fptr_gl##_name_)(GLsizei,const GLuint *); \
|
|
242
|
+
static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
|
|
243
|
+
{ \
|
|
244
|
+
GLsizei n; \
|
|
245
|
+
LOAD_GL_FUNC(gl##_name_,_ver_) \
|
|
246
|
+
if (TYPE(arg1)==T_ARRAY) { \
|
|
247
|
+
GLuint *objects; \
|
|
248
|
+
n = RARRAY(arg1)->len; \
|
|
249
|
+
objects = ALLOC_N(GLuint,n); \
|
|
250
|
+
ary2cuint(arg1,objects,n); \
|
|
251
|
+
fptr_gl##_name_(n,objects); \
|
|
252
|
+
xfree(objects); \
|
|
253
|
+
} else { \
|
|
254
|
+
GLuint object; \
|
|
255
|
+
object = CONV_GLsizei(arg1); \
|
|
256
|
+
fptr_gl##_name_(1,&object); \
|
|
257
|
+
} \
|
|
258
|
+
CHECK_GLERROR \
|
|
259
|
+
return Qnil; \
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
#define GL_FUNC_DELETEOBJECTS(_name_) \
|
|
263
|
+
static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
|
|
264
|
+
{ \
|
|
265
|
+
GLsizei n; \
|
|
266
|
+
if (TYPE(arg1)==T_ARRAY) { \
|
|
267
|
+
GLuint *objects; \
|
|
268
|
+
n = RARRAY(arg1)->len; \
|
|
269
|
+
objects = ALLOC_N(GLuint,n); \
|
|
270
|
+
ary2cuint(arg1,objects,n); \
|
|
271
|
+
gl##_name_(n,objects); \
|
|
272
|
+
xfree(objects); \
|
|
273
|
+
} else { \
|
|
274
|
+
GLuint object; \
|
|
275
|
+
object = CONV_GLsizei(arg1); \
|
|
276
|
+
gl##_name_(1,&object); \
|
|
277
|
+
} \
|
|
278
|
+
CHECK_GLERROR \
|
|
279
|
+
return Qnil; \
|
|
280
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
void gl_init_error(VALUE);
|
|
17
|
+
|
|
18
|
+
extern VALUE error_checking;
|
|
19
|
+
extern VALUE inside_begin_end;
|
|
20
|
+
|
|
21
|
+
void check_for_glerror(void);
|
|
22
|
+
|
|
23
|
+
#define CHECK_GLERROR if (error_checking==Qtrue && inside_begin_end==Qfalse) check_for_glerror();
|
data/ext/common/gl-types.h
CHANGED
|
@@ -16,6 +16,15 @@
|
|
|
16
16
|
/* GL types - define if system GLheaders are not recent
|
|
17
17
|
Note: must be included before gl-enums.h */
|
|
18
18
|
|
|
19
|
+
#if defined(_WIN32) && defined(__GNUC__)
|
|
20
|
+
#include <stdint.h>
|
|
21
|
+
#elif defined(_WIN32)
|
|
22
|
+
typedef __int64 int64_t;
|
|
23
|
+
typedef unsigned __int64 uint64_t;
|
|
24
|
+
#else
|
|
25
|
+
#include <inttypes.h>
|
|
26
|
+
#endif
|
|
27
|
+
|
|
19
28
|
/* GL base */
|
|
20
29
|
#ifndef GL_VERSION_1_5
|
|
21
30
|
typedef ptrdiff_t GLintptr;
|
|
@@ -45,3 +54,8 @@ typedef ptrdiff_t GLsizeiptrARB;
|
|
|
45
54
|
#ifndef GL_NV_half_float
|
|
46
55
|
typedef unsigned short GLhalfNV;
|
|
47
56
|
#endif
|
|
57
|
+
|
|
58
|
+
#ifndef GL_EXT_timer_query
|
|
59
|
+
typedef int64_t GLint64EXT;
|
|
60
|
+
typedef uint64_t GLuint64EXT;
|
|
61
|
+
#endif
|
data/ext/gl/gl-1.0-1.1.c
CHANGED
|
@@ -23,192 +23,222 @@
|
|
|
23
23
|
|
|
24
24
|
/* OpenGL 1.0 + 1.1 functions */
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
26
|
+
GL_FUNC_STATIC_2(Accum,GLvoid, GLenum,GLfloat)
|
|
27
|
+
GL_FUNC_STATIC_2(AlphaFunc,GLvoid, GLenum,GLclampf)
|
|
28
|
+
GL_FUNC_STATIC_1(ArrayElement,GLvoid, GLint)
|
|
29
|
+
GL_FUNC_STATIC_2(BindTexture,GLvoid, GLenum,GLuint)
|
|
30
|
+
GL_FUNC_STATIC_2(BlendFunc,GLvoid, GLenum,GLenum)
|
|
31
|
+
GL_FUNC_STATIC_1(CallList,GLvoid, GLuint)
|
|
32
|
+
GL_FUNC_STATIC_1(Clear,GLvoid, GLbitfield)
|
|
33
|
+
GL_FUNC_STATIC_4(ClearAccum,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
34
|
+
GL_FUNC_STATIC_4(ClearColor,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
35
|
+
GL_FUNC_STATIC_1(ClearDepth,GLvoid, GLclampd)
|
|
36
|
+
GL_FUNC_STATIC_1(ClearIndex,GLvoid, GLfloat)
|
|
37
|
+
GL_FUNC_STATIC_1(ClearStencil,GLvoid, GLint)
|
|
38
|
+
GL_FUNC_STATIC_3(Color3b,GLvoid, GLbyte,GLbyte,GLbyte)
|
|
39
|
+
GL_FUNC_STATIC_3(Color3d,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
40
|
+
GL_FUNC_STATIC_3(Color3f,GLvoid, GLfloat,GLfloat,GLfloat)
|
|
41
|
+
GL_FUNC_STATIC_3(Color3i,GLvoid, GLint,GLint,GLint)
|
|
42
|
+
GL_FUNC_STATIC_3(Color3s,GLvoid, GLshort,GLshort,GLshort)
|
|
43
|
+
GL_FUNC_STATIC_3(Color3ub,GLvoid, GLubyte,GLubyte,GLubyte)
|
|
44
|
+
GL_FUNC_STATIC_3(Color3ui,GLvoid, GLuint,GLuint,GLuint)
|
|
45
|
+
GL_FUNC_STATIC_3(Color3us,GLvoid, GLushort,GLushort,GLushort)
|
|
46
|
+
GL_FUNC_STATIC_4(Color4b,GLvoid, GLbyte,GLbyte,GLbyte,GLbyte)
|
|
47
|
+
GL_FUNC_STATIC_4(Color4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
|
|
48
|
+
GL_FUNC_STATIC_4(Color4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
49
|
+
GL_FUNC_STATIC_4(Color4i,GLvoid, GLint,GLint,GLint,GLint)
|
|
50
|
+
GL_FUNC_STATIC_4(Color4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
|
|
51
|
+
GL_FUNC_STATIC_4(Color4ub,GLvoid, GLubyte,GLubyte,GLubyte,GLubyte)
|
|
52
|
+
GL_FUNC_STATIC_4(Color4ui,GLvoid, GLuint,GLuint,GLuint,GLuint)
|
|
53
|
+
GL_FUNC_STATIC_4(Color4us,GLvoid, GLushort,GLushort,GLushort,GLushort)
|
|
54
|
+
GL_FUNC_STATIC_4(ColorMask,GLvoid, GLboolean,GLboolean,GLboolean,GLboolean)
|
|
55
|
+
GL_FUNC_STATIC_2(ColorMaterial,GLvoid, GLenum,GLenum)
|
|
56
|
+
GL_FUNC_STATIC_5(CopyPixels,GLvoid, GLint,GLint,GLsizei,GLsizei,GLenum)
|
|
57
|
+
GL_FUNC_STATIC_7(CopyTexImage1D,GLvoid, GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint)
|
|
58
|
+
GL_FUNC_STATIC_8(CopyTexImage2D,GLvoid, GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint)
|
|
59
|
+
GL_FUNC_STATIC_6(CopyTexSubImage1D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLsizei)
|
|
60
|
+
GL_FUNC_STATIC_8(CopyTexSubImage2D,GLvoid, GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei)
|
|
61
|
+
GL_FUNC_STATIC_1(CullFace,GLvoid, GLenum)
|
|
62
|
+
GL_FUNC_STATIC_2(DeleteLists,GLvoid, GLuint,GLuint)
|
|
63
|
+
GL_FUNC_STATIC_1(DepthFunc,GLvoid, GLenum)
|
|
64
|
+
GL_FUNC_STATIC_1(DepthMask,GLvoid, GLboolean)
|
|
65
|
+
GL_FUNC_STATIC_2(DepthRange,GLvoid, GLclampd,GLclampd)
|
|
66
|
+
GL_FUNC_STATIC_1(Disable,GLvoid, GLenum)
|
|
67
|
+
GL_FUNC_STATIC_1(DisableClientState,GLvoid, GLenum)
|
|
68
|
+
GL_FUNC_STATIC_3(DrawArrays,GLvoid, GLenum,GLint,GLsizei)
|
|
69
|
+
GL_FUNC_STATIC_1(DrawBuffer,GLvoid, GLenum)
|
|
70
|
+
GL_FUNC_STATIC_1(EdgeFlag,GLvoid, GLboolean)
|
|
71
|
+
GL_FUNC_STATIC_1(Enable,GLvoid, GLenum)
|
|
72
|
+
GL_FUNC_STATIC_1(EnableClientState,GLvoid, GLenum)
|
|
73
|
+
GL_FUNC_STATIC_0(EndList,GLvoid)
|
|
74
|
+
GL_FUNC_STATIC_1(EvalCoord1d,GLvoid, GLdouble)
|
|
75
|
+
GL_FUNC_STATIC_1(EvalCoord1f,GLvoid, GLfloat)
|
|
76
|
+
GL_FUNC_STATIC_2(EvalCoord2d,GLvoid, GLdouble,GLdouble)
|
|
77
|
+
GL_FUNC_STATIC_2(EvalCoord2f,GLvoid, GLfloat,GLfloat)
|
|
78
|
+
GL_FUNC_STATIC_3(EvalMesh1,GLvoid, GLenum,GLint,GLint)
|
|
79
|
+
GL_FUNC_STATIC_5(EvalMesh2,GLvoid, GLenum,GLint,GLint,GLint,GLint)
|
|
80
|
+
GL_FUNC_STATIC_1(EvalPoint1,GLvoid, GLint)
|
|
81
|
+
GL_FUNC_STATIC_2(EvalPoint2,GLvoid, GLint,GLint)
|
|
82
|
+
GL_FUNC_STATIC_0(Finish,GLvoid)
|
|
83
|
+
GL_FUNC_STATIC_0(Flush,GLvoid)
|
|
84
|
+
GL_FUNC_STATIC_2(Fogi,GLvoid, GLenum,GLint)
|
|
85
|
+
GL_FUNC_STATIC_2(Fogf,GLvoid, GLenum,GLfloat)
|
|
86
|
+
GL_FUNC_STATIC_1(FrontFace,GLvoid, GLenum)
|
|
87
|
+
GL_FUNC_STATIC_6(Frustum,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble)
|
|
88
|
+
GL_FUNC_STATIC_1(GenLists,GLuint, GLsizei)
|
|
89
|
+
GL_FUNC_STATIC_0(GetError,GLenum)
|
|
90
|
+
GL_FUNC_STATIC_2(Hint,GLvoid, GLenum,GLenum)
|
|
91
|
+
GL_FUNC_STATIC_1(Indexd,GLvoid, GLdouble)
|
|
92
|
+
GL_FUNC_STATIC_1(Indexf,GLvoid, GLfloat)
|
|
93
|
+
GL_FUNC_STATIC_1(Indexi,GLvoid, GLint)
|
|
94
|
+
GL_FUNC_STATIC_1(IndexMask,GLvoid, GLuint)
|
|
95
|
+
GL_FUNC_STATIC_1(Indexs,GLvoid, GLshort)
|
|
96
|
+
GL_FUNC_STATIC_1(Indexub,GLvoid, GLubyte)
|
|
97
|
+
GL_FUNC_STATIC_0(InitNames,GLvoid)
|
|
98
|
+
GL_FUNC_STATIC_1(IsEnabled,GLboolean, GLenum)
|
|
99
|
+
GL_FUNC_STATIC_1(IsList,GLboolean, GLuint)
|
|
100
|
+
GL_FUNC_STATIC_1(IsTexture,GLboolean, GLuint)
|
|
101
|
+
GL_FUNC_STATIC_2(LightModelf,GLvoid, GLenum,GLfloat)
|
|
102
|
+
GL_FUNC_STATIC_2(LightModeli,GLvoid, GLenum,GLint)
|
|
103
|
+
GL_FUNC_STATIC_3(Lightf,GLvoid, GLenum,GLenum,GLfloat)
|
|
104
|
+
GL_FUNC_STATIC_3(Lighti,GLvoid, GLenum,GLenum,GLint)
|
|
105
|
+
GL_FUNC_STATIC_2(LineStipple,GLvoid, GLint,GLushort)
|
|
106
|
+
GL_FUNC_STATIC_1(LineWidth,GLvoid, GLfloat)
|
|
107
|
+
GL_FUNC_STATIC_1(ListBase,GLvoid, GLuint)
|
|
108
|
+
GL_FUNC_STATIC_0(LoadIdentity,GLvoid)
|
|
109
|
+
GL_FUNC_STATIC_1(LoadName,GLvoid, GLuint)
|
|
110
|
+
GL_FUNC_STATIC_1(LogicOp,GLvoid, GLenum)
|
|
111
|
+
GL_FUNC_STATIC_3(MapGrid1d,GLvoid, GLint,GLdouble,GLdouble)
|
|
112
|
+
GL_FUNC_STATIC_3(MapGrid1f,GLvoid, GLint,GLfloat,GLfloat)
|
|
113
|
+
GL_FUNC_STATIC_6(MapGrid2d,GLvoid, GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble)
|
|
114
|
+
GL_FUNC_STATIC_6(MapGrid2f,GLvoid, GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat)
|
|
115
|
+
GL_FUNC_STATIC_3(Materialf,GLvoid, GLenum,GLenum,GLfloat)
|
|
116
|
+
GL_FUNC_STATIC_3(Materiali,GLvoid, GLenum,GLenum,GLint)
|
|
117
|
+
GL_FUNC_STATIC_1(MatrixMode,GLvoid, GLenum)
|
|
118
|
+
GL_FUNC_STATIC_2(NewList,GLvoid, GLuint,GLenum)
|
|
119
|
+
GL_FUNC_STATIC_3(Normal3b,GLvoid, GLbyte,GLbyte,GLbyte)
|
|
120
|
+
GL_FUNC_STATIC_3(Normal3d,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
121
|
+
GL_FUNC_STATIC_3(Normal3f,GLvoid, GLfloat,GLfloat,GLfloat)
|
|
122
|
+
GL_FUNC_STATIC_3(Normal3i,GLvoid, GLint,GLint,GLint)
|
|
123
|
+
GL_FUNC_STATIC_3(Normal3s,GLvoid, GLshort,GLshort,GLshort)
|
|
124
|
+
GL_FUNC_STATIC_6(Ortho,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble)
|
|
125
|
+
GL_FUNC_STATIC_1(PassThrough,GLvoid, GLfloat)
|
|
126
|
+
GL_FUNC_STATIC_2(PixelStoref,GLvoid, GLenum,GLfloat)
|
|
127
|
+
GL_FUNC_STATIC_2(PixelStorei,GLvoid, GLenum,GLint)
|
|
128
|
+
GL_FUNC_STATIC_2(PixelTransferf,GLvoid, GLenum,GLfloat)
|
|
129
|
+
GL_FUNC_STATIC_2(PixelTransferi,GLvoid, GLenum,GLint)
|
|
130
|
+
GL_FUNC_STATIC_2(PixelZoom,GLvoid, GLfloat,GLfloat)
|
|
131
|
+
GL_FUNC_STATIC_1(PointSize,GLvoid, GLfloat)
|
|
132
|
+
GL_FUNC_STATIC_2(PolygonMode,GLvoid, GLenum,GLenum)
|
|
133
|
+
GL_FUNC_STATIC_2(PolygonOffset,GLvoid, GLfloat,GLfloat)
|
|
134
|
+
GL_FUNC_STATIC_0(PopAttrib,GLvoid)
|
|
135
|
+
GL_FUNC_STATIC_0(PopClientAttrib,GLvoid)
|
|
136
|
+
GL_FUNC_STATIC_0(PopMatrix,GLvoid)
|
|
137
|
+
GL_FUNC_STATIC_0(PopName,GLvoid)
|
|
138
|
+
GL_FUNC_STATIC_1(PushAttrib,GLvoid, GLbitfield)
|
|
139
|
+
GL_FUNC_STATIC_1(PushClientAttrib,GLvoid, GLbitfield)
|
|
140
|
+
GL_FUNC_STATIC_0(PushMatrix,GLvoid)
|
|
141
|
+
GL_FUNC_STATIC_1(PushName,GLvoid, GLuint)
|
|
142
|
+
GL_FUNC_STATIC_2(RasterPos2d,GLvoid, GLdouble,GLdouble)
|
|
143
|
+
GL_FUNC_STATIC_2(RasterPos2f,GLvoid, GLfloat,GLfloat)
|
|
144
|
+
GL_FUNC_STATIC_2(RasterPos2i,GLvoid, GLint,GLint)
|
|
145
|
+
GL_FUNC_STATIC_2(RasterPos2s,GLvoid, GLshort,GLshort)
|
|
146
|
+
GL_FUNC_STATIC_3(RasterPos3d,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
147
|
+
GL_FUNC_STATIC_3(RasterPos3f,GLvoid, GLfloat,GLfloat,GLfloat)
|
|
148
|
+
GL_FUNC_STATIC_3(RasterPos3i,GLvoid, GLint,GLint,GLint)
|
|
149
|
+
GL_FUNC_STATIC_3(RasterPos3s,GLvoid, GLshort,GLshort,GLshort)
|
|
150
|
+
GL_FUNC_STATIC_4(RasterPos4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
|
|
151
|
+
GL_FUNC_STATIC_4(RasterPos4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
152
|
+
GL_FUNC_STATIC_4(RasterPos4i,GLvoid, GLint,GLint,GLint,GLint)
|
|
153
|
+
GL_FUNC_STATIC_4(RasterPos4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
|
|
154
|
+
GL_FUNC_STATIC_1(ReadBuffer,GLvoid, GLenum)
|
|
155
|
+
GL_FUNC_STATIC_4(Rectd,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
|
|
156
|
+
GL_FUNC_STATIC_4(Rectf,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
157
|
+
GL_FUNC_STATIC_4(Recti,GLvoid, GLint,GLint,GLint,GLint)
|
|
158
|
+
GL_FUNC_STATIC_4(Rects,GLvoid, GLshort,GLshort,GLshort,GLshort)
|
|
159
|
+
GL_FUNC_STATIC_1(RenderMode,GLint, GLenum)
|
|
160
|
+
GL_FUNC_STATIC_4(Rotated,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
|
|
161
|
+
GL_FUNC_STATIC_4(Rotatef,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
162
|
+
GL_FUNC_STATIC_3(Scaled,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
163
|
+
GL_FUNC_STATIC_3(Scalef,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
164
|
+
GL_FUNC_STATIC_4(Scissor,GLvoid, GLint,GLint,GLint,GLint)
|
|
165
|
+
GL_FUNC_STATIC_1(ShadeModel,GLvoid, GLenum)
|
|
166
|
+
GL_FUNC_STATIC_3(StencilFunc,GLvoid, GLenum,GLint,GLuint)
|
|
167
|
+
GL_FUNC_STATIC_1(StencilMask,GLvoid, GLuint)
|
|
168
|
+
GL_FUNC_STATIC_3(StencilOp,GLvoid, GLenum,GLenum,GLenum)
|
|
169
|
+
GL_FUNC_STATIC_1(TexCoord1d,GLvoid, GLdouble)
|
|
170
|
+
GL_FUNC_STATIC_1(TexCoord1f,GLvoid, GLfloat)
|
|
171
|
+
GL_FUNC_STATIC_1(TexCoord1i,GLvoid, GLint)
|
|
172
|
+
GL_FUNC_STATIC_1(TexCoord1s,GLvoid, GLshort)
|
|
173
|
+
GL_FUNC_STATIC_2(TexCoord2d,GLvoid, GLdouble,GLdouble)
|
|
174
|
+
GL_FUNC_STATIC_2(TexCoord2f,GLvoid, GLfloat,GLfloat)
|
|
175
|
+
GL_FUNC_STATIC_2(TexCoord2i,GLvoid, GLint,GLint)
|
|
176
|
+
GL_FUNC_STATIC_2(TexCoord2s,GLvoid, GLshort,GLshort)
|
|
177
|
+
GL_FUNC_STATIC_3(TexCoord3d,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
178
|
+
GL_FUNC_STATIC_3(TexCoord3f,GLvoid, GLfloat,GLfloat,GLfloat)
|
|
179
|
+
GL_FUNC_STATIC_3(TexCoord3i,GLvoid, GLint,GLint,GLint)
|
|
180
|
+
GL_FUNC_STATIC_3(TexCoord3s,GLvoid, GLshort,GLshort,GLshort)
|
|
181
|
+
GL_FUNC_STATIC_4(TexCoord4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
|
|
182
|
+
GL_FUNC_STATIC_4(TexCoord4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
183
|
+
GL_FUNC_STATIC_4(TexCoord4i,GLvoid, GLint,GLint,GLint,GLint)
|
|
184
|
+
GL_FUNC_STATIC_4(TexCoord4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
|
|
185
|
+
GL_FUNC_STATIC_3(TexEnvf,GLvoid, GLenum,GLenum,GLfloat)
|
|
186
|
+
GL_FUNC_STATIC_3(TexEnvi,GLvoid, GLenum,GLenum,GLint)
|
|
187
|
+
GL_FUNC_STATIC_3(TexGend,GLvoid, GLenum,GLenum,GLdouble)
|
|
188
|
+
GL_FUNC_STATIC_3(TexGenf,GLvoid, GLenum,GLenum,GLfloat)
|
|
189
|
+
GL_FUNC_STATIC_3(TexGeni,GLvoid, GLenum,GLenum,GLint)
|
|
190
|
+
GL_FUNC_STATIC_3(TexParameterf,GLvoid, GLenum,GLenum,GLfloat)
|
|
191
|
+
GL_FUNC_STATIC_3(TexParameteri,GLvoid, GLenum,GLenum,GLint)
|
|
192
|
+
GL_FUNC_STATIC_3(Translated,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
193
|
+
GL_FUNC_STATIC_3(Translatef,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
194
|
+
GL_FUNC_STATIC_2(Vertex2d,GLvoid, GLdouble,GLdouble)
|
|
195
|
+
GL_FUNC_STATIC_2(Vertex2f,GLvoid, GLfloat,GLfloat)
|
|
196
|
+
GL_FUNC_STATIC_2(Vertex2i,GLvoid, GLint,GLint)
|
|
197
|
+
GL_FUNC_STATIC_2(Vertex2s,GLvoid, GLshort,GLshort)
|
|
198
|
+
GL_FUNC_STATIC_3(Vertex3d,GLvoid, GLdouble,GLdouble,GLdouble)
|
|
199
|
+
GL_FUNC_STATIC_3(Vertex3f,GLvoid, GLfloat,GLfloat,GLfloat)
|
|
200
|
+
GL_FUNC_STATIC_3(Vertex3i,GLvoid, GLint,GLint,GLint)
|
|
201
|
+
GL_FUNC_STATIC_3(Vertex3s,GLvoid, GLshort,GLshort,GLshort)
|
|
202
|
+
GL_FUNC_STATIC_4(Vertex4d,GLvoid, GLdouble,GLdouble,GLdouble,GLdouble)
|
|
203
|
+
GL_FUNC_STATIC_4(Vertex4f,GLvoid, GLfloat,GLfloat,GLfloat,GLfloat)
|
|
204
|
+
GL_FUNC_STATIC_4(Vertex4i,GLvoid, GLint,GLint,GLint,GLint)
|
|
205
|
+
GL_FUNC_STATIC_4(Vertex4s,GLvoid, GLshort,GLshort,GLshort,GLshort)
|
|
206
|
+
GL_FUNC_STATIC_4(Viewport,GLvoid, GLuint,GLuint,GLuint,GLuint)
|
|
207
|
+
|
|
208
|
+
VALUE inside_begin_end = Qfalse;
|
|
209
|
+
|
|
210
|
+
static VALUE
|
|
211
|
+
gl_Begin(obj,arg1)
|
|
212
|
+
VALUE obj,arg1;
|
|
170
213
|
{
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
mode = (GLenum)NUM2INT(arg2);
|
|
175
|
-
glNewList(list,mode);
|
|
176
|
-
return Qnil;
|
|
214
|
+
glBegin(CONV_GLenum(arg1));
|
|
215
|
+
inside_begin_end = Qtrue;
|
|
216
|
+
return Qnil;
|
|
177
217
|
}
|
|
178
218
|
|
|
179
219
|
static VALUE
|
|
180
|
-
|
|
181
|
-
VALUE obj
|
|
220
|
+
gl_End(obj)
|
|
221
|
+
VALUE obj;
|
|
182
222
|
{
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
type = GL_BYTE;
|
|
188
|
-
lists = RSTRING(arg1)->ptr;
|
|
189
|
-
n = RSTRING(arg1)->len;
|
|
190
|
-
} else if (TYPE(arg1) == T_ARRAY) {
|
|
191
|
-
type = GL_INT;
|
|
192
|
-
lists = ALLOC_N(GLint, RARRAY(arg1)->len);
|
|
193
|
-
n = ary2cint(arg1,lists,0);
|
|
194
|
-
} else {
|
|
195
|
-
Check_Type(arg1,T_ARRAY); /* force exception */
|
|
196
|
-
return Qnil; /* not reached */
|
|
197
|
-
}
|
|
198
|
-
glCallLists(n, type, lists);
|
|
199
|
-
if (type == GL_INT) xfree(lists);
|
|
200
|
-
return Qnil;
|
|
223
|
+
inside_begin_end = Qfalse;
|
|
224
|
+
glEnd();
|
|
225
|
+
CHECK_GLERROR
|
|
226
|
+
return Qnil;
|
|
201
227
|
}
|
|
202
228
|
|
|
203
229
|
static VALUE
|
|
204
|
-
|
|
205
|
-
VALUE obj,arg1;
|
|
230
|
+
gl_CallLists(obj,arg1,arg2)
|
|
231
|
+
VALUE obj,arg1,arg2;
|
|
206
232
|
{
|
|
207
|
-
GLsizei
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
233
|
+
GLsizei n;
|
|
234
|
+
GLenum type;
|
|
235
|
+
VALUE lists;
|
|
236
|
+
type = CONV_GLenum(arg1);
|
|
237
|
+
lists = pack_array_or_pass_string(type,arg2);
|
|
238
|
+
n = RSTRING_LEN(lists) / gltype_glformat_unit_size(type,1);
|
|
239
|
+
glCallLists(n, type, RSTRING_PTR(lists));
|
|
240
|
+
CHECK_GLERROR
|
|
241
|
+
return Qnil;
|
|
212
242
|
}
|
|
213
243
|
|
|
214
244
|
static VALUE
|
|
@@ -230,15 +260,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
|
230
260
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
231
261
|
glBitmap(width, height, xorig, yorig, xmove, ymove, (GLvoid *)NUM2INT(arg7));
|
|
232
262
|
} else {
|
|
233
|
-
|
|
234
|
-
|
|
263
|
+
VALUE data;
|
|
264
|
+
data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg7);
|
|
235
265
|
|
|
236
|
-
if (
|
|
237
|
-
rb_raise(rb_eArgError, "string length:%
|
|
266
|
+
if ((RSTRING_LEN(data)*8) < (width * height))
|
|
267
|
+
rb_raise(rb_eArgError, "string length:%li", RSTRING_LEN(data));
|
|
238
268
|
|
|
239
|
-
|
|
240
|
-
glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
|
|
269
|
+
glBitmap(width, height, xorig, yorig, xmove, ymove, (const GLubyte *)RSTRING_PTR(data));
|
|
241
270
|
}
|
|
271
|
+
CHECK_GLERROR
|
|
242
272
|
return Qnil;
|
|
243
273
|
}
|
|
244
274
|
|
|
@@ -250,6 +280,7 @@ VALUE obj,arg1;
|
|
|
250
280
|
Check_Type(arg1,T_ARRAY);
|
|
251
281
|
ary2cboolean(arg1,flag,1);
|
|
252
282
|
glEdgeFlagv(flag);
|
|
283
|
+
CHECK_GLERROR
|
|
253
284
|
return Qnil;
|
|
254
285
|
}
|
|
255
286
|
|
|
@@ -261,6 +292,7 @@ VALUE obj,arg1;
|
|
|
261
292
|
Check_Type(arg1,T_ARRAY);
|
|
262
293
|
ary2cdbl(arg1,c,1);
|
|
263
294
|
glIndexdv(c);
|
|
295
|
+
CHECK_GLERROR
|
|
264
296
|
return Qnil;
|
|
265
297
|
}
|
|
266
298
|
|
|
@@ -272,6 +304,7 @@ VALUE obj,arg1;
|
|
|
272
304
|
Check_Type(arg1,T_ARRAY);
|
|
273
305
|
ary2cflt(arg1,c,1);
|
|
274
306
|
glIndexfv(c);
|
|
307
|
+
CHECK_GLERROR
|
|
275
308
|
return Qnil;
|
|
276
309
|
}
|
|
277
310
|
|
|
@@ -283,6 +316,7 @@ VALUE obj,arg1;
|
|
|
283
316
|
Check_Type(arg1,T_ARRAY);
|
|
284
317
|
ary2cint(arg1,c,1);
|
|
285
318
|
glIndexiv(c);
|
|
319
|
+
CHECK_GLERROR
|
|
286
320
|
return Qnil;
|
|
287
321
|
}
|
|
288
322
|
|
|
@@ -294,6 +328,7 @@ VALUE obj,arg1;
|
|
|
294
328
|
Check_Type(arg1,T_ARRAY);
|
|
295
329
|
ary2cshort(arg1,c,1);
|
|
296
330
|
glIndexsv(c);
|
|
331
|
+
CHECK_GLERROR
|
|
297
332
|
return Qnil;
|
|
298
333
|
}
|
|
299
334
|
|
|
@@ -307,18 +342,7 @@ VALUE obj,arg1,arg2;
|
|
|
307
342
|
Check_Type(arg2,T_ARRAY);
|
|
308
343
|
ary2cdbl(arg2, equation, 4);
|
|
309
344
|
glClipPlane(plane,equation);
|
|
310
|
-
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
static VALUE
|
|
314
|
-
gl_Fogf(obj,arg1,arg2)
|
|
315
|
-
VALUE obj,arg1,arg2;
|
|
316
|
-
{
|
|
317
|
-
GLenum pname;
|
|
318
|
-
GLfloat param;
|
|
319
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
320
|
-
param = (GLfloat)NUM2DBL(arg2);
|
|
321
|
-
glFogf(pname,param);
|
|
345
|
+
CHECK_GLERROR
|
|
322
346
|
return Qnil;
|
|
323
347
|
}
|
|
324
348
|
|
|
@@ -332,18 +356,7 @@ VALUE obj,arg1,arg2;
|
|
|
332
356
|
Check_Type(arg2,T_ARRAY);
|
|
333
357
|
ary2cflt(arg2,params,4);
|
|
334
358
|
glFogfv(pname,params);
|
|
335
|
-
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
static VALUE
|
|
339
|
-
gl_Fogi(obj,arg1,arg2)
|
|
340
|
-
VALUE obj,arg1,arg2;
|
|
341
|
-
{
|
|
342
|
-
GLenum pname;
|
|
343
|
-
GLint param;
|
|
344
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
345
|
-
param = (GLint)NUM2INT(arg2);
|
|
346
|
-
glFogi(pname,param);
|
|
359
|
+
CHECK_GLERROR
|
|
347
360
|
return Qnil;
|
|
348
361
|
}
|
|
349
362
|
|
|
@@ -357,20 +370,7 @@ VALUE obj,arg1,arg2;
|
|
|
357
370
|
Check_Type(arg2,T_ARRAY);
|
|
358
371
|
ary2cint(arg2,params,4);
|
|
359
372
|
glFogiv(pname,params);
|
|
360
|
-
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
static VALUE
|
|
364
|
-
gl_Lightf(obj,arg1,arg2,arg3)
|
|
365
|
-
VALUE obj,arg1,arg2,arg3;
|
|
366
|
-
{
|
|
367
|
-
GLenum light;
|
|
368
|
-
GLenum pname;
|
|
369
|
-
GLfloat param;
|
|
370
|
-
light = (GLenum)NUM2INT(arg1);
|
|
371
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
372
|
-
param = (GLfloat)NUM2DBL(arg3);
|
|
373
|
-
glLightf(light,pname,param);
|
|
373
|
+
CHECK_GLERROR
|
|
374
374
|
return Qnil;
|
|
375
375
|
}
|
|
376
376
|
|
|
@@ -386,20 +386,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
386
386
|
Check_Type(arg3,T_ARRAY);
|
|
387
387
|
ary2cflt(arg3,params,4);
|
|
388
388
|
glLightfv(light,pname,params);
|
|
389
|
-
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
static VALUE
|
|
393
|
-
gl_Lighti(obj,arg1,arg2,arg3)
|
|
394
|
-
VALUE obj,arg1,arg2,arg3;
|
|
395
|
-
{
|
|
396
|
-
GLenum light;
|
|
397
|
-
GLenum pname;
|
|
398
|
-
GLint param;
|
|
399
|
-
light = (GLenum)NUM2INT(arg1);
|
|
400
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
401
|
-
param = (GLint)NUM2INT(arg3);
|
|
402
|
-
glLighti(light,pname,param);
|
|
389
|
+
CHECK_GLERROR
|
|
403
390
|
return Qnil;
|
|
404
391
|
}
|
|
405
392
|
|
|
@@ -415,18 +402,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
415
402
|
Check_Type(arg3,T_ARRAY);
|
|
416
403
|
ary2cint(arg3,params,4);
|
|
417
404
|
glLightiv(light,pname,params);
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
static VALUE
|
|
422
|
-
gl_LightModelf(obj,arg1,arg2)
|
|
423
|
-
VALUE obj,arg1,arg2;
|
|
424
|
-
{
|
|
425
|
-
GLenum pname;
|
|
426
|
-
GLfloat param;
|
|
427
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
428
|
-
param = (GLfloat)NUM2DBL(arg2);
|
|
429
|
-
glLightModelf(pname,param);
|
|
405
|
+
CHECK_GLERROR
|
|
430
406
|
return Qnil;
|
|
431
407
|
}
|
|
432
408
|
|
|
@@ -440,18 +416,7 @@ VALUE obj,arg1,arg2;
|
|
|
440
416
|
Check_Type(arg2,T_ARRAY);
|
|
441
417
|
ary2cflt(arg2,params,4);
|
|
442
418
|
glLightModelfv(pname,params);
|
|
443
|
-
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
static VALUE
|
|
447
|
-
gl_LightModeli(obj,arg1,arg2)
|
|
448
|
-
VALUE obj,arg1,arg2;
|
|
449
|
-
{
|
|
450
|
-
GLenum pname;
|
|
451
|
-
GLint param;
|
|
452
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
453
|
-
param = (GLint)NUM2INT(arg2);
|
|
454
|
-
glLightModeli(pname,param);
|
|
419
|
+
CHECK_GLERROR
|
|
455
420
|
return Qnil;
|
|
456
421
|
}
|
|
457
422
|
|
|
@@ -465,34 +430,10 @@ VALUE obj,arg1,arg2;
|
|
|
465
430
|
Check_Type(arg2,T_ARRAY);
|
|
466
431
|
ary2cint(arg2,params,4);
|
|
467
432
|
glLightModeliv(pname,params);
|
|
433
|
+
CHECK_GLERROR
|
|
468
434
|
return Qnil;
|
|
469
435
|
}
|
|
470
436
|
|
|
471
|
-
static VALUE
|
|
472
|
-
gl_LineStipple(obj,arg1,arg2)
|
|
473
|
-
VALUE obj,arg1,arg2;
|
|
474
|
-
{
|
|
475
|
-
GLint factor;
|
|
476
|
-
GLushort pattern;
|
|
477
|
-
factor = (GLint)NUM2INT(arg1);
|
|
478
|
-
pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF);
|
|
479
|
-
glLineStipple(factor,pattern);
|
|
480
|
-
return Qnil;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
static VALUE
|
|
484
|
-
gl_Materialf(obj,arg1,arg2,arg3)
|
|
485
|
-
VALUE obj,arg1,arg2,arg3;
|
|
486
|
-
{
|
|
487
|
-
GLenum face;
|
|
488
|
-
GLenum pname;
|
|
489
|
-
GLfloat param;
|
|
490
|
-
face = (GLenum)NUM2INT(arg1);
|
|
491
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
492
|
-
param = (GLfloat)NUM2DBL(arg3);
|
|
493
|
-
glMaterialf(face,pname,param);
|
|
494
|
-
return Qnil;
|
|
495
|
-
}
|
|
496
437
|
|
|
497
438
|
static VALUE
|
|
498
439
|
gl_Materialfv(obj,arg1,arg2,arg3)
|
|
@@ -506,20 +447,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
506
447
|
Check_Type(arg3,T_ARRAY);
|
|
507
448
|
ary2cflt(arg3,params,4);
|
|
508
449
|
glMaterialfv(face,pname,params);
|
|
509
|
-
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
static VALUE
|
|
513
|
-
gl_Materiali(obj,arg1,arg2,arg3)
|
|
514
|
-
VALUE obj,arg1,arg2,arg3;
|
|
515
|
-
{
|
|
516
|
-
GLenum face;
|
|
517
|
-
GLenum pname;
|
|
518
|
-
GLint param;
|
|
519
|
-
face = (GLenum)NUM2INT(arg1);
|
|
520
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
521
|
-
param = (GLint)NUM2INT(arg3);
|
|
522
|
-
glMateriali(face,pname,param);
|
|
450
|
+
CHECK_GLERROR
|
|
523
451
|
return Qnil;
|
|
524
452
|
}
|
|
525
453
|
|
|
@@ -535,6 +463,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
535
463
|
Check_Type(arg3,T_ARRAY);
|
|
536
464
|
ary2cint(arg3,params,4);
|
|
537
465
|
glMaterialiv(face,pname,params);
|
|
466
|
+
CHECK_GLERROR
|
|
538
467
|
return Qnil;
|
|
539
468
|
}
|
|
540
469
|
|
|
@@ -542,40 +471,20 @@ static VALUE
|
|
|
542
471
|
gl_PolygonStipple(obj,arg1)
|
|
543
472
|
VALUE obj,arg1;
|
|
544
473
|
{
|
|
545
|
-
GLubyte mask[128];
|
|
546
|
-
|
|
547
474
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
548
475
|
glPolygonStipple((GLvoid *)NUM2INT(arg1));
|
|
549
476
|
} else {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
rb_raise(rb_eArgError, "string length:%d", RSTRING(arg1)->len);
|
|
557
|
-
memcpy(mask, RSTRING(arg1)->ptr, 128);
|
|
558
|
-
}
|
|
559
|
-
else
|
|
560
|
-
Check_Type(arg1,T_STRING); /* force exception */
|
|
561
|
-
glPolygonStipple(mask);
|
|
477
|
+
VALUE data;
|
|
478
|
+
data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg1);
|
|
479
|
+
if (RSTRING_LEN(data) < 128)
|
|
480
|
+
rb_raise(rb_eArgError, "string length:%li", RSTRING_LEN(data));
|
|
481
|
+
|
|
482
|
+
glPolygonStipple((GLubyte *)RSTRING_PTR(data));
|
|
562
483
|
}
|
|
484
|
+
CHECK_GLERROR
|
|
563
485
|
return Qnil;
|
|
564
486
|
}
|
|
565
487
|
|
|
566
|
-
static VALUE
|
|
567
|
-
gl_TexParameterf(obj,arg1,arg2,arg3)
|
|
568
|
-
VALUE obj,arg1,arg2,arg3;
|
|
569
|
-
{
|
|
570
|
-
GLenum target;
|
|
571
|
-
GLenum pname;
|
|
572
|
-
GLfloat param;
|
|
573
|
-
target = (GLenum)NUM2INT(arg1);
|
|
574
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
575
|
-
param = (GLfloat)NUM2DBL(arg3);
|
|
576
|
-
glTexParameterf(target,pname,param);
|
|
577
|
-
return Qnil;
|
|
578
|
-
}
|
|
579
488
|
|
|
580
489
|
static VALUE
|
|
581
490
|
gl_TexParameterfv(obj,arg1,arg2,arg3)
|
|
@@ -589,20 +498,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
589
498
|
Check_Type(arg3,T_ARRAY);
|
|
590
499
|
ary2cflt(arg3,params,4);
|
|
591
500
|
glTexParameterfv(target,pname,params);
|
|
592
|
-
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
static VALUE
|
|
596
|
-
gl_TexParameteri(obj,arg1,arg2,arg3)
|
|
597
|
-
VALUE obj,arg1,arg2,arg3;
|
|
598
|
-
{
|
|
599
|
-
GLenum target;
|
|
600
|
-
GLenum pname;
|
|
601
|
-
GLint param;
|
|
602
|
-
target = (GLenum)NUM2INT(arg1);
|
|
603
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
604
|
-
param = (GLint)NUM2INT(arg3);
|
|
605
|
-
glTexParameteri(target,pname,param);
|
|
501
|
+
CHECK_GLERROR
|
|
606
502
|
return Qnil;
|
|
607
503
|
}
|
|
608
504
|
|
|
@@ -618,6 +514,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
618
514
|
Check_Type(arg3,T_ARRAY);
|
|
619
515
|
ary2cint(arg3,params,4);
|
|
620
516
|
glTexParameteriv(target,pname,params);
|
|
517
|
+
CHECK_GLERROR
|
|
621
518
|
return Qnil;
|
|
622
519
|
}
|
|
623
520
|
|
|
@@ -643,17 +540,20 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
|
|
|
643
540
|
|
|
644
541
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
645
542
|
glTexImage1D(target,level,components,width,border,format,type,(GLvoid *)NUM2INT(arg8));
|
|
543
|
+
CHECK_GLERROR
|
|
646
544
|
return Qnil;
|
|
647
545
|
}
|
|
648
546
|
|
|
649
547
|
if (target == GL_PROXY_TEXTURE_1D || NIL_P(arg8)) { /* proxy texture, no data read */
|
|
650
548
|
pixels = NULL;
|
|
651
549
|
} else {
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
550
|
+
VALUE data;
|
|
551
|
+
data = pack_array_or_pass_string(type,arg8);
|
|
552
|
+
CheckDataSize(type,format,width,data);
|
|
553
|
+
pixels = RSTRING_PTR(data);
|
|
655
554
|
}
|
|
656
555
|
glTexImage1D(target,level,components,width,border,format,type,pixels);
|
|
556
|
+
CHECK_GLERROR
|
|
657
557
|
return Qnil;
|
|
658
558
|
}
|
|
659
559
|
|
|
@@ -681,31 +581,20 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
|
|
|
681
581
|
|
|
682
582
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
683
583
|
glTexImage2D(target,level,components,width,height,border,format,type,(GLvoid *)NUM2INT(arg9));
|
|
584
|
+
CHECK_GLERROR
|
|
684
585
|
return Qnil;
|
|
685
586
|
}
|
|
686
587
|
|
|
687
588
|
if (target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_1D_ARRAY_EXT || target == GL_PROXY_TEXTURE_CUBE_MAP || NIL_P(arg9)) { /* proxy texture, no data read */
|
|
688
589
|
pixels = NULL;
|
|
689
590
|
} else {
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
591
|
+
VALUE data;
|
|
592
|
+
data = pack_array_or_pass_string(type,arg9);
|
|
593
|
+
CheckDataSize(type,format,width*height,data);
|
|
594
|
+
pixels = RSTRING_PTR(data);
|
|
693
595
|
}
|
|
694
596
|
glTexImage2D(target,level,components,width,height,border,format,type,pixels);
|
|
695
|
-
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
static VALUE
|
|
699
|
-
gl_TexEnvf(obj,arg1,arg2,arg3)
|
|
700
|
-
VALUE obj,arg1,arg2,arg3;
|
|
701
|
-
{
|
|
702
|
-
GLenum target;
|
|
703
|
-
GLenum pname;
|
|
704
|
-
GLfloat param;
|
|
705
|
-
target = (GLenum)NUM2INT(arg1);
|
|
706
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
707
|
-
param = (GLfloat)NUM2DBL(arg3);
|
|
708
|
-
glTexEnvf(target,pname,param);
|
|
597
|
+
CHECK_GLERROR
|
|
709
598
|
return Qnil;
|
|
710
599
|
}
|
|
711
600
|
|
|
@@ -721,20 +610,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
721
610
|
Check_Type(arg3,T_ARRAY);
|
|
722
611
|
ary2cflt(arg3,params,4);
|
|
723
612
|
glTexEnvfv(target,pname,params);
|
|
724
|
-
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
static VALUE
|
|
728
|
-
gl_TexEnvi(obj,arg1,arg2,arg3)
|
|
729
|
-
VALUE obj,arg1,arg2,arg3;
|
|
730
|
-
{
|
|
731
|
-
GLenum target;
|
|
732
|
-
GLenum pname;
|
|
733
|
-
GLint param;
|
|
734
|
-
target = (GLenum)NUM2INT(arg1);
|
|
735
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
736
|
-
param = (GLint)NUM2INT(arg3);
|
|
737
|
-
glTexEnvi(target,pname,param);
|
|
613
|
+
CHECK_GLERROR
|
|
738
614
|
return Qnil;
|
|
739
615
|
}
|
|
740
616
|
|
|
@@ -750,22 +626,10 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
750
626
|
Check_Type(arg3,T_ARRAY);
|
|
751
627
|
ary2cint(arg3,params,4);
|
|
752
628
|
glTexEnviv(target,pname,params);
|
|
629
|
+
CHECK_GLERROR
|
|
753
630
|
return Qnil;
|
|
754
631
|
}
|
|
755
632
|
|
|
756
|
-
static VALUE
|
|
757
|
-
gl_TexGend(obj,arg1,arg2,arg3)
|
|
758
|
-
VALUE obj,arg1,arg2,arg3;
|
|
759
|
-
{
|
|
760
|
-
GLenum coord;
|
|
761
|
-
GLenum pname;
|
|
762
|
-
GLdouble param;
|
|
763
|
-
coord = (GLenum)NUM2INT(arg1);
|
|
764
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
765
|
-
param = (GLdouble)NUM2DBL(arg3);
|
|
766
|
-
glTexGend(coord,pname,param);
|
|
767
|
-
return Qnil;
|
|
768
|
-
}
|
|
769
633
|
|
|
770
634
|
static VALUE
|
|
771
635
|
gl_TexGendv(obj,arg1,arg2,arg3)
|
|
@@ -779,24 +643,11 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
779
643
|
Check_Type(arg3,T_ARRAY);
|
|
780
644
|
ary2cdbl(arg3,params,4);
|
|
781
645
|
glTexGendv(coord,pname,params);
|
|
646
|
+
CHECK_GLERROR
|
|
782
647
|
return Qnil;
|
|
783
648
|
}
|
|
784
649
|
|
|
785
650
|
|
|
786
|
-
static VALUE
|
|
787
|
-
gl_TexGenf(obj,arg1,arg2,arg3)
|
|
788
|
-
VALUE obj,arg1,arg2,arg3;
|
|
789
|
-
{
|
|
790
|
-
GLenum coord;
|
|
791
|
-
GLenum pname;
|
|
792
|
-
GLfloat param;
|
|
793
|
-
coord = (GLenum)NUM2INT(arg1);
|
|
794
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
795
|
-
param = (GLfloat)NUM2DBL(arg3);
|
|
796
|
-
glTexGenf(coord,pname,param);
|
|
797
|
-
return Qnil;
|
|
798
|
-
}
|
|
799
|
-
|
|
800
651
|
static VALUE
|
|
801
652
|
gl_TexGenfv(obj,arg1,arg2,arg3)
|
|
802
653
|
VALUE obj,arg1,arg2,arg3;
|
|
@@ -809,22 +660,10 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
809
660
|
Check_Type(arg3,T_ARRAY);
|
|
810
661
|
ary2cflt(arg3,params,4);
|
|
811
662
|
glTexGenfv(coord,pname,params);
|
|
663
|
+
CHECK_GLERROR
|
|
812
664
|
return Qnil;
|
|
813
665
|
}
|
|
814
666
|
|
|
815
|
-
static VALUE
|
|
816
|
-
gl_TexGeni(obj,arg1,arg2,arg3)
|
|
817
|
-
VALUE obj,arg1,arg2,arg3;
|
|
818
|
-
{
|
|
819
|
-
GLenum coord;
|
|
820
|
-
GLenum pname;
|
|
821
|
-
GLint param;
|
|
822
|
-
coord = (GLenum)NUM2INT(arg1);
|
|
823
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
824
|
-
param = (GLint)NUM2INT(arg3);
|
|
825
|
-
glTexGeni(coord,pname,param);
|
|
826
|
-
return Qnil;
|
|
827
|
-
}
|
|
828
667
|
|
|
829
668
|
static VALUE
|
|
830
669
|
gl_TexGeniv(obj,arg1,arg2,arg3)
|
|
@@ -838,6 +677,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
838
677
|
Check_Type(arg3,T_ARRAY);
|
|
839
678
|
ary2cint(arg3,params,4);
|
|
840
679
|
glTexGeniv(coord,pname,params);
|
|
680
|
+
CHECK_GLERROR
|
|
841
681
|
return Qnil;
|
|
842
682
|
}
|
|
843
683
|
static VALUE g_current_feed_buffer;
|
|
@@ -851,7 +691,8 @@ VALUE obj,arg1,arg2;
|
|
|
851
691
|
type = (GLenum)NUM2INT(arg2);
|
|
852
692
|
g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
|
|
853
693
|
rb_str_freeze(g_current_feed_buffer);
|
|
854
|
-
glFeedbackBuffer(size, type, (GLfloat*)
|
|
694
|
+
glFeedbackBuffer(size, type, (GLfloat*)RSTRING_PTR(g_current_feed_buffer));
|
|
695
|
+
CHECK_GLERROR
|
|
855
696
|
return g_current_feed_buffer;
|
|
856
697
|
}
|
|
857
698
|
|
|
@@ -864,32 +705,11 @@ VALUE obj,arg1;
|
|
|
864
705
|
size = (GLsizei)NUM2UINT(arg1);
|
|
865
706
|
g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
|
|
866
707
|
rb_str_freeze(g_current_sel_buffer);
|
|
867
|
-
glSelectBuffer(size, (GLuint*)
|
|
708
|
+
glSelectBuffer(size, (GLuint*)RSTRING_PTR(g_current_sel_buffer));
|
|
709
|
+
CHECK_GLERROR
|
|
868
710
|
return g_current_sel_buffer;
|
|
869
711
|
}
|
|
870
712
|
|
|
871
|
-
static VALUE
|
|
872
|
-
gl_RenderMode(obj,arg1)
|
|
873
|
-
VALUE obj,arg1;
|
|
874
|
-
{
|
|
875
|
-
GLenum mode;
|
|
876
|
-
GLint ret;
|
|
877
|
-
mode = (GLenum)NUM2INT(arg1);
|
|
878
|
-
ret = glRenderMode(mode);
|
|
879
|
-
return INT2NUM(ret);
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
static VALUE
|
|
883
|
-
gl_Accum(obj,arg1,arg2)
|
|
884
|
-
VALUE obj,arg1,arg2;
|
|
885
|
-
{
|
|
886
|
-
GLenum op;
|
|
887
|
-
GLfloat value;
|
|
888
|
-
op = (GLenum)NUM2INT(arg1);
|
|
889
|
-
value = (GLfloat)NUM2DBL(arg2);
|
|
890
|
-
glAccum(op,value);
|
|
891
|
-
return Qnil;
|
|
892
|
-
}
|
|
893
713
|
|
|
894
714
|
static VALUE
|
|
895
715
|
gl_Map1d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
|
|
@@ -910,11 +730,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
|
910
730
|
stride = (GLint)NUM2INT(arg4);
|
|
911
731
|
order = (GLint)NUM2INT(arg5);
|
|
912
732
|
points = ALLOC_N(GLdouble, order*stride);
|
|
913
|
-
work_ary =
|
|
914
|
-
mary2ary(arg6, work_ary);
|
|
733
|
+
work_ary = rb_funcall(arg6,rb_intern("flatten"),0);
|
|
915
734
|
ary2cdbl(work_ary, points, order*stride);
|
|
916
735
|
glMap1d(target, u1, u2, stride, order, points);
|
|
917
736
|
xfree(points);
|
|
737
|
+
CHECK_GLERROR
|
|
918
738
|
return Qnil;
|
|
919
739
|
}
|
|
920
740
|
|
|
@@ -937,11 +757,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
|
937
757
|
stride = (GLint)NUM2INT(arg4);
|
|
938
758
|
order = (GLint)NUM2INT(arg5);
|
|
939
759
|
points = ALLOC_N(GLfloat, order*stride);
|
|
940
|
-
work_ary =
|
|
941
|
-
mary2ary(arg6, work_ary);
|
|
760
|
+
work_ary = rb_funcall(arg6,rb_intern("flatten"),0);
|
|
942
761
|
ary2cflt(work_ary, points, order*stride);
|
|
943
762
|
glMap1f(target, u1, u2, stride, order, points);
|
|
944
763
|
xfree(points);
|
|
764
|
+
CHECK_GLERROR
|
|
945
765
|
return Qnil;
|
|
946
766
|
}
|
|
947
767
|
|
|
@@ -972,11 +792,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
|
|
|
972
792
|
vstride = (GLint)NUM2INT(arg8);
|
|
973
793
|
vorder = (GLint)NUM2INT(arg9);
|
|
974
794
|
points = ALLOC_N(GLdouble, MAX(ustride*uorder, vstride*vorder));
|
|
975
|
-
work_ary =
|
|
976
|
-
|
|
977
|
-
ary2cdbl(arg10, points, MAX(ustride*uorder, vstride*vorder));
|
|
795
|
+
work_ary = rb_funcall(arg10,rb_intern("flatten"),0);
|
|
796
|
+
ary2cdbl(work_ary, points, MAX(ustride*uorder, vstride*vorder));
|
|
978
797
|
glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
|
|
979
798
|
xfree(points);
|
|
799
|
+
CHECK_GLERROR
|
|
980
800
|
return Qnil;
|
|
981
801
|
}
|
|
982
802
|
|
|
@@ -1007,79 +827,11 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
|
|
|
1007
827
|
vstride = (GLint)NUM2INT(arg8);
|
|
1008
828
|
vorder = (GLint)NUM2INT(arg9);
|
|
1009
829
|
points = ALLOC_N(GLfloat, MAX(ustride*uorder, vstride*vorder));
|
|
1010
|
-
work_ary =
|
|
1011
|
-
|
|
1012
|
-
ary2cflt(arg10, points, MAX(ustride*uorder, vstride*vorder));
|
|
830
|
+
work_ary = rb_funcall(arg10,rb_intern("flatten"),0);
|
|
831
|
+
ary2cflt(work_ary, points, MAX(ustride*uorder, vstride*vorder));
|
|
1013
832
|
glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
|
|
1014
833
|
xfree(points);
|
|
1015
|
-
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
|
-
static VALUE
|
|
1019
|
-
gl_MapGrid1d(obj,arg1,arg2,arg3)
|
|
1020
|
-
VALUE obj,arg1,arg2,arg3;
|
|
1021
|
-
{
|
|
1022
|
-
GLint un;
|
|
1023
|
-
GLdouble u1;
|
|
1024
|
-
GLdouble u2;
|
|
1025
|
-
un = (GLint)NUM2INT(arg1);
|
|
1026
|
-
u1 = (GLdouble)NUM2DBL(arg2);
|
|
1027
|
-
u2 = (GLdouble)NUM2DBL(arg3);
|
|
1028
|
-
glMapGrid1d(un,u1,u2);
|
|
1029
|
-
return Qnil;
|
|
1030
|
-
}
|
|
1031
|
-
|
|
1032
|
-
static VALUE
|
|
1033
|
-
gl_MapGrid1f(obj,arg1,arg2,arg3)
|
|
1034
|
-
VALUE obj,arg1,arg2,arg3;
|
|
1035
|
-
{
|
|
1036
|
-
GLint un;
|
|
1037
|
-
GLfloat u1;
|
|
1038
|
-
GLfloat u2;
|
|
1039
|
-
un = (GLint)NUM2INT(arg1);
|
|
1040
|
-
u1 = (GLfloat)NUM2DBL(arg2);
|
|
1041
|
-
u2 = (GLfloat)NUM2DBL(arg3);
|
|
1042
|
-
glMapGrid1f(un,u1,u2);
|
|
1043
|
-
return Qnil;
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
static VALUE
|
|
1047
|
-
gl_MapGrid2d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
|
|
1048
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
1049
|
-
{
|
|
1050
|
-
GLint un;
|
|
1051
|
-
GLdouble u1;
|
|
1052
|
-
GLdouble u2;
|
|
1053
|
-
GLint vn;
|
|
1054
|
-
GLdouble v1;
|
|
1055
|
-
GLdouble v2;
|
|
1056
|
-
un = (GLint)NUM2INT(arg1);
|
|
1057
|
-
u1 = (GLdouble)NUM2DBL(arg2);
|
|
1058
|
-
u2 = (GLdouble)NUM2DBL(arg3);
|
|
1059
|
-
vn = (GLint)NUM2INT(arg4);
|
|
1060
|
-
v1 = (GLdouble)NUM2DBL(arg5);
|
|
1061
|
-
v2 = (GLdouble)NUM2DBL(arg6);
|
|
1062
|
-
glMapGrid2d(un,u1,u2,vn,v1,v2);
|
|
1063
|
-
return Qnil;
|
|
1064
|
-
}
|
|
1065
|
-
|
|
1066
|
-
static VALUE
|
|
1067
|
-
gl_MapGrid2f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
|
|
1068
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
1069
|
-
{
|
|
1070
|
-
GLint un;
|
|
1071
|
-
GLfloat u1;
|
|
1072
|
-
GLfloat u2;
|
|
1073
|
-
GLint vn;
|
|
1074
|
-
GLfloat v1;
|
|
1075
|
-
GLfloat v2;
|
|
1076
|
-
un = (GLint)NUM2INT(arg1);
|
|
1077
|
-
u1 = (GLfloat)NUM2DBL(arg2);
|
|
1078
|
-
u2 = (GLfloat)NUM2DBL(arg3);
|
|
1079
|
-
vn = (GLint)NUM2INT(arg4);
|
|
1080
|
-
v1 = (GLfloat)NUM2DBL(arg5);
|
|
1081
|
-
v2 = (GLfloat)NUM2DBL(arg6);
|
|
1082
|
-
glMapGrid2f(un,u1,u2,vn,v1,v2);
|
|
834
|
+
CHECK_GLERROR
|
|
1083
835
|
return Qnil;
|
|
1084
836
|
}
|
|
1085
837
|
|
|
@@ -1091,6 +843,7 @@ VALUE obj,arg1;
|
|
|
1091
843
|
Check_Type(arg1,T_ARRAY);
|
|
1092
844
|
ary2cdbl(arg1,params,1);
|
|
1093
845
|
glEvalCoord1dv(params);
|
|
846
|
+
CHECK_GLERROR
|
|
1094
847
|
return Qnil;
|
|
1095
848
|
}
|
|
1096
849
|
|
|
@@ -1102,6 +855,7 @@ VALUE obj,arg1;
|
|
|
1102
855
|
Check_Type(arg1,T_ARRAY);
|
|
1103
856
|
ary2cflt(arg1,params,1);
|
|
1104
857
|
glEvalCoord1fv(params);
|
|
858
|
+
CHECK_GLERROR
|
|
1105
859
|
return Qnil;
|
|
1106
860
|
}
|
|
1107
861
|
|
|
@@ -1113,6 +867,7 @@ VALUE obj,arg1;
|
|
|
1113
867
|
Check_Type(arg1,T_ARRAY);
|
|
1114
868
|
ary2cdbl(arg1,params,2);
|
|
1115
869
|
glEvalCoord2dv(params);
|
|
870
|
+
CHECK_GLERROR
|
|
1116
871
|
return Qnil;
|
|
1117
872
|
}
|
|
1118
873
|
|
|
@@ -1124,114 +879,10 @@ VALUE obj,arg1;
|
|
|
1124
879
|
Check_Type(arg1,T_ARRAY);
|
|
1125
880
|
ary2cflt(arg1,params,2);
|
|
1126
881
|
glEvalCoord2fv(params);
|
|
882
|
+
CHECK_GLERROR
|
|
1127
883
|
return Qnil;
|
|
1128
884
|
}
|
|
1129
885
|
|
|
1130
|
-
static VALUE
|
|
1131
|
-
gl_EvalMesh1(obj,arg1,arg2,arg3)
|
|
1132
|
-
VALUE obj,arg1,arg2,arg3;
|
|
1133
|
-
{
|
|
1134
|
-
GLenum mode;
|
|
1135
|
-
GLint i1;
|
|
1136
|
-
GLint i2;
|
|
1137
|
-
mode = (GLenum)NUM2INT(arg1);
|
|
1138
|
-
i1 = (GLint)NUM2INT(arg2);
|
|
1139
|
-
i2 = (GLint)NUM2INT(arg3);
|
|
1140
|
-
glEvalMesh1(mode,i1,i2);
|
|
1141
|
-
return Qnil;
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
static VALUE
|
|
1145
|
-
gl_EvalMesh2(obj,arg1,arg2,arg3,arg4,arg5)
|
|
1146
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
|
1147
|
-
{
|
|
1148
|
-
GLenum mode;
|
|
1149
|
-
GLint i1;
|
|
1150
|
-
GLint i2;
|
|
1151
|
-
GLint j1;
|
|
1152
|
-
GLint j2;
|
|
1153
|
-
mode = (GLenum)NUM2INT(arg1);
|
|
1154
|
-
i1 = (GLint)NUM2INT(arg2);
|
|
1155
|
-
i2 = (GLint)NUM2INT(arg3);
|
|
1156
|
-
j1 = (GLint)NUM2INT(arg4);
|
|
1157
|
-
j2 = (GLint)NUM2INT(arg5);
|
|
1158
|
-
glEvalMesh2(mode,i1,i2,j1,j2);
|
|
1159
|
-
return Qnil;
|
|
1160
|
-
}
|
|
1161
|
-
|
|
1162
|
-
static VALUE
|
|
1163
|
-
gl_AlphaFunc(obj,arg1,arg2)
|
|
1164
|
-
VALUE obj,arg1,arg2;
|
|
1165
|
-
{
|
|
1166
|
-
GLenum func;
|
|
1167
|
-
GLclampf ref;
|
|
1168
|
-
func = (GLenum)NUM2INT(arg1);
|
|
1169
|
-
ref = (GLclampf)NUM2DBL(arg2);
|
|
1170
|
-
glAlphaFunc(func,ref);
|
|
1171
|
-
return Qnil;
|
|
1172
|
-
}
|
|
1173
|
-
|
|
1174
|
-
static VALUE
|
|
1175
|
-
gl_StencilFunc(obj,arg1,arg2,arg3)
|
|
1176
|
-
VALUE obj,arg1,arg2,arg3;
|
|
1177
|
-
{
|
|
1178
|
-
GLenum func;
|
|
1179
|
-
GLint ref;
|
|
1180
|
-
GLuint mask;
|
|
1181
|
-
func = (GLenum)NUM2INT(arg1);
|
|
1182
|
-
ref = (GLint)NUM2INT(arg2);
|
|
1183
|
-
mask = (GLuint)NUM2UINT(arg3);
|
|
1184
|
-
glStencilFunc(func,ref,mask);
|
|
1185
|
-
return Qnil;
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
static VALUE
|
|
1189
|
-
gl_PixelTransferf(obj,arg1,arg2)
|
|
1190
|
-
VALUE obj,arg1,arg2;
|
|
1191
|
-
{
|
|
1192
|
-
GLenum pname;
|
|
1193
|
-
GLfloat param;
|
|
1194
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
1195
|
-
param = (GLfloat)NUM2DBL(arg2);
|
|
1196
|
-
glPixelTransferf(pname,param);
|
|
1197
|
-
return Qnil;
|
|
1198
|
-
}
|
|
1199
|
-
|
|
1200
|
-
static VALUE
|
|
1201
|
-
gl_PixelTransferi(obj,arg1,arg2)
|
|
1202
|
-
VALUE obj,arg1,arg2;
|
|
1203
|
-
{
|
|
1204
|
-
GLenum pname;
|
|
1205
|
-
GLint param;
|
|
1206
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
1207
|
-
param = (GLint)NUM2INT(arg2);
|
|
1208
|
-
glPixelTransferi(pname,param);
|
|
1209
|
-
return Qnil;
|
|
1210
|
-
}
|
|
1211
|
-
|
|
1212
|
-
static VALUE
|
|
1213
|
-
gl_PixelStoref(obj,arg1,arg2)
|
|
1214
|
-
VALUE obj,arg1,arg2;
|
|
1215
|
-
{
|
|
1216
|
-
GLenum pname;
|
|
1217
|
-
GLfloat param;
|
|
1218
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
1219
|
-
param = (GLfloat)NUM2DBL(arg2);
|
|
1220
|
-
glPixelStoref(pname,param);
|
|
1221
|
-
return Qnil;
|
|
1222
|
-
}
|
|
1223
|
-
|
|
1224
|
-
static VALUE
|
|
1225
|
-
gl_PixelStorei(obj,arg1,arg2)
|
|
1226
|
-
VALUE obj,arg1,arg2;
|
|
1227
|
-
{
|
|
1228
|
-
GLenum pname;
|
|
1229
|
-
GLint param;
|
|
1230
|
-
pname = (GLenum)NUM2INT(arg1);
|
|
1231
|
-
param = (GLint)NUM2INT(arg2);
|
|
1232
|
-
glPixelStorei(pname,param);
|
|
1233
|
-
return Qnil;
|
|
1234
|
-
}
|
|
1235
886
|
|
|
1236
887
|
#define GLPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
|
|
1237
888
|
static VALUE \
|
|
@@ -1265,6 +916,7 @@ VALUE obj; \
|
|
|
1265
916
|
glPixelMap##_type_##v(map,size,(GLvoid *)NUM2INT(args[2])); \
|
|
1266
917
|
break; \
|
|
1267
918
|
} \
|
|
919
|
+
CHECK_GLERROR \
|
|
1268
920
|
return Qnil; \
|
|
1269
921
|
}
|
|
1270
922
|
|
|
@@ -1273,23 +925,6 @@ GLPIXELMAP_FUNC(ui,GLuint,ary2cuint)
|
|
|
1273
925
|
GLPIXELMAP_FUNC(us,GLushort,ary2cushort)
|
|
1274
926
|
#undef GLPIXELMAP_FUNC
|
|
1275
927
|
|
|
1276
|
-
static VALUE
|
|
1277
|
-
gl_CopyPixels(obj,arg1,arg2,arg3,arg4,arg5)
|
|
1278
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
|
1279
|
-
{
|
|
1280
|
-
GLint x;
|
|
1281
|
-
GLint y;
|
|
1282
|
-
GLsizei width;
|
|
1283
|
-
GLsizei height;
|
|
1284
|
-
GLenum type;
|
|
1285
|
-
x = (GLint)NUM2INT(arg1);
|
|
1286
|
-
y = (GLint)NUM2INT(arg2);
|
|
1287
|
-
width = (GLsizei)NUM2UINT(arg3);
|
|
1288
|
-
height = (GLsizei)NUM2UINT(arg4);
|
|
1289
|
-
type = (GLenum)NUM2INT(arg5);
|
|
1290
|
-
glCopyPixels(x,y,width,height,type);
|
|
1291
|
-
return Qnil;
|
|
1292
|
-
}
|
|
1293
928
|
|
|
1294
929
|
static VALUE
|
|
1295
930
|
gl_ReadPixels(argc,argv,obj)
|
|
@@ -1321,8 +956,9 @@ VALUE obj;
|
|
|
1321
956
|
rb_raise(rb_eArgError, "Pixel pack buffer bound, but offset argument missing");
|
|
1322
957
|
pixels = allocate_buffer_with_string(GetDataSize(type,format,width*height));
|
|
1323
958
|
FORCE_PIXEL_STORE_MODE
|
|
1324
|
-
glReadPixels(x,y,width,height,format,type,(GLvoid*)
|
|
959
|
+
glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING_PTR(pixels));
|
|
1325
960
|
RESTORE_PIXEL_STORE_MODE
|
|
961
|
+
CHECK_GLERROR
|
|
1326
962
|
return pixels;
|
|
1327
963
|
break;
|
|
1328
964
|
case 7:
|
|
@@ -1331,6 +967,7 @@ VALUE obj;
|
|
|
1331
967
|
FORCE_PIXEL_STORE_MODE
|
|
1332
968
|
glReadPixels(x,y,width,height,format,type,(GLvoid*)NUM2INT(args[6]));
|
|
1333
969
|
RESTORE_PIXEL_STORE_MODE
|
|
970
|
+
CHECK_GLERROR
|
|
1334
971
|
return Qnil;
|
|
1335
972
|
break;
|
|
1336
973
|
}
|
|
@@ -1352,11 +989,13 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
|
|
1352
989
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
1353
990
|
glDrawPixels(width,height,format,type,(GLvoid *)NUM2INT(arg5));
|
|
1354
991
|
} else {
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
992
|
+
VALUE data;
|
|
993
|
+
data = pack_array_or_pass_string(type,arg5);
|
|
994
|
+
CheckDataSize(type,format,width*height,data);
|
|
995
|
+
pixels = RSTRING_PTR(data);
|
|
1358
996
|
glDrawPixels(width,height,format,type,pixels);
|
|
1359
997
|
}
|
|
998
|
+
CHECK_GLERROR
|
|
1360
999
|
return Qnil;
|
|
1361
1000
|
}
|
|
1362
1001
|
|
|
@@ -1373,6 +1012,7 @@ VALUE obj,arg1;
|
|
|
1373
1012
|
retary = rb_ary_new2(4);
|
|
1374
1013
|
for(i=0;i<4;i++)
|
|
1375
1014
|
rb_ary_push(retary, rb_float_new(equation[i]));
|
|
1015
|
+
CHECK_GLERROR
|
|
1376
1016
|
return retary;
|
|
1377
1017
|
}
|
|
1378
1018
|
|
|
@@ -1415,6 +1055,7 @@ VALUE obj,arg1; \
|
|
|
1415
1055
|
case GL_CONSTANT_COLOR1_NV: \
|
|
1416
1056
|
case GL_TEXTURE_COLOR_WRITEMASK_SGIS: \
|
|
1417
1057
|
case GL_FLOAT_CLEAR_COLOR_VALUE_NV: \
|
|
1058
|
+
case GL_RGBA_SIGNED_COMPONENTS_EXT: \
|
|
1418
1059
|
nitems = 4; \
|
|
1419
1060
|
break; \
|
|
1420
1061
|
case GL_CURRENT_NORMAL: \
|
|
@@ -1449,6 +1090,7 @@ VALUE obj,arg1; \
|
|
|
1449
1090
|
case GL_TRANSPOSE_PROJECTION_MATRIX: \
|
|
1450
1091
|
case GL_TRANSPOSE_TEXTURE_MATRIX: \
|
|
1451
1092
|
case GL_TRANSPOSE_COLOR_MATRIX: \
|
|
1093
|
+
case GL_TRANSPOSE_CURRENT_MATRIX_ARB: \
|
|
1452
1094
|
case GL_MODELVIEW0_ARB: \
|
|
1453
1095
|
case GL_MODELVIEW1_ARB: \
|
|
1454
1096
|
case GL_MODELVIEW2_ARB: \
|
|
@@ -1493,41 +1135,38 @@ VALUE obj,arg1; \
|
|
|
1493
1135
|
for (j = 0; j < 4; j++) \
|
|
1494
1136
|
rb_ary_push(ary2, _conv_(items[i*4+j])); \
|
|
1495
1137
|
} \
|
|
1138
|
+
CHECK_GLERROR \
|
|
1496
1139
|
return ary; \
|
|
1497
1140
|
case GL_POLYGON_STIPPLE: \
|
|
1498
1141
|
glGet##_name_##v(pname, items); \
|
|
1142
|
+
CHECK_GLERROR \
|
|
1499
1143
|
return rb_str_new((const char*)items, 32); \
|
|
1500
1144
|
case GL_COMPRESSED_TEXTURE_FORMATS: \
|
|
1501
1145
|
glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &nitems); \
|
|
1146
|
+
CHECK_GLERROR \
|
|
1502
1147
|
if (nitems<=0||nitems>64) \
|
|
1503
1148
|
return INT2NUM(0); \
|
|
1504
1149
|
break; \
|
|
1505
1150
|
default: /* size=1 */ \
|
|
1506
1151
|
glGet##_name_##v(pname, items); \
|
|
1152
|
+
CHECK_GLERROR \
|
|
1507
1153
|
return _conv_(items[0]); \
|
|
1508
1154
|
} \
|
|
1509
1155
|
glGet##_name_##v(pname, items); \
|
|
1510
1156
|
ary = rb_ary_new2(nitems); \
|
|
1511
1157
|
for (i = 0; i < nitems; i++) \
|
|
1512
1158
|
rb_ary_push(ary, _conv_(items[i])); \
|
|
1159
|
+
CHECK_GLERROR \
|
|
1513
1160
|
return ary; \
|
|
1514
1161
|
}
|
|
1515
1162
|
|
|
1516
1163
|
GLGET_FUNC(Double,GLdouble,rb_float_new)
|
|
1517
1164
|
GLGET_FUNC(Float,GLfloat,rb_float_new)
|
|
1518
1165
|
GLGET_FUNC(Integer,GLint,INT2NUM)
|
|
1519
|
-
GLGET_FUNC(Boolean,GLboolean,
|
|
1166
|
+
GLGET_FUNC(Boolean,GLboolean,GLBOOL2RUBY)
|
|
1520
1167
|
|
|
1521
1168
|
#undef GLGET_FUNC
|
|
1522
1169
|
|
|
1523
|
-
static VALUE
|
|
1524
|
-
gl_GetError(obj)
|
|
1525
|
-
VALUE obj;
|
|
1526
|
-
{
|
|
1527
|
-
GLenum ret;
|
|
1528
|
-
ret = glGetError();
|
|
1529
|
-
return INT2NUM(ret);
|
|
1530
|
-
}
|
|
1531
1170
|
|
|
1532
1171
|
static VALUE
|
|
1533
1172
|
gl_GetLightfv(obj,arg1,arg2)
|
|
@@ -1537,8 +1176,6 @@ VALUE obj,arg1,arg2;
|
|
|
1537
1176
|
GLenum pname;
|
|
1538
1177
|
GLsizei size;
|
|
1539
1178
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
|
1540
|
-
VALUE retary;
|
|
1541
|
-
int i;
|
|
1542
1179
|
light = (GLenum)NUM2INT(arg1);
|
|
1543
1180
|
pname = (GLenum)NUM2INT(arg2);
|
|
1544
1181
|
switch(pname) {
|
|
@@ -1563,10 +1200,7 @@ VALUE obj,arg1,arg2;
|
|
|
1563
1200
|
break; /* not reached */
|
|
1564
1201
|
}
|
|
1565
1202
|
glGetLightfv(light,pname,params);
|
|
1566
|
-
|
|
1567
|
-
for(i=0;i<size;i++)
|
|
1568
|
-
rb_ary_push(retary, rb_float_new(params[i]));
|
|
1569
|
-
return retary;
|
|
1203
|
+
RET_ARRAY_OR_SINGLE(size,rb_float_new,params)
|
|
1570
1204
|
}
|
|
1571
1205
|
|
|
1572
1206
|
static VALUE
|
|
@@ -1577,8 +1211,6 @@ VALUE obj,arg1,arg2;
|
|
|
1577
1211
|
GLenum pname;
|
|
1578
1212
|
GLsizei size;
|
|
1579
1213
|
GLint params[4] = {0,0,0,0};
|
|
1580
|
-
VALUE retary;
|
|
1581
|
-
int i;
|
|
1582
1214
|
light = (GLenum)NUM2INT(arg1);
|
|
1583
1215
|
pname = (GLenum)NUM2INT(arg2);
|
|
1584
1216
|
switch(pname) {
|
|
@@ -1603,194 +1235,71 @@ VALUE obj,arg1,arg2;
|
|
|
1603
1235
|
break; /* not reached */
|
|
1604
1236
|
}
|
|
1605
1237
|
glGetLightiv(light,pname,params);
|
|
1606
|
-
|
|
1607
|
-
for(i=0;i<size;i++)
|
|
1608
|
-
rb_ary_push(retary, INT2NUM(params[i]));
|
|
1609
|
-
return retary;
|
|
1610
|
-
}
|
|
1611
|
-
|
|
1612
|
-
static VALUE
|
|
1613
|
-
gl_GetMapdv(obj,arg1,arg2)
|
|
1614
|
-
VALUE obj,arg1,arg2;
|
|
1615
|
-
{
|
|
1616
|
-
GLenum target;
|
|
1617
|
-
GLenum query;
|
|
1618
|
-
int dims;
|
|
1619
|
-
int pointsize;
|
|
1620
|
-
int size=0;
|
|
1621
|
-
int i;
|
|
1622
|
-
GLdouble *points;
|
|
1623
|
-
VALUE retary;
|
|
1624
|
-
GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
|
|
1625
|
-
target = (GLenum)NUM2INT(arg1);
|
|
1626
|
-
query = (GLenum)NUM2INT(arg2);
|
|
1627
|
-
switch(target) {
|
|
1628
|
-
case GL_MAP1_INDEX:
|
|
1629
|
-
case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
|
|
1630
|
-
case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
|
|
1631
|
-
case GL_MAP1_VERTEX_3:
|
|
1632
|
-
case GL_MAP1_NORMAL:
|
|
1633
|
-
case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
|
|
1634
|
-
case GL_MAP1_COLOR_4:
|
|
1635
|
-
case GL_MAP1_TEXTURE_COORD_4:
|
|
1636
|
-
case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
|
|
1637
|
-
case GL_MAP2_INDEX:
|
|
1638
|
-
case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
|
|
1639
|
-
case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
|
|
1640
|
-
case GL_MAP2_VERTEX_3:
|
|
1641
|
-
case GL_MAP2_NORMAL:
|
|
1642
|
-
case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
|
|
1643
|
-
case GL_MAP2_COLOR_4:
|
|
1644
|
-
case GL_MAP2_TEXTURE_COORD_4:
|
|
1645
|
-
case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
|
|
1646
|
-
default:
|
|
1647
|
-
rb_raise(rb_eArgError, "unknown target:%d",target);
|
|
1648
|
-
break; /* not reached */
|
|
1649
|
-
}
|
|
1650
|
-
switch(query) {
|
|
1651
|
-
case GL_ORDER: size = dims; break;
|
|
1652
|
-
case GL_DOMAIN: size = dims*2; break;
|
|
1653
|
-
case GL_COEFF:
|
|
1654
|
-
glGetMapiv(target,GL_ORDER,order);
|
|
1655
|
-
if (dims==1)
|
|
1656
|
-
size = order[0] * pointsize;
|
|
1657
|
-
else
|
|
1658
|
-
size = (order[0]*order[1]) * pointsize;
|
|
1659
|
-
break;
|
|
1660
|
-
default:
|
|
1661
|
-
rb_raise(rb_eArgError, "unknown target:%d",target);
|
|
1662
|
-
break; /* not reached */
|
|
1663
|
-
}
|
|
1664
|
-
points = ALLOC_N(GLdouble,size);
|
|
1665
|
-
glGetMapdv(target,query,points);
|
|
1666
|
-
retary = rb_ary_new2(size);
|
|
1667
|
-
for(i=0;i<size;i++)
|
|
1668
|
-
rb_ary_push(retary, rb_float_new(points[i]));
|
|
1669
|
-
xfree(points);
|
|
1670
|
-
return retary;
|
|
1238
|
+
RET_ARRAY_OR_SINGLE(size,INT2NUM,params)
|
|
1671
1239
|
}
|
|
1672
1240
|
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
GLenum
|
|
1679
|
-
|
|
1680
|
-
int
|
|
1681
|
-
int
|
|
1682
|
-
int
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
case
|
|
1690
|
-
case
|
|
1691
|
-
case
|
|
1692
|
-
case
|
|
1693
|
-
case
|
|
1694
|
-
case
|
|
1695
|
-
case
|
|
1696
|
-
case
|
|
1697
|
-
case
|
|
1698
|
-
case
|
|
1699
|
-
case
|
|
1700
|
-
case
|
|
1701
|
-
case
|
|
1702
|
-
case
|
|
1703
|
-
case
|
|
1704
|
-
case
|
|
1705
|
-
case
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
case
|
|
1713
|
-
case
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
if (dims==1)
|
|
1717
|
-
size = order[0] * pointsize;
|
|
1718
|
-
else
|
|
1719
|
-
size = (order[0]*order[1]) * pointsize;
|
|
1720
|
-
break;
|
|
1721
|
-
default:
|
|
1722
|
-
rb_raise(rb_eArgError, "unknown target:%d",target);
|
|
1723
|
-
break; /* not reached */
|
|
1724
|
-
}
|
|
1725
|
-
points = ALLOC_N(
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
rb_ary_push(retary, rb_float_new(points[i]));
|
|
1730
|
-
xfree(points);
|
|
1731
|
-
return retary;
|
|
1241
|
+
#define GETMAP_FUNC(_name_,_type_) \
|
|
1242
|
+
static VALUE \
|
|
1243
|
+
gl_##_name_(obj,arg1,arg2) \
|
|
1244
|
+
VALUE obj,arg1,arg2; \
|
|
1245
|
+
{ \
|
|
1246
|
+
GLenum target; \
|
|
1247
|
+
GLenum query; \
|
|
1248
|
+
int dims; \
|
|
1249
|
+
int pointsize; \
|
|
1250
|
+
int size=0; \
|
|
1251
|
+
_type_ *points; \
|
|
1252
|
+
GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */ \
|
|
1253
|
+
target = (GLenum)NUM2INT(arg1); \
|
|
1254
|
+
query = (GLenum)NUM2INT(arg2); \
|
|
1255
|
+
switch(target) { \
|
|
1256
|
+
case GL_MAP1_INDEX: \
|
|
1257
|
+
case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break; \
|
|
1258
|
+
case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break; \
|
|
1259
|
+
case GL_MAP1_VERTEX_3: \
|
|
1260
|
+
case GL_MAP1_NORMAL: \
|
|
1261
|
+
case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break; \
|
|
1262
|
+
case GL_MAP1_COLOR_4: \
|
|
1263
|
+
case GL_MAP1_TEXTURE_COORD_4: \
|
|
1264
|
+
case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break; \
|
|
1265
|
+
case GL_MAP2_INDEX: \
|
|
1266
|
+
case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break; \
|
|
1267
|
+
case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break; \
|
|
1268
|
+
case GL_MAP2_VERTEX_3: \
|
|
1269
|
+
case GL_MAP2_NORMAL: \
|
|
1270
|
+
case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break; \
|
|
1271
|
+
case GL_MAP2_COLOR_4: \
|
|
1272
|
+
case GL_MAP2_TEXTURE_COORD_4: \
|
|
1273
|
+
case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break; \
|
|
1274
|
+
default: \
|
|
1275
|
+
rb_raise(rb_eArgError, "unknown target:%d",target); \
|
|
1276
|
+
break; /* not reached */ \
|
|
1277
|
+
} \
|
|
1278
|
+
switch(query) { \
|
|
1279
|
+
case GL_ORDER: size = dims; break; \
|
|
1280
|
+
case GL_DOMAIN: size = dims*2; break; \
|
|
1281
|
+
case GL_COEFF: \
|
|
1282
|
+
glGetMapiv(target,GL_ORDER,order); \
|
|
1283
|
+
CHECK_GLERROR \
|
|
1284
|
+
if (dims==1) \
|
|
1285
|
+
size = order[0] * pointsize; \
|
|
1286
|
+
else \
|
|
1287
|
+
size = (order[0]*order[1]) * pointsize; \
|
|
1288
|
+
break; \
|
|
1289
|
+
default: \
|
|
1290
|
+
rb_raise(rb_eArgError, "unknown target:%d",target); \
|
|
1291
|
+
break; /* not reached */ \
|
|
1292
|
+
} \
|
|
1293
|
+
points = ALLOC_N(_type_,size); \
|
|
1294
|
+
gl##_name_(target,query,points); \
|
|
1295
|
+
\
|
|
1296
|
+
RET_ARRAY_OR_SINGLE_FREE(size,RETCONV_##_type_,points) \
|
|
1732
1297
|
}
|
|
1733
1298
|
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
GLenum target;
|
|
1739
|
-
GLenum query;
|
|
1740
|
-
int dims;
|
|
1741
|
-
int pointsize;
|
|
1742
|
-
int size=0;
|
|
1743
|
-
int i;
|
|
1744
|
-
GLint *points;
|
|
1745
|
-
VALUE retary;
|
|
1746
|
-
GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
|
|
1747
|
-
target = (GLenum)NUM2INT(arg1);
|
|
1748
|
-
query = (GLenum)NUM2INT(arg2);
|
|
1749
|
-
switch(target) {
|
|
1750
|
-
case GL_MAP1_INDEX:
|
|
1751
|
-
case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
|
|
1752
|
-
case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
|
|
1753
|
-
case GL_MAP1_VERTEX_3:
|
|
1754
|
-
case GL_MAP1_NORMAL:
|
|
1755
|
-
case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
|
|
1756
|
-
case GL_MAP1_COLOR_4:
|
|
1757
|
-
case GL_MAP1_TEXTURE_COORD_4:
|
|
1758
|
-
case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
|
|
1759
|
-
case GL_MAP2_INDEX:
|
|
1760
|
-
case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
|
|
1761
|
-
case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
|
|
1762
|
-
case GL_MAP2_VERTEX_3:
|
|
1763
|
-
case GL_MAP2_NORMAL:
|
|
1764
|
-
case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
|
|
1765
|
-
case GL_MAP2_COLOR_4:
|
|
1766
|
-
case GL_MAP2_TEXTURE_COORD_4:
|
|
1767
|
-
case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
|
|
1768
|
-
default:
|
|
1769
|
-
rb_raise(rb_eArgError, "unknown target:%d",target);
|
|
1770
|
-
break; /* not reached */
|
|
1771
|
-
}
|
|
1772
|
-
switch(query) {
|
|
1773
|
-
case GL_ORDER: size = dims; break;
|
|
1774
|
-
case GL_DOMAIN: size = dims*2; break;
|
|
1775
|
-
case GL_COEFF:
|
|
1776
|
-
glGetMapiv(target,GL_ORDER,order);
|
|
1777
|
-
if (dims==1)
|
|
1778
|
-
size = order[0] * pointsize;
|
|
1779
|
-
else
|
|
1780
|
-
size = (order[0]*order[1]) * pointsize;
|
|
1781
|
-
break;
|
|
1782
|
-
default:
|
|
1783
|
-
rb_raise(rb_eArgError, "unknown target:%d",target);
|
|
1784
|
-
break; /* not reached */
|
|
1785
|
-
}
|
|
1786
|
-
points = ALLOC_N(GLint,size);
|
|
1787
|
-
glGetMapiv(target,query,points);
|
|
1788
|
-
retary = rb_ary_new2(size);
|
|
1789
|
-
for(i=0;i<size;i++)
|
|
1790
|
-
rb_ary_push(retary, INT2NUM(points[i]));
|
|
1791
|
-
xfree(points);
|
|
1792
|
-
return retary;
|
|
1793
|
-
}
|
|
1299
|
+
GETMAP_FUNC(GetMapdv,GLdouble)
|
|
1300
|
+
GETMAP_FUNC(GetMapfv,GLfloat)
|
|
1301
|
+
GETMAP_FUNC(GetMapiv,GLint)
|
|
1302
|
+
#undef GETMAP_FUNC
|
|
1794
1303
|
|
|
1795
1304
|
static VALUE
|
|
1796
1305
|
gl_GetMaterialfv(obj,arg1,arg2)
|
|
@@ -1800,8 +1309,6 @@ VALUE obj,arg1,arg2;
|
|
|
1800
1309
|
GLenum pname;
|
|
1801
1310
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
|
1802
1311
|
int size;
|
|
1803
|
-
VALUE retary;
|
|
1804
|
-
int i;
|
|
1805
1312
|
face = (GLenum)NUM2INT(arg1);
|
|
1806
1313
|
pname = (GLenum)NUM2INT(arg2);
|
|
1807
1314
|
switch(pname) {
|
|
@@ -1822,10 +1329,7 @@ VALUE obj,arg1,arg2;
|
|
|
1822
1329
|
break; /* not reached */
|
|
1823
1330
|
}
|
|
1824
1331
|
glGetMaterialfv(face,pname,params);
|
|
1825
|
-
|
|
1826
|
-
for(i=0;i<size;i++)
|
|
1827
|
-
rb_ary_push(retary, rb_float_new(params[i]));
|
|
1828
|
-
return retary;
|
|
1332
|
+
RET_ARRAY_OR_SINGLE(size,rb_float_new,params)
|
|
1829
1333
|
}
|
|
1830
1334
|
|
|
1831
1335
|
static VALUE
|
|
@@ -1836,8 +1340,6 @@ VALUE obj,arg1,arg2;
|
|
|
1836
1340
|
GLenum pname;
|
|
1837
1341
|
GLint params[4] = {0,0,0,0};
|
|
1838
1342
|
int size;
|
|
1839
|
-
VALUE retary;
|
|
1840
|
-
int i;
|
|
1841
1343
|
face = (GLenum)NUM2INT(arg1);
|
|
1842
1344
|
pname = (GLenum)NUM2INT(arg2);
|
|
1843
1345
|
switch(pname) {
|
|
@@ -1858,10 +1360,7 @@ VALUE obj,arg1,arg2;
|
|
|
1858
1360
|
break; /* not reached */
|
|
1859
1361
|
}
|
|
1860
1362
|
glGetMaterialiv(face,pname,params);
|
|
1861
|
-
|
|
1862
|
-
for(i=0;i<size;i++)
|
|
1863
|
-
rb_ary_push(retary, INT2NUM(params[i]));
|
|
1864
|
-
return retary;
|
|
1363
|
+
RET_ARRAY_OR_SINGLE(size,INT2NUM,params)
|
|
1865
1364
|
}
|
|
1866
1365
|
|
|
1867
1366
|
#define GLGETPIXELMAP_FUNC(_type_,_vartype_,_convert_) \
|
|
@@ -1875,9 +1374,7 @@ VALUE obj; \
|
|
|
1875
1374
|
GLenum map_size; \
|
|
1876
1375
|
GLint size = 0; \
|
|
1877
1376
|
_vartype_ *values; \
|
|
1878
|
-
VALUE retary; \
|
|
1879
1377
|
VALUE args[2]; \
|
|
1880
|
-
int i; \
|
|
1881
1378
|
switch (rb_scan_args(argc, argv, "11", &args[0], &args[1])) { \
|
|
1882
1379
|
default: \
|
|
1883
1380
|
case 1: \
|
|
@@ -1901,19 +1398,18 @@ VALUE obj; \
|
|
|
1901
1398
|
break; \
|
|
1902
1399
|
} \
|
|
1903
1400
|
glGetIntegerv(map_size,&size); \
|
|
1401
|
+
CHECK_GLERROR \
|
|
1904
1402
|
values = ALLOC_N(_vartype_,size); \
|
|
1905
1403
|
glGetPixelMap##_type_##v(map,values); \
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
rb_ary_push(retary, _convert_(values[i])); \
|
|
1909
|
-
xfree(values); \
|
|
1910
|
-
return retary; \
|
|
1404
|
+
RET_ARRAY_OR_SINGLE_FREE(size,_convert_,values) \
|
|
1405
|
+
break; \
|
|
1911
1406
|
case 2: \
|
|
1912
1407
|
if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING)) \
|
|
1913
1408
|
rb_raise(rb_eArgError, "Pixel pack buffer not bound"); \
|
|
1914
1409
|
\
|
|
1915
1410
|
map = (GLenum)NUM2INT(args[0]); \
|
|
1916
1411
|
glGetPixelMap##_type_##v(map,(GLvoid*)NUM2INT(args[1])); \
|
|
1412
|
+
CHECK_GLERROR \
|
|
1917
1413
|
return Qnil; \
|
|
1918
1414
|
} \
|
|
1919
1415
|
}
|
|
@@ -1940,11 +1436,13 @@ VALUE obj;
|
|
|
1940
1436
|
FORCE_PIXEL_STORE_MODE
|
|
1941
1437
|
glGetPolygonStipple(mask);
|
|
1942
1438
|
RESTORE_PIXEL_STORE_MODE
|
|
1439
|
+
CHECK_GLERROR
|
|
1943
1440
|
return rb_str_new((const char*)mask, 128);
|
|
1944
1441
|
case 1:
|
|
1945
1442
|
if (!CheckBufferBinding(GL_PIXEL_PACK_BUFFER_BINDING))
|
|
1946
1443
|
rb_raise(rb_eArgError, "Pixel pack buffer not bound");
|
|
1947
1444
|
glGetPolygonStipple((GLvoid *)NUM2INT(args[0]));
|
|
1445
|
+
CHECK_GLERROR
|
|
1948
1446
|
return Qnil;
|
|
1949
1447
|
}
|
|
1950
1448
|
}
|
|
@@ -1957,158 +1455,71 @@ VALUE obj,arg1;
|
|
|
1957
1455
|
const GLubyte *ret;
|
|
1958
1456
|
name = (GLenum)NUM2INT(arg1);
|
|
1959
1457
|
ret = glGetString(name);
|
|
1458
|
+
CHECK_GLERROR
|
|
1960
1459
|
return rb_str_new2((const char*)ret);
|
|
1961
1460
|
}
|
|
1962
1461
|
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
GLenum
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
pname
|
|
1975
|
-
|
|
1976
|
-
case
|
|
1977
|
-
case
|
|
1978
|
-
case
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
retary = rb_ary_new2(size);
|
|
1991
|
-
for(i=0;i<size;i++)
|
|
1992
|
-
rb_ary_push(retary, rb_float_new(params[i]));
|
|
1993
|
-
return retary;
|
|
1994
|
-
}
|
|
1995
|
-
|
|
1996
|
-
static VALUE
|
|
1997
|
-
gl_GetTexEnviv(obj,arg1,arg2)
|
|
1998
|
-
VALUE obj,arg1,arg2;
|
|
1999
|
-
{
|
|
2000
|
-
GLenum target;
|
|
2001
|
-
GLenum pname;
|
|
2002
|
-
GLint params[4] = {0,0,0,0};
|
|
2003
|
-
int size;
|
|
2004
|
-
VALUE retary;
|
|
2005
|
-
int i;
|
|
2006
|
-
target = (GLenum)NUM2INT(arg1);
|
|
2007
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
2008
|
-
switch(pname) {
|
|
2009
|
-
case GL_TEXTURE_ENV_COLOR:
|
|
2010
|
-
case GL_TEXTURE_ENV_BIAS_SGIX:
|
|
2011
|
-
case GL_CULL_MODES_NV:
|
|
2012
|
-
case GL_OFFSET_TEXTURE_MATRIX_NV:
|
|
2013
|
-
size = 4;
|
|
2014
|
-
break;
|
|
2015
|
-
case GL_CONST_EYE_NV:
|
|
2016
|
-
size = 3;
|
|
2017
|
-
break;
|
|
2018
|
-
default:
|
|
2019
|
-
size = 1;
|
|
2020
|
-
break;
|
|
2021
|
-
}
|
|
2022
|
-
glGetTexEnviv(target,pname,params);
|
|
2023
|
-
retary = rb_ary_new2(size);
|
|
2024
|
-
for(i=0;i<size;i++)
|
|
2025
|
-
rb_ary_push(retary, INT2NUM(params[i]));
|
|
2026
|
-
return retary;
|
|
1462
|
+
#define GETTEXENVFUNC(_name_,_type_) \
|
|
1463
|
+
static VALUE \
|
|
1464
|
+
gl_##_name_(obj,arg1,arg2) \
|
|
1465
|
+
VALUE obj,arg1,arg2; \
|
|
1466
|
+
{ \
|
|
1467
|
+
GLenum target; \
|
|
1468
|
+
GLenum pname; \
|
|
1469
|
+
_type_ params[4] = {0.0,0.0,0.0,0.0}; \
|
|
1470
|
+
int size; \
|
|
1471
|
+
target = (GLenum)NUM2INT(arg1); \
|
|
1472
|
+
pname = (GLenum)NUM2INT(arg2); \
|
|
1473
|
+
switch(pname) { \
|
|
1474
|
+
case GL_TEXTURE_ENV_COLOR: \
|
|
1475
|
+
case GL_TEXTURE_ENV_BIAS_SGIX: \
|
|
1476
|
+
case GL_CULL_MODES_NV: \
|
|
1477
|
+
case GL_OFFSET_TEXTURE_MATRIX_NV: \
|
|
1478
|
+
size = 4; \
|
|
1479
|
+
break; \
|
|
1480
|
+
case GL_CONST_EYE_NV: \
|
|
1481
|
+
size = 3; \
|
|
1482
|
+
break; \
|
|
1483
|
+
default: \
|
|
1484
|
+
size = 1; \
|
|
1485
|
+
break; \
|
|
1486
|
+
} \
|
|
1487
|
+
gl##_name_(target,pname,params); \
|
|
1488
|
+
RET_ARRAY_OR_SINGLE(size,RETCONV_##_type_,params) \
|
|
2027
1489
|
}
|
|
2028
1490
|
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
{
|
|
2033
|
-
GLenum coord;
|
|
2034
|
-
GLenum pname;
|
|
2035
|
-
GLdouble params[4] = {0.0,0.0,0.0,0.0};
|
|
2036
|
-
int size;
|
|
2037
|
-
VALUE retary;
|
|
2038
|
-
int i;
|
|
2039
|
-
coord = (GLenum)NUM2INT(arg1);
|
|
2040
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
2041
|
-
switch(pname) {
|
|
2042
|
-
case GL_OBJECT_PLANE:
|
|
2043
|
-
case GL_EYE_PLANE:
|
|
2044
|
-
size = 4;
|
|
2045
|
-
break;
|
|
2046
|
-
default:
|
|
2047
|
-
size = 1;
|
|
2048
|
-
break;
|
|
2049
|
-
}
|
|
2050
|
-
glGetTexGendv(coord,pname,params);
|
|
2051
|
-
retary = rb_ary_new2(size);
|
|
2052
|
-
for(i=0;i<size;i++)
|
|
2053
|
-
rb_ary_push(retary, rb_float_new(params[i]));
|
|
2054
|
-
return retary;
|
|
2055
|
-
}
|
|
1491
|
+
GETTEXENVFUNC(GetTexEnvfv,GLfloat)
|
|
1492
|
+
GETTEXENVFUNC(GetTexEnviv,GLint)
|
|
1493
|
+
#undef GETTEXENVFUNC
|
|
2056
1494
|
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
GLenum
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
pname
|
|
2069
|
-
|
|
2070
|
-
case
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
retary = rb_ary_new2(size);
|
|
2080
|
-
for(i=0;i<size;i++)
|
|
2081
|
-
rb_ary_push(retary, rb_float_new(params[i]));
|
|
2082
|
-
return retary;
|
|
1495
|
+
#define GETTEXGENFUNC(_name_,_type_) \
|
|
1496
|
+
static VALUE \
|
|
1497
|
+
gl_##_name_(obj,arg1,arg2) \
|
|
1498
|
+
VALUE obj,arg1,arg2; \
|
|
1499
|
+
{ \
|
|
1500
|
+
GLenum coord; \
|
|
1501
|
+
GLenum pname; \
|
|
1502
|
+
_type_ params[4] = {0.0,0.0,0.0,0.0}; \
|
|
1503
|
+
int size; \
|
|
1504
|
+
coord = (GLenum)NUM2INT(arg1); \
|
|
1505
|
+
pname = (GLenum)NUM2INT(arg2); \
|
|
1506
|
+
switch(pname) { \
|
|
1507
|
+
case GL_OBJECT_PLANE: \
|
|
1508
|
+
case GL_EYE_PLANE: \
|
|
1509
|
+
size = 4; \
|
|
1510
|
+
break; \
|
|
1511
|
+
default: \
|
|
1512
|
+
size = 1; \
|
|
1513
|
+
break; \
|
|
1514
|
+
} \
|
|
1515
|
+
gl##_name_(coord,pname,params); \
|
|
1516
|
+
RET_ARRAY_OR_SINGLE(size,RETCONV_##_type_,params) \
|
|
2083
1517
|
}
|
|
2084
1518
|
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
GLenum coord;
|
|
2090
|
-
GLenum pname;
|
|
2091
|
-
GLint params[4] = {0,0,0,0};
|
|
2092
|
-
int size;
|
|
2093
|
-
VALUE retary;
|
|
2094
|
-
int i;
|
|
2095
|
-
coord = (GLenum)NUM2INT(arg1);
|
|
2096
|
-
pname = (GLenum)NUM2INT(arg2);
|
|
2097
|
-
switch(pname) {
|
|
2098
|
-
case GL_OBJECT_PLANE:
|
|
2099
|
-
case GL_EYE_PLANE:
|
|
2100
|
-
size = 4;
|
|
2101
|
-
break;
|
|
2102
|
-
default:
|
|
2103
|
-
size = 1;
|
|
2104
|
-
break;
|
|
2105
|
-
}
|
|
2106
|
-
glGetTexGeniv(coord,pname,params);
|
|
2107
|
-
retary = rb_ary_new2(size);
|
|
2108
|
-
for(i=0;i<size;i++)
|
|
2109
|
-
rb_ary_push(retary, INT2NUM(params[i]));
|
|
2110
|
-
return retary;
|
|
2111
|
-
}
|
|
1519
|
+
GETTEXGENFUNC(GetTexGendv,GLdouble)
|
|
1520
|
+
GETTEXGENFUNC(GetTexGenfv,GLfloat)
|
|
1521
|
+
GETTEXGENFUNC(GetTexGeniv,GLint)
|
|
1522
|
+
#undef GETTEXGENFUNC
|
|
2112
1523
|
|
|
2113
1524
|
static VALUE
|
|
2114
1525
|
gl_GetTexImage(argc,argv,obj)
|
|
@@ -2170,11 +1581,13 @@ VALUE obj;
|
|
|
2170
1581
|
default:
|
|
2171
1582
|
rb_raise(rb_eArgError, "Target type not supported");
|
|
2172
1583
|
}
|
|
1584
|
+
CHECK_GLERROR
|
|
2173
1585
|
pixels = allocate_buffer_with_string(GetDataSize(type,format,size));
|
|
2174
1586
|
|
|
2175
1587
|
FORCE_PIXEL_STORE_MODE
|
|
2176
|
-
glGetTexImage(tex,lod,format,type,(GLvoid*)
|
|
1588
|
+
glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING_PTR(pixels));
|
|
2177
1589
|
RESTORE_PIXEL_STORE_MODE
|
|
1590
|
+
CHECK_GLERROR
|
|
2178
1591
|
return pixels;
|
|
2179
1592
|
break;
|
|
2180
1593
|
case 5:
|
|
@@ -2184,6 +1597,7 @@ VALUE obj;
|
|
|
2184
1597
|
FORCE_PIXEL_STORE_MODE
|
|
2185
1598
|
glGetTexImage(tex,lod,format,type,(GLvoid*)NUM2INT(args[4]));
|
|
2186
1599
|
RESTORE_PIXEL_STORE_MODE
|
|
1600
|
+
CHECK_GLERROR
|
|
2187
1601
|
return Qnil;
|
|
2188
1602
|
}
|
|
2189
1603
|
}
|
|
@@ -2196,8 +1610,6 @@ VALUE obj,arg1,arg2;
|
|
|
2196
1610
|
GLenum pname;
|
|
2197
1611
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
|
2198
1612
|
int size;
|
|
2199
|
-
VALUE retary;
|
|
2200
|
-
int i;
|
|
2201
1613
|
target = (GLenum)NUM2INT(arg1);
|
|
2202
1614
|
pname = (GLenum)NUM2INT(arg2);
|
|
2203
1615
|
switch(pname) {
|
|
@@ -2212,10 +1624,7 @@ VALUE obj,arg1,arg2;
|
|
|
2212
1624
|
break;
|
|
2213
1625
|
}
|
|
2214
1626
|
glGetTexParameterfv(target,pname,params);
|
|
2215
|
-
|
|
2216
|
-
for(i=0;i<size;i++)
|
|
2217
|
-
rb_ary_push(retary, rb_float_new(params[i]));
|
|
2218
|
-
return retary;
|
|
1627
|
+
RET_ARRAY_OR_SINGLE(size,RETCONV_GLfloat,params)
|
|
2219
1628
|
}
|
|
2220
1629
|
|
|
2221
1630
|
static VALUE
|
|
@@ -2226,8 +1635,6 @@ VALUE obj,arg1,arg2;
|
|
|
2226
1635
|
GLenum pname;
|
|
2227
1636
|
GLint params[4] = {0,0,0,0};
|
|
2228
1637
|
int size;
|
|
2229
|
-
VALUE retary;
|
|
2230
|
-
int i;
|
|
2231
1638
|
target = (GLenum)NUM2INT(arg1);
|
|
2232
1639
|
pname = (GLenum)NUM2INT(arg2);
|
|
2233
1640
|
switch(pname) {
|
|
@@ -2242,10 +1649,7 @@ VALUE obj,arg1,arg2;
|
|
|
2242
1649
|
break;
|
|
2243
1650
|
}
|
|
2244
1651
|
glGetTexParameteriv(target,pname,params);
|
|
2245
|
-
|
|
2246
|
-
for(i=0;i<size;i++)
|
|
2247
|
-
rb_ary_push(retary, INT2NUM(params[i]));
|
|
2248
|
-
return retary;
|
|
1652
|
+
RET_ARRAY_OR_SINGLE_BOOL(size,cond_GLBOOL2RUBY,pname,params)
|
|
2249
1653
|
}
|
|
2250
1654
|
|
|
2251
1655
|
static VALUE
|
|
@@ -2256,14 +1660,12 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
2256
1660
|
GLint level;
|
|
2257
1661
|
GLenum pname;
|
|
2258
1662
|
GLfloat params = 0.0;
|
|
2259
|
-
VALUE retary;
|
|
2260
1663
|
target = (GLenum)NUM2INT(arg1);
|
|
2261
1664
|
level = (GLint)NUM2INT(arg2);
|
|
2262
1665
|
pname = (GLenum)NUM2INT(arg3);
|
|
2263
1666
|
glGetTexLevelParameterfv(target,level,pname,¶ms);
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
return retary;
|
|
1667
|
+
CHECK_GLERROR
|
|
1668
|
+
return RETCONV_GLfloat(params);
|
|
2267
1669
|
}
|
|
2268
1670
|
|
|
2269
1671
|
static VALUE
|
|
@@ -2274,45 +1676,23 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
2274
1676
|
GLint level;
|
|
2275
1677
|
GLenum pname;
|
|
2276
1678
|
GLint params = 0;
|
|
2277
|
-
VALUE retary;
|
|
2278
1679
|
target = (GLenum)NUM2INT(arg1);
|
|
2279
1680
|
level = (GLint)NUM2INT(arg2);
|
|
2280
1681
|
pname = (GLenum)NUM2INT(arg3);
|
|
2281
1682
|
glGetTexLevelParameteriv(target,level,pname,¶ms);
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
return retary;
|
|
1683
|
+
CHECK_GLERROR
|
|
1684
|
+
return cond_GLBOOL2RUBY(pname,params);
|
|
2285
1685
|
}
|
|
2286
1686
|
|
|
2287
|
-
static VALUE
|
|
2288
|
-
gl_IsEnabled(obj,arg1)
|
|
2289
|
-
VALUE obj,arg1;
|
|
2290
|
-
{
|
|
2291
|
-
GLenum cap;
|
|
2292
|
-
GLboolean ret;
|
|
2293
|
-
cap = (GLenum)NUM2INT(arg1);
|
|
2294
|
-
ret = glIsEnabled(cap);
|
|
2295
|
-
return INT2NUM(ret);
|
|
2296
|
-
}
|
|
2297
|
-
|
|
2298
|
-
static VALUE
|
|
2299
|
-
gl_IsList(obj,arg1)
|
|
2300
|
-
VALUE obj,arg1;
|
|
2301
|
-
{
|
|
2302
|
-
GLuint list;
|
|
2303
|
-
GLboolean ret;
|
|
2304
|
-
list = (GLuint)NUM2UINT(arg1);
|
|
2305
|
-
ret = glIsList(list);
|
|
2306
|
-
return INT2NUM(ret);
|
|
2307
|
-
}
|
|
2308
1687
|
|
|
2309
1688
|
static VALUE
|
|
2310
1689
|
gl_LoadMatrixf(obj,arg1)
|
|
2311
1690
|
VALUE obj,arg1;
|
|
2312
1691
|
{
|
|
2313
1692
|
GLfloat m[4*4];
|
|
2314
|
-
|
|
1693
|
+
ary2cmatfloat(arg1, m, 4, 4);
|
|
2315
1694
|
glLoadMatrixf(m);
|
|
1695
|
+
CHECK_GLERROR
|
|
2316
1696
|
return Qnil;
|
|
2317
1697
|
}
|
|
2318
1698
|
|
|
@@ -2321,8 +1701,9 @@ gl_LoadMatrixd(obj,arg1)
|
|
|
2321
1701
|
VALUE obj,arg1;
|
|
2322
1702
|
{
|
|
2323
1703
|
GLdouble m[4*4];
|
|
2324
|
-
|
|
1704
|
+
ary2cmatdouble(arg1, m, 4, 4);
|
|
2325
1705
|
glLoadMatrixd(m);
|
|
1706
|
+
CHECK_GLERROR
|
|
2326
1707
|
return Qnil;
|
|
2327
1708
|
}
|
|
2328
1709
|
|
|
@@ -2331,8 +1712,9 @@ gl_MultMatrixf(obj,arg1)
|
|
|
2331
1712
|
VALUE obj,arg1;
|
|
2332
1713
|
{
|
|
2333
1714
|
GLfloat m[4*4];
|
|
2334
|
-
|
|
1715
|
+
ary2cmatfloat(arg1, m, 4, 4);
|
|
2335
1716
|
glMultMatrixf(m);
|
|
1717
|
+
CHECK_GLERROR
|
|
2336
1718
|
return Qnil;
|
|
2337
1719
|
}
|
|
2338
1720
|
|
|
@@ -2341,8 +1723,9 @@ gl_MultMatrixd(obj,arg1)
|
|
|
2341
1723
|
VALUE obj,arg1;
|
|
2342
1724
|
{
|
|
2343
1725
|
GLdouble m[4*4];
|
|
2344
|
-
|
|
1726
|
+
ary2cmatdouble(arg1, m, 4, 4);
|
|
2345
1727
|
glMultMatrixd(m);
|
|
1728
|
+
CHECK_GLERROR
|
|
2346
1729
|
return Qnil;
|
|
2347
1730
|
}
|
|
2348
1731
|
|
|
@@ -2370,11 +1753,13 @@ VALUE obj, arg1, arg2, arg3, arg4; \
|
|
|
2370
1753
|
g_##_func_##_ptr = arg4; \
|
|
2371
1754
|
gl##_func_##Pointer(size, type, stride, (const GLvoid*)NUM2INT(arg4)); \
|
|
2372
1755
|
} else { \
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
1756
|
+
VALUE data; \
|
|
1757
|
+
data = pack_array_or_pass_string(type,arg4); \
|
|
1758
|
+
rb_str_freeze(data); \
|
|
1759
|
+
g_##_func_##_ptr = data; \
|
|
1760
|
+
gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING_PTR(data)); \
|
|
2377
1761
|
} \
|
|
1762
|
+
CHECK_GLERROR \
|
|
2378
1763
|
return Qnil; \
|
|
2379
1764
|
}
|
|
2380
1765
|
|
|
@@ -2384,20 +1769,6 @@ POINTER_FUNC(TexCoord)
|
|
|
2384
1769
|
|
|
2385
1770
|
#undef POINTER_FUNC
|
|
2386
1771
|
|
|
2387
|
-
static VALUE
|
|
2388
|
-
gl_DrawArrays(obj,arg1,arg2,arg3)
|
|
2389
|
-
VALUE obj,arg1,arg2,arg3;
|
|
2390
|
-
{
|
|
2391
|
-
GLenum mode;
|
|
2392
|
-
GLint first;
|
|
2393
|
-
GLsizei count;
|
|
2394
|
-
mode = (GLenum)NUM2INT(arg1);
|
|
2395
|
-
first = (GLint)NUM2INT(arg2);
|
|
2396
|
-
count = (GLsizei)NUM2UINT(arg3);
|
|
2397
|
-
glDrawArrays(mode,first,count);
|
|
2398
|
-
return Qnil;
|
|
2399
|
-
}
|
|
2400
|
-
|
|
2401
1772
|
static VALUE
|
|
2402
1773
|
gl_DrawElements(obj,arg1,arg2,arg3,arg4)
|
|
2403
1774
|
VALUE obj,arg1,arg2,arg3,arg4;
|
|
@@ -2411,9 +1782,11 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
|
2411
1782
|
if (CheckBufferBinding(GL_ELEMENT_ARRAY_BUFFER_BINDING)) {
|
|
2412
1783
|
glDrawElements(mode, count, type, (const GLvoid*)NUM2INT(arg4));
|
|
2413
1784
|
} else {
|
|
2414
|
-
|
|
2415
|
-
|
|
1785
|
+
VALUE data;
|
|
1786
|
+
data = pack_array_or_pass_string(type,arg4);
|
|
1787
|
+
glDrawElements(mode, count, type, (const GLvoid*)RSTRING_PTR(data));
|
|
2416
1788
|
}
|
|
1789
|
+
CHECK_GLERROR
|
|
2417
1790
|
return Qnil;
|
|
2418
1791
|
}
|
|
2419
1792
|
|
|
@@ -2427,11 +1800,13 @@ VALUE obj,arg1,arg2;
|
|
|
2427
1800
|
g_EdgeFlag_ptr = arg2;
|
|
2428
1801
|
glEdgeFlagPointer(stride, (const GLboolean*) NUM2INT(arg2));
|
|
2429
1802
|
} else {
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
1803
|
+
VALUE data;
|
|
1804
|
+
data = pack_array_or_pass_string(GL_UNSIGNED_BYTE,arg2);
|
|
1805
|
+
rb_str_freeze(data);
|
|
1806
|
+
g_EdgeFlag_ptr = data;
|
|
1807
|
+
glEdgeFlagPointer(stride, (const GLboolean*)RSTRING_PTR(data));
|
|
2434
1808
|
}
|
|
1809
|
+
CHECK_GLERROR
|
|
2435
1810
|
return Qnil;
|
|
2436
1811
|
}
|
|
2437
1812
|
|
|
@@ -2481,11 +1856,12 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
2481
1856
|
g_Index_ptr = arg3;
|
|
2482
1857
|
glIndexPointer(type, stride, (const GLvoid*)NUM2INT(arg3));
|
|
2483
1858
|
} else {
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
g_Index_ptr =
|
|
2487
|
-
glIndexPointer(type, stride, (const GLvoid*)
|
|
1859
|
+
VALUE data;
|
|
1860
|
+
data = pack_array_or_pass_string(type,arg3);
|
|
1861
|
+
g_Index_ptr = data;
|
|
1862
|
+
glIndexPointer(type, stride, (const GLvoid*)RSTRING_PTR(data));
|
|
2488
1863
|
}
|
|
1864
|
+
CHECK_GLERROR
|
|
2489
1865
|
return Qnil;
|
|
2490
1866
|
}
|
|
2491
1867
|
|
|
@@ -2495,11 +1871,14 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
2495
1871
|
{
|
|
2496
1872
|
GLenum format;
|
|
2497
1873
|
GLsizei stride;
|
|
1874
|
+
VALUE data;
|
|
2498
1875
|
format = (GLenum)NUM2INT(arg1);
|
|
2499
1876
|
stride = (GLsizei)NUM2UINT(arg2);
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
1877
|
+
/* FIXME: add support for GL_C4UB_V2F,GL_C4UB_V3F, GL_T2F_C4UB_V3 */
|
|
1878
|
+
data = pack_array_or_pass_string(GL_FLOAT,arg3);
|
|
1879
|
+
rb_str_freeze(data);
|
|
1880
|
+
glInterleavedArrays(format, stride, (const GLvoid*)RSTRING_PTR(data));
|
|
1881
|
+
CHECK_GLERROR
|
|
2503
1882
|
return Qnil;
|
|
2504
1883
|
}
|
|
2505
1884
|
|
|
@@ -2515,105 +1894,16 @@ VALUE obj,arg1,arg2,arg3;
|
|
|
2515
1894
|
g_Normal_ptr = arg3;
|
|
2516
1895
|
glNormalPointer(type, stride, (const GLvoid*)NUM2INT(arg3));
|
|
2517
1896
|
} else {
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
1897
|
+
VALUE data;
|
|
1898
|
+
data = pack_array_or_pass_string(type,arg3);
|
|
1899
|
+
rb_str_freeze(data);
|
|
1900
|
+
g_Normal_ptr = data;
|
|
1901
|
+
glNormalPointer(type, stride, (const GLvoid*)RSTRING_PTR(data));
|
|
2522
1902
|
}
|
|
1903
|
+
CHECK_GLERROR
|
|
2523
1904
|
return Qnil;
|
|
2524
1905
|
}
|
|
2525
1906
|
|
|
2526
|
-
GL_SIMPLE_FUNC(PolygonOffset,2,GLfloat,NUM2DBL)
|
|
2527
|
-
|
|
2528
|
-
static VALUE
|
|
2529
|
-
gl_CopyTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
|
2530
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
2531
|
-
{
|
|
2532
|
-
GLenum target;
|
|
2533
|
-
GLint level;
|
|
2534
|
-
GLenum internalformat;
|
|
2535
|
-
GLint x;
|
|
2536
|
-
GLint y;
|
|
2537
|
-
GLsizei width;
|
|
2538
|
-
GLint border;
|
|
2539
|
-
target = (GLenum)NUM2INT(arg1);
|
|
2540
|
-
level = (GLint)NUM2INT(arg2);
|
|
2541
|
-
internalformat = (GLenum)NUM2INT(arg3);
|
|
2542
|
-
x = (GLint)NUM2INT(arg4);
|
|
2543
|
-
y = (GLint)NUM2INT(arg5);
|
|
2544
|
-
width = (GLsizei)NUM2UINT(arg6);
|
|
2545
|
-
border = (GLint)NUM2INT(arg7);
|
|
2546
|
-
glCopyTexImage1D(target,level,internalformat,x,y,width,border);
|
|
2547
|
-
return Qnil;
|
|
2548
|
-
}
|
|
2549
|
-
|
|
2550
|
-
static VALUE
|
|
2551
|
-
gl_CopyTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
|
|
2552
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
|
|
2553
|
-
{
|
|
2554
|
-
GLenum target;
|
|
2555
|
-
GLint level;
|
|
2556
|
-
GLenum internalformat;
|
|
2557
|
-
GLint x;
|
|
2558
|
-
GLint y;
|
|
2559
|
-
GLsizei width;
|
|
2560
|
-
GLsizei height;
|
|
2561
|
-
GLint border;
|
|
2562
|
-
target = (GLenum)NUM2INT(arg1);
|
|
2563
|
-
level = (GLint)NUM2INT(arg2);
|
|
2564
|
-
internalformat = (GLenum)NUM2INT(arg3);
|
|
2565
|
-
x = (GLint)NUM2INT(arg4);
|
|
2566
|
-
y = (GLint)NUM2INT(arg5);
|
|
2567
|
-
width = (GLsizei)NUM2UINT(arg6);
|
|
2568
|
-
height = (GLsizei)NUM2UINT(arg7);
|
|
2569
|
-
border = (GLint)NUM2INT(arg8);
|
|
2570
|
-
glCopyTexImage2D(target,level,internalformat,x,y,width,height,border);
|
|
2571
|
-
return Qnil;
|
|
2572
|
-
}
|
|
2573
|
-
|
|
2574
|
-
static VALUE
|
|
2575
|
-
gl_CopyTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
|
|
2576
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
2577
|
-
{
|
|
2578
|
-
GLenum target;
|
|
2579
|
-
GLint level;
|
|
2580
|
-
GLint xoffset;
|
|
2581
|
-
GLint x;
|
|
2582
|
-
GLint y;
|
|
2583
|
-
GLsizei width;
|
|
2584
|
-
target = (GLenum)NUM2INT(arg1);
|
|
2585
|
-
level = (GLint)NUM2INT(arg2);
|
|
2586
|
-
xoffset = (GLint)NUM2INT(arg3);
|
|
2587
|
-
x = (GLint)NUM2INT(arg4);
|
|
2588
|
-
y = (GLint)NUM2INT(arg5);
|
|
2589
|
-
width = (GLsizei)NUM2UINT(arg6);
|
|
2590
|
-
glCopyTexSubImage1D(target,level,xoffset,x,y,width);
|
|
2591
|
-
return Qnil;
|
|
2592
|
-
}
|
|
2593
|
-
|
|
2594
|
-
static VALUE
|
|
2595
|
-
gl_CopyTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
|
|
2596
|
-
VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
|
|
2597
|
-
{
|
|
2598
|
-
GLenum target;
|
|
2599
|
-
GLint level;
|
|
2600
|
-
GLint xoffset;
|
|
2601
|
-
GLint yoffset;
|
|
2602
|
-
GLint x;
|
|
2603
|
-
GLint y;
|
|
2604
|
-
GLsizei width;
|
|
2605
|
-
GLsizei height;
|
|
2606
|
-
target = (GLenum)NUM2INT(arg1);
|
|
2607
|
-
level = (GLint)NUM2INT(arg2);
|
|
2608
|
-
xoffset = (GLint)NUM2INT(arg3);
|
|
2609
|
-
yoffset = (GLint)NUM2INT(arg4);
|
|
2610
|
-
x = (GLint)NUM2INT(arg5);
|
|
2611
|
-
y = (GLint)NUM2INT(arg6);
|
|
2612
|
-
width = (GLsizei)NUM2UINT(arg7);
|
|
2613
|
-
height = (GLsizei)NUM2UINT(arg8);
|
|
2614
|
-
glCopyTexSubImage2D(target,level,xoffset,yoffset,x,y,width,height);
|
|
2615
|
-
return Qnil;
|
|
2616
|
-
}
|
|
2617
1907
|
|
|
2618
1908
|
static VALUE
|
|
2619
1909
|
gl_TexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
|
@@ -2625,6 +1915,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
|
2625
1915
|
GLsizei width;
|
|
2626
1916
|
GLenum format;
|
|
2627
1917
|
GLenum type;
|
|
1918
|
+
VALUE data;
|
|
2628
1919
|
target = (GLenum)NUM2INT(arg1);
|
|
2629
1920
|
level = (GLint)NUM2INT(arg2);
|
|
2630
1921
|
xoffset = (GLint)NUM2INT(arg3);
|
|
@@ -2634,13 +1925,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
|
2634
1925
|
|
|
2635
1926
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
2636
1927
|
glTexSubImage1D(target,level,xoffset,width,format,type,(GLvoid *)NUM2INT(arg7));
|
|
1928
|
+
CHECK_GLERROR
|
|
2637
1929
|
return Qnil;
|
|
2638
1930
|
}
|
|
2639
|
-
|
|
2640
|
-
Check_Type(arg7,T_STRING);
|
|
2641
|
-
CheckDataSize(type,format,width,arg7);
|
|
2642
1931
|
|
|
2643
|
-
|
|
1932
|
+
data = pack_array_or_pass_string(type,arg7);
|
|
1933
|
+
CheckDataSize(type,format,width,data);
|
|
1934
|
+
|
|
1935
|
+
glTexSubImage1D(target,level,xoffset,width,format,type,RSTRING_PTR(data));
|
|
1936
|
+
CHECK_GLERROR
|
|
2644
1937
|
return Qnil;
|
|
2645
1938
|
}
|
|
2646
1939
|
|
|
@@ -2656,6 +1949,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
|
|
|
2656
1949
|
GLsizei height;
|
|
2657
1950
|
GLenum format;
|
|
2658
1951
|
GLenum type;
|
|
1952
|
+
VALUE data;
|
|
2659
1953
|
target = (GLenum)NUM2INT(arg1);
|
|
2660
1954
|
level = (GLint)NUM2INT(arg2);
|
|
2661
1955
|
xoffset = (GLint)NUM2INT(arg3);
|
|
@@ -2667,13 +1961,15 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
|
|
|
2667
1961
|
|
|
2668
1962
|
if (CheckBufferBinding(GL_PIXEL_UNPACK_BUFFER_BINDING)) {
|
|
2669
1963
|
glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,(GLvoid *)NUM2INT(arg9));
|
|
1964
|
+
CHECK_GLERROR
|
|
2670
1965
|
return Qnil;
|
|
2671
1966
|
}
|
|
2672
|
-
|
|
2673
|
-
Check_Type(arg9,T_STRING);
|
|
2674
|
-
CheckDataSize(type,format,width*height,arg9);
|
|
2675
1967
|
|
|
2676
|
-
|
|
1968
|
+
data = pack_array_or_pass_string(type,arg9);
|
|
1969
|
+
CheckDataSize(type,format,width*height,data);
|
|
1970
|
+
|
|
1971
|
+
glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,RSTRING_PTR(data));
|
|
1972
|
+
CHECK_GLERROR
|
|
2677
1973
|
return Qnil;
|
|
2678
1974
|
}
|
|
2679
1975
|
|
|
@@ -2686,86 +1982,30 @@ VALUE obj,arg1;
|
|
|
2686
1982
|
GLsizei size;
|
|
2687
1983
|
GLboolean r;
|
|
2688
1984
|
VALUE retary;
|
|
1985
|
+
VALUE ary;
|
|
2689
1986
|
int i;
|
|
2690
|
-
|
|
2691
|
-
size = RARRAY(
|
|
1987
|
+
ary = rb_Array(arg1);
|
|
1988
|
+
size = RARRAY(ary)->len;
|
|
2692
1989
|
textures = ALLOC_N(GLuint,size);
|
|
2693
1990
|
residences = ALLOC_N(GLboolean,size);
|
|
2694
|
-
ary2cuint(
|
|
1991
|
+
ary2cuint(ary,textures,size);
|
|
2695
1992
|
r = glAreTexturesResident(size,textures,residences);
|
|
2696
1993
|
retary = rb_ary_new2(size);
|
|
2697
1994
|
if (r==GL_TRUE) { /* all are resident */
|
|
2698
1995
|
for(i=0;i<size;i++)
|
|
2699
|
-
rb_ary_push(retary,
|
|
1996
|
+
rb_ary_push(retary, GLBOOL2RUBY(GL_TRUE));
|
|
2700
1997
|
} else {
|
|
2701
1998
|
for(i=0;i<size;i++)
|
|
2702
|
-
rb_ary_push(retary,
|
|
1999
|
+
rb_ary_push(retary, GLBOOL2RUBY(residences[i]));
|
|
2703
2000
|
}
|
|
2704
2001
|
xfree(textures);
|
|
2705
2002
|
xfree(residences);
|
|
2003
|
+
CHECK_GLERROR
|
|
2706
2004
|
return retary;
|
|
2707
2005
|
}
|
|
2708
2006
|
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
VALUE obj,arg1,arg2;
|
|
2712
|
-
{
|
|
2713
|
-
GLenum target;
|
|
2714
|
-
GLuint texture;
|
|
2715
|
-
target = (GLenum)NUM2INT(arg1);
|
|
2716
|
-
texture = (GLuint)NUM2UINT(arg2);
|
|
2717
|
-
glBindTexture(target,texture);
|
|
2718
|
-
return Qnil;
|
|
2719
|
-
}
|
|
2720
|
-
|
|
2721
|
-
static VALUE
|
|
2722
|
-
gl_DeleteTextures(obj,arg1)
|
|
2723
|
-
VALUE obj,arg1;
|
|
2724
|
-
{
|
|
2725
|
-
GLsizei n;
|
|
2726
|
-
GLuint *textures;
|
|
2727
|
-
if (TYPE(arg1)==T_ARRAY) {
|
|
2728
|
-
n = RARRAY(arg1)->len;
|
|
2729
|
-
textures = ALLOC_N(GLuint,n);
|
|
2730
|
-
ary2cuint(arg1,textures,n);
|
|
2731
|
-
glDeleteTextures( n, textures);
|
|
2732
|
-
xfree(textures);
|
|
2733
|
-
} else {
|
|
2734
|
-
GLuint texture;
|
|
2735
|
-
texture = NUM2INT(arg1);
|
|
2736
|
-
glDeleteTextures( 1, &texture);
|
|
2737
|
-
}
|
|
2738
|
-
return Qnil;
|
|
2739
|
-
}
|
|
2740
|
-
|
|
2741
|
-
static VALUE
|
|
2742
|
-
gl_GenTextures(obj,arg1)
|
|
2743
|
-
VALUE obj,arg1;
|
|
2744
|
-
{
|
|
2745
|
-
GLsizei n;
|
|
2746
|
-
GLuint *textures;
|
|
2747
|
-
RArray *ret;
|
|
2748
|
-
int i;
|
|
2749
|
-
n = (GLsizei)NUM2UINT(arg1);
|
|
2750
|
-
textures = ALLOC_N(GLuint, n);
|
|
2751
|
-
glGenTextures(n, textures);
|
|
2752
|
-
ret = RARRAY(rb_ary_new2(n));
|
|
2753
|
-
for (i = 0; i < n; i++)
|
|
2754
|
-
rb_ary_push((VALUE)ret, INT2NUM(textures[i]));
|
|
2755
|
-
xfree(textures);
|
|
2756
|
-
return (VALUE)ret;
|
|
2757
|
-
}
|
|
2758
|
-
|
|
2759
|
-
static VALUE
|
|
2760
|
-
gl_IsTexture(obj,arg1)
|
|
2761
|
-
VALUE obj,arg1;
|
|
2762
|
-
{
|
|
2763
|
-
GLuint texture;
|
|
2764
|
-
GLboolean ret;
|
|
2765
|
-
texture = (GLuint)NUM2UINT(arg1);
|
|
2766
|
-
ret = glIsTexture(texture);
|
|
2767
|
-
return INT2NUM(ret);
|
|
2768
|
-
}
|
|
2007
|
+
GL_FUNC_GENOBJECTS(GenTextures)
|
|
2008
|
+
GL_FUNC_DELETEOBJECTS(DeleteTextures)
|
|
2769
2009
|
|
|
2770
2010
|
static VALUE
|
|
2771
2011
|
gl_PrioritizeTextures(obj,arg1,arg2)
|
|
@@ -2785,6 +2025,7 @@ VALUE obj,arg1,arg2;
|
|
|
2785
2025
|
glPrioritizeTextures(size,textures,priorities);
|
|
2786
2026
|
xfree(textures);
|
|
2787
2027
|
xfree(priorities);
|
|
2028
|
+
CHECK_GLERROR
|
|
2788
2029
|
return Qnil;
|
|
2789
2030
|
}
|
|
2790
2031
|
|
|
@@ -2796,6 +2037,7 @@ VALUE obj,arg1;
|
|
|
2796
2037
|
Check_Type(arg1,T_ARRAY);
|
|
2797
2038
|
ary2cubyte(arg1,c,1);
|
|
2798
2039
|
glIndexubv(c);
|
|
2040
|
+
CHECK_GLERROR
|
|
2799
2041
|
return Qnil;
|
|
2800
2042
|
}
|
|
2801
2043
|
|
|
@@ -2824,7 +2066,7 @@ VALUE obj; \
|
|
|
2824
2066
|
gl_Color4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
|
|
2825
2067
|
break; \
|
|
2826
2068
|
default: \
|
|
2827
|
-
rb_raise(rb_eArgError, "array length:%
|
|
2069
|
+
rb_raise(rb_eArgError, "array length:%li", ary->len); \
|
|
2828
2070
|
} \
|
|
2829
2071
|
} \
|
|
2830
2072
|
else \
|
|
@@ -2871,7 +2113,7 @@ VALUE obj; \
|
|
|
2871
2113
|
gl_Normal3##_type_(obj,ary->ptr[0], ary->ptr[1],ary->ptr[2]); \
|
|
2872
2114
|
break; \
|
|
2873
2115
|
default: \
|
|
2874
|
-
rb_raise(rb_eArgError, "array length:%
|
|
2116
|
+
rb_raise(rb_eArgError, "array length:%li", ary->len); \
|
|
2875
2117
|
} \
|
|
2876
2118
|
} \
|
|
2877
2119
|
else \
|
|
@@ -2965,7 +2207,7 @@ VALUE obj; \
|
|
|
2965
2207
|
gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],ary2->ptr[0],ary2->ptr[1]); \
|
|
2966
2208
|
break; \
|
|
2967
2209
|
default: \
|
|
2968
|
-
rb_raise(rb_eArgError, "array length:%
|
|
2210
|
+
rb_raise(rb_eArgError, "array length:%li", ary->len); \
|
|
2969
2211
|
} \
|
|
2970
2212
|
} \
|
|
2971
2213
|
else \
|
|
@@ -3066,7 +2308,7 @@ VALUE obj; \
|
|
|
3066
2308
|
gl_Vertex4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
|
|
3067
2309
|
break; \
|
|
3068
2310
|
default: \
|
|
3069
|
-
rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%
|
|
2311
|
+
rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%li", ary->len); \
|
|
3070
2312
|
} \
|
|
3071
2313
|
} \
|
|
3072
2314
|
else \
|
|
@@ -3190,7 +2432,7 @@ void gl_init_functions_1_0__1_1(VALUE module)
|
|
|
3190
2432
|
rb_define_module_function(module, "glNewList", gl_NewList, 2);
|
|
3191
2433
|
rb_define_module_function(module, "glEndList", gl_EndList, 0);
|
|
3192
2434
|
rb_define_module_function(module, "glCallList", gl_CallList, 1);
|
|
3193
|
-
rb_define_module_function(module, "glCallLists", gl_CallLists,
|
|
2435
|
+
rb_define_module_function(module, "glCallLists", gl_CallLists, 2);
|
|
3194
2436
|
rb_define_module_function(module, "glDeleteLists", gl_DeleteLists, 2);
|
|
3195
2437
|
rb_define_module_function(module, "glGenLists", gl_GenLists, 1);
|
|
3196
2438
|
rb_define_module_function(module, "glListBase", gl_ListBase, 1);
|