ruby-opengl 0.33.0 → 0.40.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +42 -15
- data/doc/build_install.txt +70 -25
- data/doc/history.txt +4 -0
- data/doc/requirements_and_design.txt +2 -3
- data/doc/roadmap.txt +15 -2
- data/doc/screenshots.txt +23 -0
- data/doc/supplies/page_template.html +2 -1
- data/doc/thanks.txt +3 -0
- data/doc/tutorial.txt +5 -3
- data/examples/README +57 -7
- data/examples/legacy/COPYRIGHT +8 -0
- data/examples/{aaindex.rb → legacy/aaindex.rb} +6 -5
- data/examples/legacy/aapoly.rb +153 -0
- data/examples/legacy/aargb.rb +139 -0
- data/examples/legacy/accanti.rb +159 -0
- data/examples/legacy/accpersp.rb +216 -0
- data/examples/legacy/alpha.rb +133 -0
- data/examples/legacy/alpha3D.rb +165 -0
- data/examples/legacy/bezcurve.rb +107 -0
- data/examples/legacy/bezmesh.rb +131 -0
- data/examples/legacy/checker.rb +121 -0
- data/examples/legacy/clip.rb +104 -0
- data/examples/legacy/colormat.rb +145 -0
- data/examples/legacy/cube.rb +73 -0
- data/examples/legacy/depthcue.rb +101 -0
- data/examples/legacy/dof.rb +212 -0
- data/examples/legacy/double.rb +104 -0
- data/examples/legacy/drawf.rb +98 -0
- data/examples/legacy/feedback.rb +152 -0
- data/examples/legacy/fog.rb +172 -0
- data/examples/legacy/font-glut.rb +41 -0
- data/examples/legacy/font.rb +158 -0
- data/examples/legacy/hello.rb +75 -0
- data/examples/legacy/image.rb +145 -0
- data/examples/legacy/jitter.rb +209 -0
- data/examples/legacy/lines.rb +135 -0
- data/examples/legacy/list.rb +120 -0
- data/examples/legacy/material.rb +290 -0
- data/examples/legacy/mipmap.rb +159 -0
- data/examples/legacy/model.rb +119 -0
- data/examples/legacy/movelight.rb +140 -0
- data/examples/legacy/pickdepth.rb +180 -0
- data/examples/legacy/planet.rb +112 -0
- data/examples/legacy/quadric.rb +180 -0
- data/examples/legacy/readpixel.rb +59 -0
- data/examples/legacy/robot.rb +120 -0
- data/examples/legacy/select.rb +207 -0
- data/examples/{smooth_prev.rb → legacy/smooth.rb} +3 -2
- data/examples/legacy/stencil.rb +154 -0
- data/examples/legacy/stroke.rb +170 -0
- data/examples/legacy/surface.rb +170 -0
- data/examples/legacy/teaambient.rb +132 -0
- data/examples/legacy/teapots.rb +188 -0
- data/examples/legacy/tess.rb +222 -0
- data/examples/legacy/texbind.rb +157 -0
- data/examples/legacy/texgen.rb +171 -0
- data/examples/legacy/texturesurf.rb +128 -0
- data/examples/legacy/varray.rb +167 -0
- data/examples/legacy/wrap.rb +158 -0
- data/examples/nehe_lesson02.rb +117 -0
- data/examples/nehe_lesson03.rb +122 -0
- data/examples/nehe_lesson04.rb +133 -0
- data/examples/nehe_lesson05.rb +186 -0
- data/examples/plane.rb +1 -1
- data/examples/smooth.rb +4 -2
- data/examples/test.rb +3 -2
- data/ext/common/{rbogl.c → common.h} +99 -32
- data/ext/common/gl-enums.h +39 -1
- data/ext/gl/gl-1.0-1.1.c +350 -305
- data/ext/gl/gl-1.2.c +933 -38
- data/ext/gl/gl-1.3.c +725 -0
- data/ext/gl/gl-1.4.c +647 -0
- data/ext/gl/gl-1.5.c +362 -0
- data/ext/gl/gl-2.0.c +1632 -0
- data/ext/gl/gl-2.1.c +154 -0
- data/ext/gl/gl-enums.c +1 -2
- data/ext/gl/gl.c +58 -2
- data/ext/gl/mkrf_conf.rb +4 -1
- data/ext/glu/glu.c +5 -4
- data/ext/glu/mkrf_conf.rb +4 -1
- data/ext/glut/glut.c +7 -1
- data/ext/glut/mkrf_conf.rb +5 -0
- data/lib/gl_prev.rb +4 -3
- data/lib/glu_prev.rb +4 -3
- data/lib/glut_prev.rb +3 -3
- data/{examples/all_tests.rb → lib/opengl.rb} +9 -12
- data/test/README +5 -18
- data/test/tc_common.rb +79 -0
- data/test/tc_func_10_11.rb +1255 -0
- data/test/tc_func_12.rb +186 -0
- data/test/tc_func_13.rb +203 -0
- data/test/tc_func_14.rb +197 -0
- data/test/tc_func_15.rb +82 -0
- data/test/tc_func_20.rb +320 -0
- data/test/tc_func_21.rb +67 -0
- data/test/tc_include_gl.rb +1 -1
- data/test/{tc_opengl_namespace.rb → tc_misc.rb} +20 -20
- data/test/tc_require_gl.rb +1 -1
- metadata +99 -27
- data/ext/common/Rakefile +0 -39
- data/ext/common/rbogl.h +0 -52
- data/test/runtests.sh +0 -7
- data/test/tc_gl_vertex.rb +0 -180
data/examples/plane.rb
CHANGED
data/examples/smooth.rb
CHANGED
data/examples/test.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#!/usr/bin/env ruby -rubygems
|
1
2
|
# Copyright (C) 2006 Peter McLain <peter.mclain@gmail.com>
|
2
3
|
#
|
3
4
|
# This program is distributed under the terms of the MIT license.
|
@@ -11,8 +12,8 @@
|
|
11
12
|
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
12
13
|
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13
14
|
|
14
|
-
require '
|
15
|
-
require '
|
15
|
+
require 'glut'
|
16
|
+
require 'gl'
|
16
17
|
|
17
18
|
class GlutTest
|
18
19
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Last edit by previous maintainer:
|
3
|
-
*
|
3
|
+
* 2000/01/06 16:37:43, kusano
|
4
4
|
*
|
5
5
|
* Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
|
6
6
|
* Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
|
@@ -17,21 +17,55 @@
|
|
17
17
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
18
|
*/
|
19
19
|
|
20
|
+
#ifndef _RBOGL_H_
|
21
|
+
#define _RBOGL_H_
|
22
|
+
|
23
|
+
#include <ruby.h>
|
24
|
+
|
20
25
|
#ifdef __APPLE__
|
21
26
|
#include <OpenGL/gl.h>
|
27
|
+
#include <mach-o/dyld.h>
|
28
|
+
#include <stdlib.h>
|
29
|
+
#include <string.h>
|
22
30
|
#elif defined WIN32
|
23
31
|
#include <windows.h>
|
24
32
|
#include <GL/gl.h>
|
25
33
|
#else
|
26
34
|
#include <GL/gl.h>
|
35
|
+
#include <GL/glx.h>
|
27
36
|
#endif
|
28
37
|
|
29
|
-
#include "rbogl.h"
|
30
38
|
#include "gl-enums.h"
|
31
39
|
|
40
|
+
|
41
|
+
typedef struct RArray RArray;
|
42
|
+
|
43
|
+
extern VALUE cProc;
|
44
|
+
|
45
|
+
#define LOAD_GL_FUNC(_NAME_) \
|
46
|
+
if (fptr_##_NAME_==NULL) \
|
47
|
+
fptr_##_NAME_ = load_gl_function(#_NAME_, 1);
|
48
|
+
|
49
|
+
#define FORCE_PIXEL_STORE_MODE \
|
50
|
+
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT); \
|
51
|
+
glPixelStorei(GL_PACK_ALIGNMENT, 1); \
|
52
|
+
glPixelStorei(GL_PACK_SKIP_PIXELS, 0); \
|
53
|
+
glPixelStorei(GL_PACK_SKIP_ROWS, 0); \
|
54
|
+
glPixelStorei(GL_PACK_ROW_LENGTH, 0); \
|
55
|
+
glPixelStorei(GL_PACK_SKIP_IMAGES, 0); \
|
56
|
+
glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0);
|
57
|
+
/* glPixelStorei(GL_PACK_SKIP_VOLUMES_SGIS, 0);
|
58
|
+
glPixelStorei(GL_PACK_IMAGE_DEPTH_SGIS, 0); */
|
59
|
+
|
60
|
+
#define RESTORE_PIXEL_STORE_MODE \
|
61
|
+
glPopClientAttrib();
|
62
|
+
|
63
|
+
|
32
64
|
/* -------------------------------------------------------------------- */
|
33
|
-
#
|
34
|
-
|
65
|
+
#ifndef NUM2DBL
|
66
|
+
#define NUM2DBL(_val) num2double(_val)
|
67
|
+
|
68
|
+
static inline double num2double( VALUE val )
|
35
69
|
{
|
36
70
|
struct RFloat* flt;
|
37
71
|
if (NIL_P(val)) return 0;
|
@@ -41,8 +75,8 @@ extern double num2double( VALUE val )
|
|
41
75
|
#endif
|
42
76
|
|
43
77
|
/* -------------------------------------------------------------------- */
|
44
|
-
#define ARY2INTEGRAL(_type_) \
|
45
|
-
|
78
|
+
#define ARY2INTEGRAL(_type_,_convert_) \
|
79
|
+
static inline int ary2c##_type_( arg, cary, maxlen ) \
|
46
80
|
VALUE arg; \
|
47
81
|
GL##_type_ cary[]; \
|
48
82
|
int maxlen; \
|
@@ -58,22 +92,22 @@ int maxlen; \
|
|
58
92
|
for (i=0; i < maxlen; i++) \
|
59
93
|
{ \
|
60
94
|
entry = rb_ary_entry((VALUE)ary,i); \
|
61
|
-
cary[i] = (GL##_type_)
|
95
|
+
cary[i] = (GL##_type_)_convert_(entry); \
|
62
96
|
} \
|
63
97
|
return i; \
|
64
98
|
}
|
65
99
|
|
66
|
-
ARY2INTEGRAL(int)
|
67
|
-
ARY2INTEGRAL(uint)
|
68
|
-
ARY2INTEGRAL(byte)
|
69
|
-
ARY2INTEGRAL(ubyte)
|
70
|
-
ARY2INTEGRAL(short)
|
71
|
-
ARY2INTEGRAL(ushort)
|
72
|
-
ARY2INTEGRAL(boolean)
|
100
|
+
ARY2INTEGRAL(int,NUM2INT)
|
101
|
+
ARY2INTEGRAL(uint,NUM2UINT)
|
102
|
+
ARY2INTEGRAL(byte,NUM2INT)
|
103
|
+
ARY2INTEGRAL(ubyte,NUM2INT)
|
104
|
+
ARY2INTEGRAL(short,NUM2INT)
|
105
|
+
ARY2INTEGRAL(ushort,NUM2INT)
|
106
|
+
ARY2INTEGRAL(boolean,NUM2INT)
|
73
107
|
#undef ARY2INTEGRAL
|
74
108
|
|
75
109
|
/* -------------------------------------------------------------------- */
|
76
|
-
|
110
|
+
static inline int ary2cflt(arg, cary, maxlen)
|
77
111
|
VALUE arg;
|
78
112
|
float cary[];
|
79
113
|
int maxlen;
|
@@ -91,7 +125,7 @@ int maxlen;
|
|
91
125
|
}
|
92
126
|
|
93
127
|
/* -------------------------------------------------------------------- */
|
94
|
-
|
128
|
+
static inline int ary2cdbl(arg, cary, maxlen)
|
95
129
|
VALUE arg;
|
96
130
|
double cary[];
|
97
131
|
int maxlen;
|
@@ -109,7 +143,7 @@ int maxlen;
|
|
109
143
|
}
|
110
144
|
|
111
145
|
/* -------------------------------------------------------------------- */
|
112
|
-
|
146
|
+
static inline void mary2ary(src, ary)
|
113
147
|
VALUE src;
|
114
148
|
VALUE ary;
|
115
149
|
{
|
@@ -119,14 +153,14 @@ VALUE ary;
|
|
119
153
|
for (i = 0; i < tmp_ary->len; i++)
|
120
154
|
{
|
121
155
|
if (TYPE(tmp_ary->ptr[i]) == T_ARRAY)
|
122
|
-
mary2ary((VALUE)tmp_ary, ary);
|
156
|
+
mary2ary((VALUE)tmp_ary->ptr[i], ary);
|
123
157
|
else
|
124
158
|
rb_ary_push(ary, tmp_ary->ptr[i]);
|
125
159
|
}
|
126
160
|
}
|
127
161
|
|
128
162
|
/* -------------------------------------------------------------------- */
|
129
|
-
|
163
|
+
static inline void ary2cmat4x4dbl(ary, cary)
|
130
164
|
VALUE ary;
|
131
165
|
double cary[];
|
132
166
|
{
|
@@ -147,7 +181,7 @@ double cary[];
|
|
147
181
|
}
|
148
182
|
}
|
149
183
|
|
150
|
-
|
184
|
+
static inline void ary2cmat4x4flt(ary, cary)
|
151
185
|
VALUE ary;
|
152
186
|
float cary[];
|
153
187
|
{
|
@@ -170,7 +204,7 @@ float cary[];
|
|
170
204
|
|
171
205
|
/* -------------------------------------------------------------------- */
|
172
206
|
/*Need to find proper size for glReadPixels array*/
|
173
|
-
int glformat_size(GLenum format)
|
207
|
+
static inline int glformat_size(GLenum format)
|
174
208
|
{
|
175
209
|
switch(format)
|
176
210
|
{
|
@@ -206,7 +240,7 @@ int glformat_size(GLenum format)
|
|
206
240
|
}
|
207
241
|
|
208
242
|
/* -------------------------------------------------------------------- */
|
209
|
-
int gltype_size(GLenum type)
|
243
|
+
static inline int gltype_size(GLenum type)
|
210
244
|
{
|
211
245
|
switch(type)
|
212
246
|
{
|
@@ -214,7 +248,7 @@ int gltype_size(GLenum type)
|
|
214
248
|
case GL_UNSIGNED_BYTE:
|
215
249
|
case GL_UNSIGNED_BYTE_3_3_2:
|
216
250
|
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
217
|
-
return
|
251
|
+
return 1;
|
218
252
|
|
219
253
|
case GL_SHORT:
|
220
254
|
case GL_UNSIGNED_SHORT:
|
@@ -224,7 +258,7 @@ int gltype_size(GLenum type)
|
|
224
258
|
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
225
259
|
case GL_UNSIGNED_SHORT_5_5_5_1:
|
226
260
|
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
227
|
-
return
|
261
|
+
return 2;
|
228
262
|
|
229
263
|
case GL_INT:
|
230
264
|
case GL_UNSIGNED_INT:
|
@@ -233,10 +267,10 @@ int gltype_size(GLenum type)
|
|
233
267
|
case GL_UNSIGNED_INT_8_8_8_8_REV:
|
234
268
|
case GL_UNSIGNED_INT_10_10_10_2:
|
235
269
|
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
236
|
-
return
|
270
|
+
return 4;
|
237
271
|
|
238
272
|
case GL_BITMAP:
|
239
|
-
return
|
273
|
+
return 0;
|
240
274
|
|
241
275
|
default:
|
242
276
|
return -1;
|
@@ -244,17 +278,50 @@ int gltype_size(GLenum type)
|
|
244
278
|
}
|
245
279
|
|
246
280
|
/* -------------------------------------------------------------------- */
|
247
|
-
VALUE allocate_buffer_with_string( int size )
|
281
|
+
static inline VALUE allocate_buffer_with_string( int size )
|
248
282
|
{
|
249
283
|
return rb_str_new(NULL, size);
|
250
284
|
}
|
251
285
|
|
252
286
|
/* -------------------------------------------------------------------- */
|
253
|
-
void
|
254
|
-
|
255
|
-
void Init_opengl()
|
287
|
+
static inline void *load_gl_function(const char *name,int raise)
|
256
288
|
{
|
257
|
-
|
258
|
-
|
289
|
+
void *func_ptr = NULL;
|
290
|
+
|
291
|
+
#if defined(__APPLE__)
|
292
|
+
static const struct mach_header* library = NULL;
|
293
|
+
char* symbolName;
|
294
|
+
NSSymbol symbol;
|
295
|
+
if (library == NULL)
|
296
|
+
library = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL",NSADDIMAGE_OPTION_RETURN_ON_ERROR);
|
297
|
+
|
298
|
+
if (library == NULL)
|
299
|
+
rb_raise(rb_eRuntimeError,"Can't load OpenGL library for dynamic loading");
|
300
|
+
|
301
|
+
/* prepend a '_' for the Unix C symbol mangling convention */
|
302
|
+
symbolName = ALLOC_N(char,strlen(name) + 2);
|
303
|
+
symbolName[0] = '_';
|
304
|
+
strcpy(symbolName+1, name);
|
305
|
+
|
306
|
+
symbol = NSLookupSymbolInImage(library,symbolName,NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
|
307
|
+
xfree(symbolName);
|
308
|
+
|
309
|
+
if (symbol == NULL)
|
310
|
+
func_ptr = NULL;
|
311
|
+
else
|
312
|
+
func_ptr = NSAddressOfSymbol(symbol);
|
313
|
+
#elif defined(WIN32) || defined(_WIN32)
|
314
|
+
func_ptr = wglGetProcAddress((LPCSTR)name);
|
315
|
+
#elif defined(GLX_VERSION_1_4)
|
316
|
+
func_ptr = glXGetProcAddress((const GLubyte *)name);
|
317
|
+
#else
|
318
|
+
func_ptr = glXGetProcAddressARB((const GLubyte *)name);
|
319
|
+
#endif
|
320
|
+
|
321
|
+
if (func_ptr == NULL && raise == 1)
|
322
|
+
rb_raise(rb_eNotImpError,"Function %s is not available at this machine",name);
|
323
|
+
|
324
|
+
return func_ptr;
|
259
325
|
}
|
260
326
|
|
327
|
+
#endif /* _RBOGL_H_ */
|
data/ext/common/gl-enums.h
CHANGED
@@ -1,4 +1,42 @@
|
|
1
|
-
/*
|
1
|
+
/* GL types - define if system GLheaders are not recent */
|
2
|
+
|
3
|
+
/* GL base */
|
4
|
+
#ifndef GL_VERSION_1_5
|
5
|
+
typedef ptrdiff_t GLintptr;
|
6
|
+
typedef ptrdiff_t GLsizeiptr;
|
7
|
+
#endif
|
8
|
+
|
9
|
+
#ifndef GL_VERSION_2_0
|
10
|
+
typedef char GLchar;
|
11
|
+
#endif
|
12
|
+
|
13
|
+
/* new GL types introduced by ARB extensions */
|
14
|
+
#ifndef GL_ARB_half_float_pixel
|
15
|
+
typedef unsigned short GLhalfARB;
|
16
|
+
#endif
|
17
|
+
|
18
|
+
#ifndef GL_ARB_shader_objects
|
19
|
+
typedef char GLcharARB;
|
20
|
+
typedef unsigned int GLhandleARB;
|
21
|
+
#endif
|
22
|
+
|
23
|
+
#ifndef GL_ARB_vertex_buffer_object
|
24
|
+
typedef ptrdiff_t GLintptrARB;
|
25
|
+
typedef ptrdiff_t GLsizeiptrARB;
|
26
|
+
#endif
|
27
|
+
|
28
|
+
/* new GL types introduced by other extensions */
|
29
|
+
#ifndef GL_NV_half_float
|
30
|
+
typedef unsigned short GLhalfNV;
|
31
|
+
#endif
|
32
|
+
|
33
|
+
/* List of GL enumerators */
|
34
|
+
|
35
|
+
/* The code below was genereated on Sun Feb 11 01:24:24 +0100 2007
|
36
|
+
source: http://www.opengl.org/registry/api/enum.spec
|
37
|
+
http://www.opengl.org/registry/api/enumext.spec
|
38
|
+
*/
|
39
|
+
|
2
40
|
#ifndef _GLENUMS_H_
|
3
41
|
#define _GLENUMS_H_
|
4
42
|
|
data/ext/gl/gl-1.0-1.1.c
CHANGED
@@ -22,8 +22,7 @@
|
|
22
22
|
#else
|
23
23
|
#include <GL/gl.h>
|
24
24
|
#endif
|
25
|
-
#include "../common/
|
26
|
-
#include "../common/gl-enums.h"
|
25
|
+
#include "../common/common.h"
|
27
26
|
|
28
27
|
#ifndef MAX
|
29
28
|
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
@@ -37,7 +36,7 @@ VALUE obj,arg1,arg2;
|
|
37
36
|
{
|
38
37
|
GLuint list;
|
39
38
|
GLenum mode;
|
40
|
-
list = (GLuint)
|
39
|
+
list = (GLuint)NUM2UINT(arg1);
|
41
40
|
mode = (GLenum)NUM2INT(arg2);
|
42
41
|
glNewList(list,mode);
|
43
42
|
return Qnil;
|
@@ -56,7 +55,7 @@ gl_CallList(obj,arg1)
|
|
56
55
|
VALUE obj,arg1;
|
57
56
|
{
|
58
57
|
GLuint list;
|
59
|
-
list = (GLuint)
|
58
|
+
list = (GLuint)NUM2UINT(arg1);
|
60
59
|
glCallList(list);
|
61
60
|
return Qnil;
|
62
61
|
}
|
@@ -74,10 +73,10 @@ VALUE obj,arg1;
|
|
74
73
|
n = RSTRING(arg1)->len;
|
75
74
|
} else if (TYPE(arg1) == T_ARRAY) {
|
76
75
|
type = GL_INT;
|
77
|
-
lists = ALLOC_N(
|
76
|
+
lists = ALLOC_N(GLint, RARRAY(arg1)->len);
|
78
77
|
n = ary2cint(arg1,lists,0);
|
79
78
|
} else {
|
80
|
-
|
79
|
+
Check_Type(arg1,T_ARRAY); /* force exception */
|
81
80
|
return Qnil; /* not reached */
|
82
81
|
}
|
83
82
|
glCallLists(n, type, lists);
|
@@ -91,8 +90,8 @@ VALUE obj,arg1,arg2;
|
|
91
90
|
{
|
92
91
|
GLuint list;
|
93
92
|
GLsizei range;
|
94
|
-
list = (GLuint)
|
95
|
-
range = (GLsizei)
|
93
|
+
list = (GLuint)NUM2UINT(arg1);
|
94
|
+
range = (GLsizei)NUM2UINT(arg2);
|
96
95
|
glDeleteLists(list,range);
|
97
96
|
return Qnil;
|
98
97
|
}
|
@@ -103,7 +102,7 @@ VALUE obj,arg1;
|
|
103
102
|
{
|
104
103
|
GLsizei range;
|
105
104
|
GLuint ret;
|
106
|
-
range = (GLsizei)
|
105
|
+
range = (GLsizei)NUM2UINT(arg1);
|
107
106
|
ret = glGenLists(range);
|
108
107
|
return INT2NUM(ret);
|
109
108
|
}
|
@@ -113,7 +112,7 @@ gl_ListBase(obj,arg1)
|
|
113
112
|
VALUE obj,arg1;
|
114
113
|
{
|
115
114
|
GLuint base;
|
116
|
-
base = (GLuint)
|
115
|
+
base = (GLuint)NUM2UINT(arg1);
|
117
116
|
glListBase(base);
|
118
117
|
return Qnil;
|
119
118
|
}
|
@@ -138,19 +137,25 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
138
137
|
GLfloat yorig;
|
139
138
|
GLfloat xmove;
|
140
139
|
GLfloat ymove;
|
141
|
-
|
142
|
-
|
143
|
-
height = (GLsizei)NUM2INT(arg2);
|
140
|
+
width = (GLsizei)NUM2UINT(arg1);
|
141
|
+
height = (GLsizei)NUM2UINT(arg2);
|
144
142
|
xorig = (GLfloat)NUM2DBL(arg3);
|
145
143
|
yorig = (GLfloat)NUM2DBL(arg4);
|
146
144
|
xmove = (GLfloat)NUM2DBL(arg5);
|
147
145
|
ymove = (GLfloat)NUM2DBL(arg6);
|
148
|
-
if (TYPE(arg7)
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
146
|
+
if (TYPE(arg7) == T_FIXNUM || TYPE(arg7) == T_BIGNUM) { /* offset to unpack buffer */
|
147
|
+
GLuint offset = NUM2UINT(arg7);
|
148
|
+
glBitmap(width, height, xorig, yorig, xmove, ymove, (GLvoid *)offset);
|
149
|
+
} else if (TYPE(arg7) == T_STRING) {
|
150
|
+
const GLubyte *bitmap;
|
151
|
+
if (RSTRING(arg7)->len < (width * height / 8))
|
152
|
+
rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
|
153
|
+
|
154
|
+
bitmap = (const GLubyte*)RSTRING(arg7)->ptr;
|
155
|
+
glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
|
156
|
+
} else {
|
157
|
+
Check_Type(arg7,T_STRING); /* force exception */
|
158
|
+
}
|
154
159
|
return Qnil;
|
155
160
|
}
|
156
161
|
|
@@ -245,9 +250,9 @@ VALUE obj,arg1,arg2,arg3;
|
|
245
250
|
GLuint red;
|
246
251
|
GLuint green;
|
247
252
|
GLuint blue;
|
248
|
-
red = (GLuint)
|
249
|
-
green = (GLuint)
|
250
|
-
blue = (GLuint)
|
253
|
+
red = (GLuint)NUM2UINT(arg1);
|
254
|
+
green = (GLuint)NUM2UINT(arg2);
|
255
|
+
blue = (GLuint)NUM2UINT(arg3);
|
251
256
|
glColor3ui(red,green,blue);
|
252
257
|
return Qnil;
|
253
258
|
}
|
@@ -370,10 +375,10 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
370
375
|
GLuint green;
|
371
376
|
GLuint blue;
|
372
377
|
GLuint alpha;
|
373
|
-
red = (GLuint)
|
374
|
-
green = (GLuint)
|
375
|
-
blue = (GLuint)
|
376
|
-
alpha = (GLuint)
|
378
|
+
red = (GLuint)NUM2UINT(arg1);
|
379
|
+
green = (GLuint)NUM2UINT(arg2);
|
380
|
+
blue = (GLuint)NUM2UINT(arg3);
|
381
|
+
alpha = (GLuint)NUM2UINT(arg4);
|
377
382
|
glColor4ui(red,green,blue,alpha);
|
378
383
|
return Qnil;
|
379
384
|
}
|
@@ -409,8 +414,7 @@ gl_EdgeFlagv(obj,arg1)
|
|
409
414
|
VALUE obj,arg1;
|
410
415
|
{
|
411
416
|
GLboolean flag[1] = { GL_FALSE };
|
412
|
-
|
413
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
417
|
+
Check_Type(arg1,T_ARRAY);
|
414
418
|
ary2cboolean(arg1,flag,1);
|
415
419
|
glEdgeFlagv(flag);
|
416
420
|
return Qnil;
|
@@ -439,8 +443,7 @@ gl_Indexdv(obj,arg1)
|
|
439
443
|
VALUE obj,arg1;
|
440
444
|
{
|
441
445
|
GLdouble c[1] = {0.0};
|
442
|
-
|
443
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
446
|
+
Check_Type(arg1,T_ARRAY);
|
444
447
|
ary2cdbl(arg1,c,1);
|
445
448
|
glIndexdv(c);
|
446
449
|
return Qnil;
|
@@ -461,8 +464,7 @@ gl_Indexfv(obj,arg1)
|
|
461
464
|
VALUE obj,arg1;
|
462
465
|
{
|
463
466
|
GLfloat c[1] = {0.0};
|
464
|
-
|
465
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
467
|
+
Check_Type(arg1,T_ARRAY);
|
466
468
|
ary2cflt(arg1,c,1);
|
467
469
|
glIndexfv(c);
|
468
470
|
return Qnil;
|
@@ -483,8 +485,7 @@ gl_Indexiv(obj,arg1)
|
|
483
485
|
VALUE obj,arg1;
|
484
486
|
{
|
485
487
|
GLint c[1] = {0.0};
|
486
|
-
|
487
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
488
|
+
Check_Type(arg1,T_ARRAY);
|
488
489
|
ary2cint(arg1,c,1);
|
489
490
|
glIndexiv(c);
|
490
491
|
return Qnil;
|
@@ -505,8 +506,7 @@ gl_Indexsv(obj,arg1)
|
|
505
506
|
VALUE obj,arg1;
|
506
507
|
{
|
507
508
|
GLshort c[1] = {0};
|
508
|
-
|
509
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
509
|
+
Check_Type(arg1,T_ARRAY);
|
510
510
|
ary2cshort(arg1,c,1);
|
511
511
|
glIndexsv(c);
|
512
512
|
return Qnil;
|
@@ -1197,10 +1197,8 @@ VALUE obj,arg1,arg2;
|
|
1197
1197
|
GLenum plane;
|
1198
1198
|
GLdouble equation[4];
|
1199
1199
|
plane = (GLenum)NUM2INT(arg1);
|
1200
|
-
|
1201
|
-
|
1202
|
-
else
|
1203
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
1200
|
+
Check_Type(arg2,T_ARRAY);
|
1201
|
+
ary2cdbl(arg2, equation, 4);
|
1204
1202
|
glClipPlane(plane,equation);
|
1205
1203
|
return Qnil;
|
1206
1204
|
}
|
@@ -1246,8 +1244,7 @@ VALUE obj,arg1,arg2;
|
|
1246
1244
|
GLenum pname;
|
1247
1245
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1248
1246
|
pname = (GLenum)NUM2INT(arg1);
|
1249
|
-
|
1250
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
|
1247
|
+
Check_Type(arg2,T_ARRAY);
|
1251
1248
|
ary2cflt(arg2,params,4);
|
1252
1249
|
glFogfv(pname,params);
|
1253
1250
|
return Qnil;
|
@@ -1272,8 +1269,7 @@ VALUE obj,arg1,arg2;
|
|
1272
1269
|
GLenum pname;
|
1273
1270
|
GLint params[4] = {0,0,0,0};
|
1274
1271
|
pname = (GLenum)NUM2INT(arg1);
|
1275
|
-
|
1276
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
|
1272
|
+
Check_Type(arg2,T_ARRAY);
|
1277
1273
|
ary2cint(arg2,params,4);
|
1278
1274
|
glFogiv(pname,params);
|
1279
1275
|
return Qnil;
|
@@ -1295,8 +1291,8 @@ VALUE obj,arg1,arg2;
|
|
1295
1291
|
{
|
1296
1292
|
GLenum target;
|
1297
1293
|
GLenum mode;
|
1298
|
-
target = (GLenum)
|
1299
|
-
mode = (GLenum)
|
1294
|
+
target = (GLenum)NUM2UINT(arg1);
|
1295
|
+
mode = (GLenum)NUM2UINT(arg2);
|
1300
1296
|
glHint(target,mode);
|
1301
1297
|
return Qnil;
|
1302
1298
|
}
|
@@ -1324,8 +1320,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1324
1320
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1325
1321
|
light = (GLenum)NUM2INT(arg1);
|
1326
1322
|
pname = (GLenum)NUM2INT(arg2);
|
1327
|
-
|
1328
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1323
|
+
Check_Type(arg3,T_ARRAY);
|
1329
1324
|
ary2cflt(arg3,params,4);
|
1330
1325
|
glLightfv(light,pname,params);
|
1331
1326
|
return Qnil;
|
@@ -1354,8 +1349,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1354
1349
|
GLint params[4]={0,0,0,0};
|
1355
1350
|
light = (GLenum)NUM2INT(arg1);
|
1356
1351
|
pname = (GLenum)NUM2INT(arg2);
|
1357
|
-
|
1358
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1352
|
+
Check_Type(arg3,T_ARRAY);
|
1359
1353
|
ary2cint(arg3,params,4);
|
1360
1354
|
glLightiv(light,pname,params);
|
1361
1355
|
return Qnil;
|
@@ -1380,8 +1374,7 @@ VALUE obj,arg1,arg2;
|
|
1380
1374
|
GLenum pname;
|
1381
1375
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1382
1376
|
pname = (GLenum)NUM2INT(arg1);
|
1383
|
-
|
1384
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
|
1377
|
+
Check_Type(arg2,T_ARRAY);
|
1385
1378
|
ary2cflt(arg2,params,4);
|
1386
1379
|
glLightModelfv(pname,params);
|
1387
1380
|
return Qnil;
|
@@ -1406,8 +1399,7 @@ VALUE obj,arg1,arg2;
|
|
1406
1399
|
GLenum pname;
|
1407
1400
|
GLint params[4] = {0,0,0,0};
|
1408
1401
|
pname = (GLenum)NUM2INT(arg1);
|
1409
|
-
|
1410
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
|
1402
|
+
Check_Type(arg2,T_ARRAY);
|
1411
1403
|
ary2cint(arg2,params,4);
|
1412
1404
|
glLightModeliv(pname,params);
|
1413
1405
|
return Qnil;
|
@@ -1458,8 +1450,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1458
1450
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1459
1451
|
face = (GLenum)NUM2INT(arg1);
|
1460
1452
|
pname = (GLenum)NUM2INT(arg2);
|
1461
|
-
|
1462
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg3));
|
1453
|
+
Check_Type(arg3,T_ARRAY);
|
1463
1454
|
ary2cflt(arg3,params,4);
|
1464
1455
|
glMaterialfv(face,pname,params);
|
1465
1456
|
return Qnil;
|
@@ -1488,8 +1479,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1488
1479
|
GLint params[4] = {0,0,0,0};
|
1489
1480
|
face = (GLenum)NUM2INT(arg1);
|
1490
1481
|
pname = (GLenum)NUM2INT(arg2);
|
1491
|
-
|
1492
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg3));
|
1482
|
+
Check_Type(arg3,T_ARRAY);
|
1493
1483
|
ary2cint(arg3,params,4);
|
1494
1484
|
glMaterialiv(face,pname,params);
|
1495
1485
|
return Qnil;
|
@@ -1522,13 +1512,9 @@ gl_PolygonStipple(obj,arg1)
|
|
1522
1512
|
VALUE obj,arg1;
|
1523
1513
|
{
|
1524
1514
|
GLubyte mask[128];
|
1525
|
-
|
1526
|
-
int i;
|
1527
|
-
memset(mask, 0x0, sizeof(GLubyte[128]));
|
1515
|
+
memset(mask, 0x0, sizeof(GLubyte)*128);
|
1528
1516
|
if (TYPE(arg1) == T_ARRAY) {
|
1529
|
-
|
1530
|
-
for(i = 0; i < ary->len && i < 128; i++)
|
1531
|
-
mask[i] = (GLubyte)NUM2INT(ary->ptr[i]);
|
1517
|
+
ary2cubyte(arg1,mask,128);
|
1532
1518
|
}
|
1533
1519
|
else if (TYPE(arg1) == T_STRING) {
|
1534
1520
|
if (RSTRING(arg1)->len < 128)
|
@@ -1536,7 +1522,7 @@ VALUE obj,arg1;
|
|
1536
1522
|
memcpy(mask, RSTRING(arg1)->ptr, 128);
|
1537
1523
|
}
|
1538
1524
|
else
|
1539
|
-
|
1525
|
+
Check_Type(arg1,T_STRING); /* force exception */
|
1540
1526
|
glPolygonStipple(mask);
|
1541
1527
|
return Qnil;
|
1542
1528
|
}
|
@@ -1551,8 +1537,8 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
1551
1537
|
GLsizei height;
|
1552
1538
|
x = (GLint)NUM2INT(arg1);
|
1553
1539
|
y = (GLint)NUM2INT(arg2);
|
1554
|
-
width = (GLsizei)
|
1555
|
-
height = (GLsizei)
|
1540
|
+
width = (GLsizei)NUM2UINT(arg3);
|
1541
|
+
height = (GLsizei)NUM2UINT(arg4);
|
1556
1542
|
glScissor(x,y,width,height);
|
1557
1543
|
return Qnil;
|
1558
1544
|
}
|
@@ -1590,8 +1576,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1590
1576
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1591
1577
|
target = (GLenum)NUM2INT(arg1);
|
1592
1578
|
pname = (GLenum)NUM2INT(arg2);
|
1593
|
-
|
1594
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1579
|
+
Check_Type(arg3,T_ARRAY);
|
1595
1580
|
ary2cflt(arg3,params,4);
|
1596
1581
|
glTexParameterfv(target,pname,params);
|
1597
1582
|
return Qnil;
|
@@ -1620,8 +1605,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1620
1605
|
GLint params[4] = {0,0,0,0};
|
1621
1606
|
target = (GLenum)NUM2INT(arg1);
|
1622
1607
|
pname = (GLenum)NUM2INT(arg2);
|
1623
|
-
|
1624
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1608
|
+
Check_Type(arg3,T_ARRAY);
|
1625
1609
|
ary2cint(arg3,params,4);
|
1626
1610
|
glTexParameteriv(target,pname,params);
|
1627
1611
|
return Qnil;
|
@@ -1646,28 +1630,34 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
|
|
1646
1630
|
target = (GLenum)NUM2INT(arg1);
|
1647
1631
|
level = (GLint)NUM2INT(arg2);
|
1648
1632
|
components = (GLint)NUM2INT(arg3);
|
1649
|
-
width = (GLsizei)
|
1633
|
+
width = (GLsizei)NUM2UINT(arg4);
|
1650
1634
|
border = (GLint)NUM2INT(arg5);
|
1651
1635
|
format = (GLenum)NUM2INT(arg6);
|
1652
1636
|
type = (GLenum)NUM2INT(arg7);
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
pixels = RSTRING(arg8)->ptr;
|
1662
|
-
} else if (NIL_P(arg8)) {
|
1663
|
-
type_size = gltype_size(type) / 8;
|
1664
|
-
format_size = glformat_size(format);
|
1665
|
-
if (type_size <= 0 || format_size == -1)
|
1666
|
-
return Qnil;
|
1637
|
+
type_size = gltype_size(type);
|
1638
|
+
format_size = glformat_size(format);
|
1639
|
+
|
1640
|
+
if (type_size == -1 || format_size == -1)
|
1641
|
+
return Qnil;
|
1642
|
+
if (type==GL_BITMAP)
|
1643
|
+
size = format_size*(width/8);
|
1644
|
+
else
|
1667
1645
|
size = type_size*format_size*width;
|
1646
|
+
|
1647
|
+
if (target == GL_PROXY_TEXTURE_1D || NIL_P(arg8)) { /* proxy texture, no data read */
|
1668
1648
|
pixels = NULL;
|
1669
|
-
} else
|
1670
|
-
|
1649
|
+
} else {
|
1650
|
+
if (TYPE(arg8) == T_FIXNUM || TYPE(arg8) == T_BIGNUM) { /* arg8 is offset to unpack buffer */
|
1651
|
+
pixels = (const char *)NUM2UINT(arg8);
|
1652
|
+
} else if (TYPE(arg8) == T_STRING) { /* image data */
|
1653
|
+
if (RSTRING(arg8)->len < size)
|
1654
|
+
rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len);
|
1655
|
+
pixels = RSTRING(arg8)->ptr;
|
1656
|
+
} else {
|
1657
|
+
Check_Type(arg8,T_STRING); /* force exception */
|
1658
|
+
return Qnil;
|
1659
|
+
}
|
1660
|
+
}
|
1671
1661
|
glTexImage1D(target,level,components,width,border,format,type,pixels);
|
1672
1662
|
return Qnil;
|
1673
1663
|
}
|
@@ -1691,29 +1681,35 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
|
|
1691
1681
|
target = (GLenum)NUM2INT(arg1);
|
1692
1682
|
level = (GLint)NUM2INT(arg2);
|
1693
1683
|
components = (GLint)NUM2INT(arg3);
|
1694
|
-
width = (GLsizei)
|
1695
|
-
height = (GLsizei)
|
1684
|
+
width = (GLsizei)NUM2UINT(arg4);
|
1685
|
+
height = (GLsizei)NUM2UINT(arg5);
|
1696
1686
|
border = (GLint)NUM2INT(arg6);
|
1697
1687
|
format = (GLenum)NUM2INT(arg7);
|
1698
1688
|
type = (GLenum)NUM2INT(arg8);
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1702
|
-
|
1703
|
-
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1707
|
-
pixels = RSTRING(arg9)->ptr;
|
1708
|
-
} else if (NIL_P(arg9)) {
|
1709
|
-
type_size = gltype_size(type) / 8;
|
1710
|
-
format_size = glformat_size(format);
|
1711
|
-
if (type_size <= 0 || format_size == -1)
|
1712
|
-
return Qnil;
|
1689
|
+
type_size = gltype_size(type);
|
1690
|
+
format_size = glformat_size(format);
|
1691
|
+
|
1692
|
+
if (type_size == -1 || format_size == -1)
|
1693
|
+
return Qnil;
|
1694
|
+
if (type==GL_BITMAP)
|
1695
|
+
size = format_size*((height*width)/8);
|
1696
|
+
else
|
1713
1697
|
size = type_size*format_size*height*width;
|
1698
|
+
|
1699
|
+
if (target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_CUBE_MAP || NIL_P(arg9)) { /* proxy texture, no data read */
|
1714
1700
|
pixels = NULL;
|
1715
|
-
} else
|
1716
|
-
|
1701
|
+
} else {
|
1702
|
+
if (TYPE(arg9) == T_FIXNUM || TYPE(arg9) == T_BIGNUM) { /* arg9 is offset to unpack buffer */
|
1703
|
+
pixels = (const char *)NUM2UINT(arg9);
|
1704
|
+
} else if (TYPE(arg9) == T_STRING) { /* image data */
|
1705
|
+
if (RSTRING(arg9)->len < size)
|
1706
|
+
rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
|
1707
|
+
pixels = RSTRING(arg9)->ptr;
|
1708
|
+
} else {
|
1709
|
+
Check_Type(arg9,T_STRING); /* force exception */
|
1710
|
+
return Qnil;
|
1711
|
+
}
|
1712
|
+
}
|
1717
1713
|
glTexImage2D(target,level,components,width,height,border,format,type,pixels);
|
1718
1714
|
return Qnil;
|
1719
1715
|
}
|
@@ -1741,8 +1737,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1741
1737
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1742
1738
|
target = (GLenum)NUM2INT(arg1);
|
1743
1739
|
pname = (GLenum)NUM2INT(arg2);
|
1744
|
-
|
1745
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1740
|
+
Check_Type(arg3,T_ARRAY);
|
1746
1741
|
ary2cflt(arg3,params,4);
|
1747
1742
|
glTexEnvfv(target,pname,params);
|
1748
1743
|
return Qnil;
|
@@ -1771,8 +1766,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1771
1766
|
GLint params[4] = {0,0,0,0};
|
1772
1767
|
target = (GLenum)NUM2INT(arg1);
|
1773
1768
|
pname = (GLenum)NUM2INT(arg2);
|
1774
|
-
|
1775
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1769
|
+
Check_Type(arg3,T_ARRAY);
|
1776
1770
|
ary2cint(arg3,params,4);
|
1777
1771
|
glTexEnviv(target,pname,params);
|
1778
1772
|
return Qnil;
|
@@ -1801,8 +1795,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1801
1795
|
GLdouble params[4] = {0.0,0.0,0.0,0.0};
|
1802
1796
|
coord = (GLenum)NUM2INT(arg1);
|
1803
1797
|
pname = (GLenum)NUM2INT(arg2);
|
1804
|
-
|
1805
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1798
|
+
Check_Type(arg3,T_ARRAY);
|
1806
1799
|
ary2cdbl(arg3,params,4);
|
1807
1800
|
glTexGendv(coord,pname,params);
|
1808
1801
|
return Qnil;
|
@@ -1832,8 +1825,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
1832
1825
|
GLfloat params[4] = {0.0,0.0,0.0,0.0};
|
1833
1826
|
coord = (GLenum)NUM2INT(arg1);
|
1834
1827
|
pname = (GLenum)NUM2INT(arg2);
|
1835
|
-
|
1836
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1828
|
+
Check_Type(arg3,T_ARRAY);
|
1837
1829
|
ary2cflt(arg3,params,4);
|
1838
1830
|
glTexGenfv(coord,pname,params);
|
1839
1831
|
return Qnil;
|
@@ -1862,34 +1854,20 @@ VALUE obj,arg1,arg2,arg3;
|
|
1862
1854
|
GLint params[4] = {0,0,0,0};
|
1863
1855
|
coord = (GLenum)NUM2INT(arg1);
|
1864
1856
|
pname = (GLenum)NUM2INT(arg2);
|
1865
|
-
|
1866
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
|
1857
|
+
Check_Type(arg3,T_ARRAY);
|
1867
1858
|
ary2cint(arg3,params,4);
|
1868
1859
|
glTexGeniv(coord,pname,params);
|
1869
1860
|
return Qnil;
|
1870
1861
|
}
|
1871
|
-
|
1872
|
-
#define DEFAULT_BUFFER 512
|
1873
1862
|
static VALUE g_current_feed_buffer;
|
1874
1863
|
static VALUE
|
1875
|
-
gl_FeedbackBuffer(
|
1876
|
-
|
1877
|
-
VALUE* argv;
|
1878
|
-
VALUE obj;
|
1864
|
+
gl_FeedbackBuffer(obj,arg1,arg2)
|
1865
|
+
VALUE obj,arg1,arg2;
|
1879
1866
|
{
|
1880
1867
|
GLsizei size;
|
1881
1868
|
GLenum type;
|
1882
|
-
|
1883
|
-
|
1884
|
-
type = GL_4D_COLOR_TEXTURE;
|
1885
|
-
}
|
1886
|
-
else if (argc == 2) {
|
1887
|
-
size = NUM2INT(argv[0]);
|
1888
|
-
type = NUM2INT(argv[1]);
|
1889
|
-
}
|
1890
|
-
else {
|
1891
|
-
rb_raise(rb_eTypeError, "GL.FeedbackBuffer");
|
1892
|
-
}
|
1869
|
+
size = (GLsizei)NUM2UINT(arg1);
|
1870
|
+
type = (GLenum)NUM2INT(arg2);
|
1893
1871
|
g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
|
1894
1872
|
rb_str_freeze(g_current_feed_buffer);
|
1895
1873
|
glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr);
|
@@ -1898,17 +1876,11 @@ VALUE obj;
|
|
1898
1876
|
|
1899
1877
|
static VALUE g_current_sel_buffer;
|
1900
1878
|
static VALUE
|
1901
|
-
gl_SelectBuffer(
|
1902
|
-
|
1903
|
-
VALUE *argv;
|
1904
|
-
VALUE obj;
|
1879
|
+
gl_SelectBuffer(obj,arg1)
|
1880
|
+
VALUE obj,arg1;
|
1905
1881
|
{
|
1906
|
-
VALUE args;
|
1907
1882
|
GLsizei size;
|
1908
|
-
size =
|
1909
|
-
rb_scan_args(argc, argv, "01", &args);
|
1910
|
-
if (args != Qnil)
|
1911
|
-
size = (GLsizei)NUM2INT(args);
|
1883
|
+
size = (GLsizei)NUM2UINT(arg1);
|
1912
1884
|
g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
|
1913
1885
|
rb_str_freeze(g_current_sel_buffer);
|
1914
1886
|
glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr);
|
@@ -1939,7 +1911,7 @@ gl_LoadName(obj,arg1)
|
|
1939
1911
|
VALUE obj,arg1;
|
1940
1912
|
{
|
1941
1913
|
GLuint name;
|
1942
|
-
name = (GLuint)
|
1914
|
+
name = (GLuint)NUM2UINT(arg1);
|
1943
1915
|
glLoadName(name);
|
1944
1916
|
return Qnil;
|
1945
1917
|
}
|
@@ -1967,7 +1939,7 @@ gl_PushName(obj,arg1)
|
|
1967
1939
|
VALUE obj,arg1;
|
1968
1940
|
{
|
1969
1941
|
GLuint name;
|
1970
|
-
name = (GLuint)
|
1942
|
+
name = (GLuint)NUM2UINT(arg1);
|
1971
1943
|
glPushName(name);
|
1972
1944
|
return Qnil;
|
1973
1945
|
}
|
@@ -1987,7 +1959,7 @@ gl_Clear(obj,arg1)
|
|
1987
1959
|
VALUE obj,arg1;
|
1988
1960
|
{
|
1989
1961
|
GLbitfield mask;
|
1990
|
-
mask = (GLbitfield)
|
1962
|
+
mask = (GLbitfield)NUM2UINT(arg1);
|
1991
1963
|
glClear(mask);
|
1992
1964
|
return Qnil;
|
1993
1965
|
}
|
@@ -2059,7 +2031,7 @@ gl_StencilMask(obj,arg1)
|
|
2059
2031
|
VALUE obj,arg1;
|
2060
2032
|
{
|
2061
2033
|
GLuint mask;
|
2062
|
-
mask = (GLuint)
|
2034
|
+
mask = (GLuint)NUM2UINT(arg1);
|
2063
2035
|
glStencilMask(mask);
|
2064
2036
|
return Qnil;
|
2065
2037
|
}
|
@@ -2095,7 +2067,7 @@ gl_IndexMask(obj,arg1)
|
|
2095
2067
|
VALUE obj,arg1;
|
2096
2068
|
{
|
2097
2069
|
GLuint mask;
|
2098
|
-
mask = (GLuint)
|
2070
|
+
mask = (GLuint)NUM2UINT(arg1);
|
2099
2071
|
glIndexMask(mask);
|
2100
2072
|
return Qnil;
|
2101
2073
|
}
|
@@ -2161,7 +2133,7 @@ gl_PushAttrib(obj,arg1)
|
|
2161
2133
|
VALUE obj,arg1;
|
2162
2134
|
{
|
2163
2135
|
GLbitfield mask;
|
2164
|
-
mask = (GLbitfield)
|
2136
|
+
mask = (GLbitfield)NUM2UINT(arg1);
|
2165
2137
|
glPushAttrib(mask);
|
2166
2138
|
return Qnil;
|
2167
2139
|
}
|
@@ -2373,8 +2345,7 @@ gl_EvalCoord1dv(obj,arg1)
|
|
2373
2345
|
VALUE obj,arg1;
|
2374
2346
|
{
|
2375
2347
|
GLdouble params[1] = {0.0};
|
2376
|
-
|
2377
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
2348
|
+
Check_Type(arg1,T_ARRAY);
|
2378
2349
|
ary2cdbl(arg1,params,1);
|
2379
2350
|
glEvalCoord1dv(params);
|
2380
2351
|
return Qnil;
|
@@ -2395,8 +2366,7 @@ gl_EvalCoord1fv(obj,arg1)
|
|
2395
2366
|
VALUE obj,arg1;
|
2396
2367
|
{
|
2397
2368
|
GLfloat params[1] = {0.0};
|
2398
|
-
|
2399
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
2369
|
+
Check_Type(arg1,T_ARRAY);
|
2400
2370
|
ary2cflt(arg1,params,1);
|
2401
2371
|
glEvalCoord1fv(params);
|
2402
2372
|
return Qnil;
|
@@ -2419,8 +2389,7 @@ gl_EvalCoord2dv(obj,arg1)
|
|
2419
2389
|
VALUE obj,arg1;
|
2420
2390
|
{
|
2421
2391
|
GLdouble params[2] = {0.0,0.0};
|
2422
|
-
|
2423
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
2392
|
+
Check_Type(arg1,T_ARRAY);
|
2424
2393
|
ary2cdbl(arg1,params,2);
|
2425
2394
|
glEvalCoord2dv(params);
|
2426
2395
|
return Qnil;
|
@@ -2443,8 +2412,7 @@ gl_EvalCoord2fv(obj,arg1)
|
|
2443
2412
|
VALUE obj,arg1;
|
2444
2413
|
{
|
2445
2414
|
GLfloat params[2] = {0.0,0.0};
|
2446
|
-
|
2447
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
2415
|
+
Check_Type(arg1,T_ARRAY);
|
2448
2416
|
ary2cflt(arg1,params,2);
|
2449
2417
|
glEvalCoord2fv(params);
|
2450
2418
|
return Qnil;
|
@@ -2547,7 +2515,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
2547
2515
|
GLuint mask;
|
2548
2516
|
func = (GLenum)NUM2INT(arg1);
|
2549
2517
|
ref = (GLint)NUM2INT(arg2);
|
2550
|
-
mask = (GLuint)
|
2518
|
+
mask = (GLuint)NUM2UINT(arg3);
|
2551
2519
|
glStencilFunc(func,ref,mask);
|
2552
2520
|
return Qnil;
|
2553
2521
|
}
|
@@ -2644,8 +2612,7 @@ VALUE obj,arg1,arg2;
|
|
2644
2612
|
GLfloat *values;
|
2645
2613
|
GLsizei size;
|
2646
2614
|
map = (GLenum)NUM2INT(arg1);
|
2647
|
-
|
2648
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
|
2615
|
+
Check_Type(arg2,T_ARRAY);
|
2649
2616
|
size = RARRAY(arg2)->len;
|
2650
2617
|
values = ALLOC_N(GLfloat,size);
|
2651
2618
|
ary2cflt(arg2,values,size);
|
@@ -2662,8 +2629,7 @@ VALUE obj,arg1,arg2;
|
|
2662
2629
|
GLuint *values;
|
2663
2630
|
GLsizei size;
|
2664
2631
|
map = (GLenum)NUM2INT(arg1);
|
2665
|
-
|
2666
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
|
2632
|
+
Check_Type(arg2,T_ARRAY);
|
2667
2633
|
size = RARRAY(arg2)->len;
|
2668
2634
|
values = ALLOC_N(GLuint,size);
|
2669
2635
|
ary2cuint(arg2,values,size);
|
@@ -2680,8 +2646,7 @@ VALUE obj,arg1,arg2;
|
|
2680
2646
|
GLushort *values;
|
2681
2647
|
GLsizei size;
|
2682
2648
|
map = (GLenum)NUM2INT(arg1);
|
2683
|
-
|
2684
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
|
2649
|
+
Check_Type(arg2,T_ARRAY);
|
2685
2650
|
size = RARRAY(arg2)->len;
|
2686
2651
|
values = ALLOC_N(GLushort,size);
|
2687
2652
|
ary2cushort(arg2,values,size);
|
@@ -2711,8 +2676,8 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
|
2711
2676
|
GLenum type;
|
2712
2677
|
x = (GLint)NUM2INT(arg1);
|
2713
2678
|
y = (GLint)NUM2INT(arg2);
|
2714
|
-
width = (GLsizei)
|
2715
|
-
height = (GLsizei)
|
2679
|
+
width = (GLsizei)NUM2UINT(arg3);
|
2680
|
+
height = (GLsizei)NUM2UINT(arg4);
|
2716
2681
|
type = (GLenum)NUM2INT(arg5);
|
2717
2682
|
glCopyPixels(x,y,width,height,type);
|
2718
2683
|
return Qnil;
|
@@ -2729,22 +2694,29 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
2729
2694
|
int format;
|
2730
2695
|
int type;
|
2731
2696
|
VALUE pixels;
|
2697
|
+
GLsizei type_size;
|
2698
|
+
GLsizei format_size;
|
2699
|
+
GLsizei size;
|
2732
2700
|
x = (GLint)NUM2INT(arg1);
|
2733
2701
|
y = (GLint)NUM2INT(arg2);
|
2734
|
-
width = (GLsizei)
|
2735
|
-
height = (GLsizei)
|
2702
|
+
width = (GLsizei)NUM2UINT(arg3);
|
2703
|
+
height = (GLsizei)NUM2UINT(arg4);
|
2736
2704
|
format = NUM2INT(arg5);
|
2737
2705
|
type = NUM2INT(arg6);
|
2738
|
-
|
2739
|
-
|
2740
|
-
|
2741
|
-
|
2742
|
-
|
2743
|
-
|
2744
|
-
|
2745
|
-
|
2746
|
-
|
2747
|
-
|
2706
|
+
type_size = gltype_size(type);
|
2707
|
+
format_size = glformat_size(format);
|
2708
|
+
if (type_size == -1 || format_size == -1)
|
2709
|
+
return Qnil;
|
2710
|
+
|
2711
|
+
if (type==GL_BITMAP)
|
2712
|
+
size = format_size*((width*height)/8);
|
2713
|
+
else
|
2714
|
+
size = width*height*format_size*type_size;
|
2715
|
+
pixels = allocate_buffer_with_string(size);
|
2716
|
+
FORCE_PIXEL_STORE_MODE
|
2717
|
+
glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr);
|
2718
|
+
RESTORE_PIXEL_STORE_MODE
|
2719
|
+
return pixels;
|
2748
2720
|
}
|
2749
2721
|
|
2750
2722
|
static VALUE
|
@@ -2756,18 +2728,26 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5;
|
|
2756
2728
|
GLenum format;
|
2757
2729
|
GLenum type;
|
2758
2730
|
const char *pixels;
|
2759
|
-
|
2760
|
-
|
2731
|
+
GLsizei size;
|
2732
|
+
GLsizei type_size;
|
2733
|
+
GLsizei format_size;
|
2734
|
+
width = (GLsizei)NUM2UINT(arg1);
|
2735
|
+
height = (GLsizei)NUM2UINT(arg2);
|
2761
2736
|
format = (GLenum)NUM2INT(arg3);
|
2762
2737
|
type = (GLenum)NUM2INT(arg4);
|
2763
|
-
|
2764
|
-
|
2765
|
-
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2769
|
-
|
2770
|
-
|
2738
|
+
Check_Type(arg5,T_STRING);
|
2739
|
+
type_size = gltype_size(type);
|
2740
|
+
format_size = glformat_size(format);
|
2741
|
+
if (type_size == -1 || format_size == -1)
|
2742
|
+
rb_raise(rb_eArgError, "type/format mismatch");
|
2743
|
+
if (type==GL_BITMAP)
|
2744
|
+
size = format_size*(width/8);
|
2745
|
+
else
|
2746
|
+
size = type_size*format_size*width*height;
|
2747
|
+
if (RSTRING(arg5)->len < size)
|
2748
|
+
rb_raise(rb_eArgError, "string length:%d", RSTRING(arg5)->len);
|
2749
|
+
pixels = RSTRING(arg5)->ptr;
|
2750
|
+
glDrawPixels(width,height,format,type,pixels);
|
2771
2751
|
return Qnil;
|
2772
2752
|
}
|
2773
2753
|
|
@@ -2951,7 +2931,7 @@ VALUE obj,arg1,arg2;
|
|
2951
2931
|
glGetLightiv(light,pname,params);
|
2952
2932
|
retary = rb_ary_new2(size);
|
2953
2933
|
for(i=0;i<size;i++)
|
2954
|
-
rb_ary_push(retary,
|
2934
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
2955
2935
|
return retary;
|
2956
2936
|
}
|
2957
2937
|
|
@@ -3133,7 +3113,7 @@ VALUE obj,arg1,arg2;
|
|
3133
3113
|
glGetMapiv(target,query,points);
|
3134
3114
|
retary = rb_ary_new2(size);
|
3135
3115
|
for(i=0;i<size;i++)
|
3136
|
-
rb_ary_push(retary,
|
3116
|
+
rb_ary_push(retary, INT2NUM(points[i]));
|
3137
3117
|
xfree(points);
|
3138
3118
|
return retary;
|
3139
3119
|
}
|
@@ -3170,7 +3150,7 @@ VALUE obj,arg1,arg2;
|
|
3170
3150
|
glGetMaterialfv(face,pname,params);
|
3171
3151
|
retary = rb_ary_new2(size);
|
3172
3152
|
for(i=0;i<size;i++)
|
3173
|
-
rb_ary_push(retary,
|
3153
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
3174
3154
|
return retary;
|
3175
3155
|
}
|
3176
3156
|
|
@@ -3206,7 +3186,7 @@ VALUE obj,arg1,arg2;
|
|
3206
3186
|
glGetMaterialiv(face,pname,params);
|
3207
3187
|
retary = rb_ary_new2(size);
|
3208
3188
|
for(i=0;i<size;i++)
|
3209
|
-
rb_ary_push(retary,
|
3189
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
3210
3190
|
return retary;
|
3211
3191
|
}
|
3212
3192
|
|
@@ -3216,7 +3196,7 @@ VALUE obj,arg1;
|
|
3216
3196
|
{
|
3217
3197
|
GLenum map;
|
3218
3198
|
GLenum map_size;
|
3219
|
-
GLint size;
|
3199
|
+
GLint size = 0;
|
3220
3200
|
GLfloat *values;
|
3221
3201
|
VALUE retary;
|
3222
3202
|
int i;
|
@@ -3252,7 +3232,7 @@ VALUE obj,arg1;
|
|
3252
3232
|
{
|
3253
3233
|
GLenum map;
|
3254
3234
|
GLenum map_size;
|
3255
|
-
GLint size;
|
3235
|
+
GLint size = 0;
|
3256
3236
|
GLuint *values;
|
3257
3237
|
VALUE retary;
|
3258
3238
|
int i;
|
@@ -3277,7 +3257,7 @@ VALUE obj,arg1;
|
|
3277
3257
|
glGetPixelMapuiv(map,values);
|
3278
3258
|
retary = rb_ary_new2(size);
|
3279
3259
|
for(i=0;i<size;i++)
|
3280
|
-
rb_ary_push(retary,
|
3260
|
+
rb_ary_push(retary, INT2NUM(values[i]));
|
3281
3261
|
xfree(values);
|
3282
3262
|
return retary;
|
3283
3263
|
}
|
@@ -3288,7 +3268,7 @@ VALUE obj,arg1;
|
|
3288
3268
|
{
|
3289
3269
|
GLenum map;
|
3290
3270
|
GLenum map_size;
|
3291
|
-
GLint size;
|
3271
|
+
GLint size = 0;
|
3292
3272
|
GLushort *values;
|
3293
3273
|
VALUE retary;
|
3294
3274
|
int i;
|
@@ -3313,17 +3293,20 @@ VALUE obj,arg1;
|
|
3313
3293
|
glGetPixelMapusv(map,values);
|
3314
3294
|
retary = rb_ary_new2(size);
|
3315
3295
|
for(i=0;i<size;i++)
|
3316
|
-
rb_ary_push(retary,
|
3296
|
+
rb_ary_push(retary, INT2NUM(values[i]));
|
3317
3297
|
xfree(values);
|
3318
3298
|
return retary;
|
3319
3299
|
}
|
3320
3300
|
|
3321
3301
|
static VALUE
|
3322
|
-
gl_GetPolygonStipple(obj
|
3323
|
-
VALUE obj
|
3302
|
+
gl_GetPolygonStipple(obj)
|
3303
|
+
VALUE obj;
|
3324
3304
|
{
|
3325
3305
|
GLubyte mask[128];
|
3306
|
+
memset(mask, 0x0, sizeof(GLubyte)*128);
|
3307
|
+
FORCE_PIXEL_STORE_MODE
|
3326
3308
|
glGetPolygonStipple(mask);
|
3309
|
+
RESTORE_PIXEL_STORE_MODE
|
3327
3310
|
return rb_str_new((const char*)mask, 128);
|
3328
3311
|
}
|
3329
3312
|
|
@@ -3382,7 +3365,7 @@ VALUE obj,arg1,arg2;
|
|
3382
3365
|
glGetTexEnvfv(target,pname,params);
|
3383
3366
|
retary = rb_ary_new2(size);
|
3384
3367
|
for(i=0;i<size;i++)
|
3385
|
-
rb_ary_push(retary,
|
3368
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
3386
3369
|
return retary;
|
3387
3370
|
}
|
3388
3371
|
|
@@ -3430,7 +3413,7 @@ VALUE obj,arg1,arg2;
|
|
3430
3413
|
glGetTexEnviv(target,pname,params);
|
3431
3414
|
retary = rb_ary_new2(size);
|
3432
3415
|
for(i=0;i<size;i++)
|
3433
|
-
rb_ary_push(retary,
|
3416
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
3434
3417
|
return retary;
|
3435
3418
|
}
|
3436
3419
|
|
@@ -3461,7 +3444,7 @@ VALUE obj,arg1,arg2;
|
|
3461
3444
|
glGetTexGendv(coord,pname,params);
|
3462
3445
|
retary = rb_ary_new2(size);
|
3463
3446
|
for(i=0;i<size;i++)
|
3464
|
-
rb_ary_push(retary,
|
3447
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
3465
3448
|
return retary;
|
3466
3449
|
}
|
3467
3450
|
|
@@ -3492,7 +3475,7 @@ VALUE obj,arg1,arg2;
|
|
3492
3475
|
glGetTexGenfv(coord,pname,params);
|
3493
3476
|
retary = rb_ary_new2(size);
|
3494
3477
|
for(i=0;i<size;i++)
|
3495
|
-
rb_ary_push(retary,
|
3478
|
+
rb_ary_push(retary, rb_float_new(params[i]));
|
3496
3479
|
return retary;
|
3497
3480
|
}
|
3498
3481
|
|
@@ -3523,19 +3506,61 @@ VALUE obj,arg1,arg2;
|
|
3523
3506
|
glGetTexGeniv(coord,pname,params);
|
3524
3507
|
retary = rb_ary_new2(size);
|
3525
3508
|
for(i=0;i<size;i++)
|
3526
|
-
rb_ary_push(retary,
|
3509
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
3527
3510
|
return retary;
|
3528
3511
|
}
|
3529
3512
|
|
3530
|
-
|
3513
|
+
|
3531
3514
|
static VALUE
|
3532
|
-
gl_GetTexImage(obj,arg1,arg2,arg3,arg4
|
3533
|
-
VALUE obj,arg1,arg2,arg3,arg4
|
3515
|
+
gl_GetTexImage(obj,arg1,arg2,arg3,arg4)
|
3516
|
+
VALUE obj,arg1,arg2,arg3,arg4;
|
3534
3517
|
{
|
3535
|
-
|
3536
|
-
|
3518
|
+
GLenum tex;
|
3519
|
+
GLint lod;
|
3520
|
+
GLenum format;
|
3521
|
+
GLenum type;
|
3522
|
+
GLint width = 0;
|
3523
|
+
GLint height = 0;
|
3524
|
+
GLint depth = 0;
|
3525
|
+
GLint size;
|
3526
|
+
GLint format_size;
|
3527
|
+
GLint type_size;
|
3528
|
+
VALUE pixels;
|
3529
|
+
tex = (GLenum)NUM2INT(arg1);
|
3530
|
+
lod = (GLint)NUM2INT(arg2);
|
3531
|
+
format = (GLenum)NUM2INT(arg3);
|
3532
|
+
type = (GLenum)NUM2INT(arg4);
|
3533
|
+
format_size = glformat_size(format);
|
3534
|
+
type_size = gltype_size(type);
|
3535
|
+
if (type_size == -1 && format_size == -1)
|
3536
|
+
return Qnil;
|
3537
|
+
|
3538
|
+
size = 1;
|
3539
|
+
switch(tex) {
|
3540
|
+
case GL_TEXTURE_3D:
|
3541
|
+
glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_DEPTH,&depth);
|
3542
|
+
size *= depth;
|
3543
|
+
/* fall through */
|
3544
|
+
case GL_TEXTURE_2D:
|
3545
|
+
glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_HEIGHT,&height);
|
3546
|
+
size *= height;
|
3547
|
+
/* fall through */
|
3548
|
+
case GL_TEXTURE_1D:
|
3549
|
+
glGetTexLevelParameteriv(tex,lod,GL_TEXTURE_WIDTH,&width);
|
3550
|
+
size *= width;
|
3551
|
+
break;
|
3552
|
+
default:
|
3553
|
+
return Qnil;
|
3554
|
+
}
|
3555
|
+
size *= format_size*type_size;
|
3556
|
+
pixels = allocate_buffer_with_string(size);
|
3557
|
+
|
3558
|
+
FORCE_PIXEL_STORE_MODE
|
3559
|
+
glGetTexImage(tex,lod,format,type,(GLvoid*)RSTRING(pixels)->ptr);
|
3560
|
+
RESTORE_PIXEL_STORE_MODE
|
3561
|
+
return pixels;
|
3537
3562
|
}
|
3538
|
-
|
3563
|
+
|
3539
3564
|
|
3540
3565
|
static VALUE
|
3541
3566
|
gl_GetTexParameterfv(obj,arg1,arg2)
|
@@ -3587,7 +3612,7 @@ VALUE obj,arg1,arg2;
|
|
3587
3612
|
glGetTexParameteriv(target,pname,params);
|
3588
3613
|
retary = rb_ary_new2(size);
|
3589
3614
|
for(i=0;i<size;i++)
|
3590
|
-
rb_ary_push(retary,
|
3615
|
+
rb_ary_push(retary, INT2NUM(params[i]));
|
3591
3616
|
return retary;
|
3592
3617
|
}
|
3593
3618
|
|
@@ -3598,7 +3623,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
3598
3623
|
GLenum target;
|
3599
3624
|
GLint level;
|
3600
3625
|
GLenum pname;
|
3601
|
-
GLfloat params;
|
3626
|
+
GLfloat params = 0.0;
|
3602
3627
|
VALUE retary;
|
3603
3628
|
target = (GLenum)NUM2INT(arg1);
|
3604
3629
|
level = (GLint)NUM2INT(arg2);
|
@@ -3616,14 +3641,14 @@ VALUE obj,arg1,arg2,arg3;
|
|
3616
3641
|
GLenum target;
|
3617
3642
|
GLint level;
|
3618
3643
|
GLenum pname;
|
3619
|
-
GLint params;
|
3644
|
+
GLint params = 0;
|
3620
3645
|
VALUE retary;
|
3621
3646
|
target = (GLenum)NUM2INT(arg1);
|
3622
3647
|
level = (GLint)NUM2INT(arg2);
|
3623
3648
|
pname = (GLenum)NUM2INT(arg3);
|
3624
3649
|
glGetTexLevelParameteriv(target,level,pname,¶ms);
|
3625
3650
|
retary = rb_ary_new2(1);
|
3626
|
-
rb_ary_push(retary,
|
3651
|
+
rb_ary_push(retary, INT2NUM(params));
|
3627
3652
|
return retary;
|
3628
3653
|
}
|
3629
3654
|
|
@@ -3644,7 +3669,7 @@ VALUE obj,arg1;
|
|
3644
3669
|
{
|
3645
3670
|
GLuint list;
|
3646
3671
|
GLboolean ret;
|
3647
|
-
list = (GLuint)
|
3672
|
+
list = (GLuint)NUM2UINT(arg1);
|
3648
3673
|
ret = glIsList(list);
|
3649
3674
|
return INT2NUM(ret);
|
3650
3675
|
}
|
@@ -3873,8 +3898,8 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
3873
3898
|
GLsizei height;
|
3874
3899
|
x = (GLint)NUM2INT(arg1);
|
3875
3900
|
y = (GLint)NUM2INT(arg2);
|
3876
|
-
width = (GLsizei)
|
3877
|
-
height = (GLsizei)
|
3901
|
+
width = (GLsizei)NUM2UINT(arg3);
|
3902
|
+
height = (GLsizei)NUM2UINT(arg4);
|
3878
3903
|
glViewport(x,y,width,height);
|
3879
3904
|
return Qnil;
|
3880
3905
|
}
|
@@ -3891,12 +3916,12 @@ VALUE obj,arg1;
|
|
3891
3916
|
|
3892
3917
|
static VALUE g_Vertex_ptr;
|
3893
3918
|
static VALUE g_Normal_ptr;
|
3894
|
-
static VALUE g_Color_ptr;
|
3895
|
-
static VALUE g_Index_ptr;
|
3896
|
-
static VALUE g_TexCoord_ptr;
|
3897
|
-
static VALUE g_EdgeFlag_ptr;
|
3898
|
-
VALUE g_FogCoord_ptr
|
3899
|
-
VALUE g_SecondaryColor_ptr
|
3919
|
+
static VALUE g_Color_ptr;
|
3920
|
+
static VALUE g_Index_ptr;
|
3921
|
+
static VALUE g_TexCoord_ptr;
|
3922
|
+
static VALUE g_EdgeFlag_ptr;
|
3923
|
+
VALUE g_FogCoord_ptr; /* OpenGL 1.4 */
|
3924
|
+
VALUE g_SecondaryColor_ptr; /* OpenGL 1.4 */
|
3900
3925
|
#define POINTER_FUNC(_func_) \
|
3901
3926
|
static VALUE \
|
3902
3927
|
gl_##_func_##Pointer(obj, arg1, arg2, arg3, arg4) \
|
@@ -3907,7 +3932,7 @@ VALUE obj, arg1, arg2, arg3, arg4; \
|
|
3907
3932
|
GLsizei stride; \
|
3908
3933
|
size = (GLint)NUM2INT(arg1); \
|
3909
3934
|
type = (GLenum)NUM2INT(arg2); \
|
3910
|
-
stride = (GLsizei)
|
3935
|
+
stride = (GLsizei)NUM2UINT(arg3); \
|
3911
3936
|
Check_Type(arg4, T_STRING); \
|
3912
3937
|
rb_str_freeze(arg4); \
|
3913
3938
|
g_##_func_##_ptr = arg4; \
|
@@ -3940,7 +3965,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
3940
3965
|
GLsizei count;
|
3941
3966
|
mode = (GLenum)NUM2INT(arg1);
|
3942
3967
|
first = (GLint)NUM2INT(arg2);
|
3943
|
-
count = (GLsizei)
|
3968
|
+
count = (GLsizei)NUM2UINT(arg3);
|
3944
3969
|
glDrawArrays(mode,first,count);
|
3945
3970
|
return Qnil;
|
3946
3971
|
}
|
@@ -3953,7 +3978,7 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
3953
3978
|
GLsizei count;
|
3954
3979
|
GLenum type;
|
3955
3980
|
mode = (GLenum)NUM2INT(arg1);
|
3956
|
-
count = (GLsizei)
|
3981
|
+
count = (GLsizei)NUM2UINT(arg2);
|
3957
3982
|
type = (GLenum)NUM2INT(arg3);
|
3958
3983
|
Check_Type(arg4, T_STRING);
|
3959
3984
|
glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr);
|
@@ -3965,7 +3990,7 @@ gl_EdgeFlagPointer(obj,arg1,arg2)
|
|
3965
3990
|
VALUE obj,arg1,arg2;
|
3966
3991
|
{
|
3967
3992
|
GLsizei stride;
|
3968
|
-
stride = (GLsizei)
|
3993
|
+
stride = (GLsizei)NUM2UINT(arg1);
|
3969
3994
|
Check_Type(arg2, T_STRING);
|
3970
3995
|
rb_str_freeze(arg2);
|
3971
3996
|
g_EdgeFlag_ptr = arg2;
|
@@ -3984,8 +4009,8 @@ VALUE obj,arg1;
|
|
3984
4009
|
}
|
3985
4010
|
|
3986
4011
|
static VALUE
|
3987
|
-
gl_GetPointerv(obj,arg1
|
3988
|
-
VALUE obj,arg1
|
4012
|
+
gl_GetPointerv(obj,arg1)
|
4013
|
+
VALUE obj,arg1;
|
3989
4014
|
{
|
3990
4015
|
GLenum pname;
|
3991
4016
|
pname = (GLenum)NUM2INT(arg1);
|
@@ -4006,6 +4031,10 @@ VALUE obj,arg1,arg2;
|
|
4006
4031
|
return g_FogCoord_ptr;
|
4007
4032
|
case GL_SECONDARY_COLOR_ARRAY_POINTER:
|
4008
4033
|
return g_SecondaryColor_ptr;
|
4034
|
+
case GL_FEEDBACK_BUFFER_POINTER:
|
4035
|
+
return g_current_feed_buffer;
|
4036
|
+
case GL_SELECTION_BUFFER_POINTER:
|
4037
|
+
return g_current_sel_buffer;
|
4009
4038
|
default:
|
4010
4039
|
rb_raise(rb_eArgError, "Invalid pname %d",pname);
|
4011
4040
|
break; /* not reached */
|
@@ -4020,7 +4049,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
4020
4049
|
GLenum type;
|
4021
4050
|
GLsizei stride;
|
4022
4051
|
type = (GLenum)NUM2INT(arg1);
|
4023
|
-
stride = (GLsizei)
|
4052
|
+
stride = (GLsizei)NUM2UINT(arg2);
|
4024
4053
|
Check_Type(arg3, T_STRING);
|
4025
4054
|
rb_str_freeze(arg3);
|
4026
4055
|
g_Index_ptr = arg3;
|
@@ -4035,7 +4064,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
4035
4064
|
GLenum format;
|
4036
4065
|
GLsizei stride;
|
4037
4066
|
format = (GLenum)NUM2INT(arg1);
|
4038
|
-
stride = (GLsizei)
|
4067
|
+
stride = (GLsizei)NUM2UINT(arg2);
|
4039
4068
|
Check_Type(arg3, T_STRING);
|
4040
4069
|
glInterleavedArrays(format, stride, (const GLvoid*)RSTRING(arg3)->ptr);
|
4041
4070
|
return Qnil;
|
@@ -4048,7 +4077,7 @@ VALUE obj,arg1,arg2,arg3;
|
|
4048
4077
|
GLenum type;
|
4049
4078
|
GLsizei stride;
|
4050
4079
|
type = (GLenum)NUM2INT(arg1);
|
4051
|
-
stride = (GLsizei)
|
4080
|
+
stride = (GLsizei)NUM2UINT(arg2);
|
4052
4081
|
Check_Type(arg3, T_STRING);
|
4053
4082
|
rb_str_freeze(arg3);
|
4054
4083
|
g_Normal_ptr = arg3;
|
@@ -4084,7 +4113,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
4084
4113
|
internalformat = (GLenum)NUM2INT(arg3);
|
4085
4114
|
x = (GLint)NUM2INT(arg4);
|
4086
4115
|
y = (GLint)NUM2INT(arg5);
|
4087
|
-
width = (GLsizei)
|
4116
|
+
width = (GLsizei)NUM2UINT(arg6);
|
4088
4117
|
border = (GLint)NUM2INT(arg7);
|
4089
4118
|
glCopyTexImage1D(target,level,internalformat,x,y,width,border);
|
4090
4119
|
return Qnil;
|
@@ -4107,8 +4136,8 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
|
|
4107
4136
|
internalformat = (GLenum)NUM2INT(arg3);
|
4108
4137
|
x = (GLint)NUM2INT(arg4);
|
4109
4138
|
y = (GLint)NUM2INT(arg5);
|
4110
|
-
width = (GLsizei)
|
4111
|
-
height = (GLsizei)
|
4139
|
+
width = (GLsizei)NUM2UINT(arg6);
|
4140
|
+
height = (GLsizei)NUM2UINT(arg7);
|
4112
4141
|
border = (GLint)NUM2INT(arg8);
|
4113
4142
|
glCopyTexImage2D(target,level,internalformat,x,y,width,height,border);
|
4114
4143
|
return Qnil;
|
@@ -4129,7 +4158,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
|
|
4129
4158
|
xoffset = (GLint)NUM2INT(arg3);
|
4130
4159
|
x = (GLint)NUM2INT(arg4);
|
4131
4160
|
y = (GLint)NUM2INT(arg5);
|
4132
|
-
width = (GLsizei)
|
4161
|
+
width = (GLsizei)NUM2UINT(arg6);
|
4133
4162
|
glCopyTexSubImage1D(target,level,xoffset,x,y,width);
|
4134
4163
|
return Qnil;
|
4135
4164
|
}
|
@@ -4152,8 +4181,8 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
|
|
4152
4181
|
yoffset = (GLint)NUM2INT(arg4);
|
4153
4182
|
x = (GLint)NUM2INT(arg5);
|
4154
4183
|
y = (GLint)NUM2INT(arg6);
|
4155
|
-
width = (GLsizei)
|
4156
|
-
height = (GLsizei)
|
4184
|
+
width = (GLsizei)NUM2UINT(arg7);
|
4185
|
+
height = (GLsizei)NUM2UINT(arg8);
|
4157
4186
|
glCopyTexSubImage2D(target,level,xoffset,yoffset,x,y,width,height);
|
4158
4187
|
return Qnil;
|
4159
4188
|
}
|
@@ -4175,20 +4204,29 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
|
|
4175
4204
|
target = (GLenum)NUM2INT(arg1);
|
4176
4205
|
level = (GLint)NUM2INT(arg2);
|
4177
4206
|
xoffset = (GLint)NUM2INT(arg3);
|
4178
|
-
width = (GLsizei)
|
4207
|
+
width = (GLsizei)NUM2UINT(arg4);
|
4179
4208
|
format = (GLenum)NUM2INT(arg5);
|
4180
4209
|
type = (GLenum)NUM2INT(arg6);
|
4181
|
-
|
4182
|
-
|
4183
|
-
|
4184
|
-
|
4185
|
-
|
4210
|
+
type_size = gltype_size(type);
|
4211
|
+
format_size = glformat_size(format);
|
4212
|
+
if (type_size == -1 || format_size == -1)
|
4213
|
+
return Qnil;
|
4214
|
+
|
4215
|
+
if (type==GL_BITMAP)
|
4216
|
+
size = format_size*(width/8);
|
4217
|
+
else
|
4186
4218
|
size = type_size*format_size*width;
|
4219
|
+
|
4220
|
+
if (TYPE(arg7) == T_STRING) {
|
4187
4221
|
if (RSTRING(arg7)->len < size)
|
4188
4222
|
rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len);
|
4189
4223
|
pixels = RSTRING(arg7)->ptr;
|
4190
|
-
} else
|
4191
|
-
|
4224
|
+
} else if (TYPE(arg7) == T_FIXNUM || TYPE(arg7) == T_BIGNUM) { /* arg7 is offset to unpack buffer */
|
4225
|
+
pixels = (const char *)NUM2UINT(arg7);
|
4226
|
+
} else {
|
4227
|
+
Check_Type(arg7,T_STRING); /* force exception */
|
4228
|
+
return Qnil;
|
4229
|
+
}
|
4192
4230
|
glTexSubImage1D(target,level,xoffset,width,format,type,pixels);
|
4193
4231
|
return Qnil;
|
4194
4232
|
}
|
@@ -4213,21 +4251,28 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
|
|
4213
4251
|
level = (GLint)NUM2INT(arg2);
|
4214
4252
|
xoffset = (GLint)NUM2INT(arg3);
|
4215
4253
|
yoffset = (GLint)NUM2INT(arg4);
|
4216
|
-
width = (GLsizei)
|
4217
|
-
height = (GLsizei)
|
4254
|
+
width = (GLsizei)NUM2UINT(arg5);
|
4255
|
+
height = (GLsizei)NUM2UINT(arg6);
|
4218
4256
|
format = (GLenum)NUM2INT(arg7);
|
4219
4257
|
type = (GLenum)NUM2INT(arg8);
|
4220
|
-
|
4221
|
-
|
4222
|
-
|
4223
|
-
|
4224
|
-
|
4258
|
+
type_size = gltype_size(type);
|
4259
|
+
format_size = glformat_size(format);
|
4260
|
+
if (type_size == -1 || format_size == -1)
|
4261
|
+
return Qnil;
|
4262
|
+
if (type==GL_BITMAP)
|
4263
|
+
size = format_size*((height*width)/8);
|
4264
|
+
else
|
4225
4265
|
size = type_size*format_size*height*width;
|
4266
|
+
if (TYPE(arg9) == T_STRING) {
|
4226
4267
|
if (RSTRING(arg9)->len < size)
|
4227
4268
|
rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
|
4228
4269
|
pixels = RSTRING(arg9)->ptr;
|
4229
|
-
} else
|
4230
|
-
|
4270
|
+
} else if (TYPE(arg9) == T_FIXNUM || TYPE(arg9) == T_BIGNUM) { /* arg9 is offset to unpack buffer */
|
4271
|
+
pixels = (const char *)NUM2UINT(arg9);
|
4272
|
+
} else {
|
4273
|
+
Check_Type(arg9,T_STRING); /* force exception */
|
4274
|
+
return Qnil;
|
4275
|
+
}
|
4231
4276
|
glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
|
4232
4277
|
return Qnil;
|
4233
4278
|
}
|
@@ -4242,8 +4287,7 @@ VALUE obj,arg1;
|
|
4242
4287
|
GLboolean r;
|
4243
4288
|
VALUE retary;
|
4244
4289
|
int i;
|
4245
|
-
|
4246
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
|
4290
|
+
Check_Type(arg1,T_ARRAY);
|
4247
4291
|
size = RARRAY(arg1)->len;
|
4248
4292
|
textures = ALLOC_N(GLuint,size);
|
4249
4293
|
residences = ALLOC_N(GLboolean,size);
|
@@ -4252,10 +4296,10 @@ VALUE obj,arg1;
|
|
4252
4296
|
retary = rb_ary_new2(size);
|
4253
4297
|
if (r==GL_TRUE) { /* all are resident */
|
4254
4298
|
for(i=0;i<size;i++)
|
4255
|
-
rb_ary_push(retary,
|
4299
|
+
rb_ary_push(retary, INT2NUM(GL_TRUE));
|
4256
4300
|
} else {
|
4257
4301
|
for(i=0;i<size;i++)
|
4258
|
-
rb_ary_push(retary,
|
4302
|
+
rb_ary_push(retary, INT2NUM(residences[i]));
|
4259
4303
|
}
|
4260
4304
|
xfree(textures);
|
4261
4305
|
xfree(residences);
|
@@ -4269,7 +4313,7 @@ VALUE obj,arg1,arg2;
|
|
4269
4313
|
GLenum target;
|
4270
4314
|
GLuint texture;
|
4271
4315
|
target = (GLenum)NUM2INT(arg1);
|
4272
|
-
texture = (GLuint)
|
4316
|
+
texture = (GLuint)NUM2UINT(arg2);
|
4273
4317
|
glBindTexture(target,texture);
|
4274
4318
|
return Qnil;
|
4275
4319
|
}
|
@@ -4280,11 +4324,8 @@ VALUE obj,arg1;
|
|
4280
4324
|
{
|
4281
4325
|
GLsizei n;
|
4282
4326
|
GLuint *textures;
|
4283
|
-
|
4284
|
-
|
4285
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
|
4286
|
-
ary = RARRAY(arg1);
|
4287
|
-
n = ary->len;
|
4327
|
+
Check_Type(arg1,T_ARRAY);
|
4328
|
+
n = RARRAY(arg1)->len;
|
4288
4329
|
textures = ALLOC_N(GLuint,n);
|
4289
4330
|
ary2cuint(arg1,textures,n);
|
4290
4331
|
glDeleteTextures( n, textures);
|
@@ -4300,7 +4341,7 @@ VALUE obj,arg1;
|
|
4300
4341
|
GLuint *textures;
|
4301
4342
|
RArray *ret;
|
4302
4343
|
int i;
|
4303
|
-
n = (GLsizei)
|
4344
|
+
n = (GLsizei)NUM2UINT(arg1);
|
4304
4345
|
textures = ALLOC_N(GLuint, n);
|
4305
4346
|
glGenTextures(n, textures);
|
4306
4347
|
ret = RARRAY(rb_ary_new2(n));
|
@@ -4316,7 +4357,7 @@ VALUE obj,arg1;
|
|
4316
4357
|
{
|
4317
4358
|
GLuint texture;
|
4318
4359
|
GLboolean ret;
|
4319
|
-
texture = (GLuint)
|
4360
|
+
texture = (GLuint)NUM2UINT(arg1);
|
4320
4361
|
ret = glIsTexture(texture);
|
4321
4362
|
return INT2NUM(ret);
|
4322
4363
|
}
|
@@ -4328,10 +4369,8 @@ VALUE obj,arg1,arg2;
|
|
4328
4369
|
GLuint *textures;
|
4329
4370
|
GLclampf *priorities;
|
4330
4371
|
GLsizei size;
|
4331
|
-
|
4332
|
-
|
4333
|
-
if (TYPE(arg2) != T_ARRAY)
|
4334
|
-
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
|
4372
|
+
Check_Type(arg1,T_ARRAY);
|
4373
|
+
Check_Type(arg2,T_ARRAY);
|
4335
4374
|
if ((size = RARRAY(arg1)->len) != RARRAY(arg2)->len)
|
4336
4375
|
rb_raise(rb_eArgError, "passed arrays must have the same length");
|
4337
4376
|
textures = ALLOC_N(GLuint,size);
|
@@ -4359,8 +4398,7 @@ gl_Indexubv(obj,arg1)
|
|
4359
4398
|
VALUE obj,arg1;
|
4360
4399
|
{
|
4361
4400
|
GLubyte c[1] = {0};
|
4362
|
-
|
4363
|
-
rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
|
4401
|
+
Check_Type(arg1,T_ARRAY);
|
4364
4402
|
ary2cubyte(arg1,c,1);
|
4365
4403
|
glIndexubv(c);
|
4366
4404
|
return Qnil;
|
@@ -4379,7 +4417,7 @@ gl_PushClientAttrib(obj,arg1)
|
|
4379
4417
|
VALUE obj,arg1;
|
4380
4418
|
{
|
4381
4419
|
GLbitfield mask;
|
4382
|
-
mask = (GLbitfield)
|
4420
|
+
mask = (GLbitfield)NUM2UINT(arg1);
|
4383
4421
|
glPushClientAttrib(mask);
|
4384
4422
|
return Qnil;
|
4385
4423
|
}
|
@@ -4412,7 +4450,7 @@ VALUE obj; \
|
|
4412
4450
|
} \
|
4413
4451
|
} \
|
4414
4452
|
else \
|
4415
|
-
|
4453
|
+
Check_Type(args[0],T_ARRAY); /* force exception */ \
|
4416
4454
|
break; \
|
4417
4455
|
case 3: \
|
4418
4456
|
gl_Color3##_type_(obj,args[0], args[1], args[2]); \
|
@@ -4459,7 +4497,7 @@ VALUE obj; \
|
|
4459
4497
|
} \
|
4460
4498
|
} \
|
4461
4499
|
else \
|
4462
|
-
|
4500
|
+
Check_Type(args[0],T_ARRAY); /* force exception */ \
|
4463
4501
|
break; \
|
4464
4502
|
case 3: \
|
4465
4503
|
gl_Normal3##_type_(obj,args[0], args[1], args[2]); \
|
@@ -4506,7 +4544,7 @@ VALUE obj; \
|
|
4506
4544
|
} \
|
4507
4545
|
} \
|
4508
4546
|
else \
|
4509
|
-
|
4547
|
+
Check_Type(args[0],T_ARRAY); /* force exception */ \
|
4510
4548
|
break; \
|
4511
4549
|
case 2: \
|
4512
4550
|
gl_RasterPos2##_type_(obj,args[0], args[1]); \
|
@@ -4538,21 +4576,22 @@ VALUE obj; \
|
|
4538
4576
|
{ \
|
4539
4577
|
int num; \
|
4540
4578
|
VALUE args[4]; \
|
4541
|
-
RArray *ary; \
|
4542
|
-
switch (num = rb_scan_args(argc, argv, "
|
4543
|
-
case
|
4544
|
-
if (TYPE(args[0]) == T_ARRAY) { \
|
4579
|
+
RArray *ary,*ary2; \
|
4580
|
+
switch (num = rb_scan_args(argc, argv, "22", &args[0], &args[1], &args[2], &args[3])) { \
|
4581
|
+
case 2: \
|
4582
|
+
if (TYPE(args[0]) == T_ARRAY && TYPE(args[1]) == T_ARRAY) { \
|
4545
4583
|
ary = RARRAY(args[0]); \
|
4584
|
+
ary2 = RARRAY(args[1]); \
|
4546
4585
|
switch (ary->len) { \
|
4547
|
-
case
|
4548
|
-
gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],
|
4586
|
+
case 2: \
|
4587
|
+
gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],ary2->ptr[0],ary2->ptr[1]); \
|
4549
4588
|
break; \
|
4550
4589
|
default: \
|
4551
4590
|
rb_raise(rb_eArgError, "array length:%d", ary->len); \
|
4552
4591
|
} \
|
4553
4592
|
} \
|
4554
4593
|
else \
|
4555
|
-
|
4594
|
+
Check_Type(args[0],T_ARRAY); /* force exception */ \
|
4556
4595
|
break; \
|
4557
4596
|
case 4: \
|
4558
4597
|
gl_Rect##_type_(obj,args[0], args[1], args[2], args[3]); \
|
@@ -4584,6 +4623,9 @@ VALUE obj; \
|
|
4584
4623
|
if (TYPE(args[0]) == T_ARRAY) { \
|
4585
4624
|
ary = RARRAY(args[0]); \
|
4586
4625
|
switch (ary->len) { \
|
4626
|
+
case 1: \
|
4627
|
+
gl_TexCoord1##_type_(obj,ary->ptr[0]); \
|
4628
|
+
break; \
|
4587
4629
|
case 2: \
|
4588
4630
|
gl_TexCoord2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
|
4589
4631
|
break; \
|
@@ -4598,7 +4640,7 @@ VALUE obj; \
|
|
4598
4640
|
} \
|
4599
4641
|
} \
|
4600
4642
|
else \
|
4601
|
-
|
4643
|
+
gl_TexCoord1##_type_(obj,args[0]); \
|
4602
4644
|
break; \
|
4603
4645
|
case 2: \
|
4604
4646
|
gl_TexCoord2##_type_(obj,args[0], args[1]); \
|
@@ -4650,7 +4692,7 @@ VALUE obj; \
|
|
4650
4692
|
} \
|
4651
4693
|
} \
|
4652
4694
|
else \
|
4653
|
-
|
4695
|
+
Check_Type(args[0],T_ARRAY); /* force exception */ \
|
4654
4696
|
break; \
|
4655
4697
|
case 2: \
|
4656
4698
|
gl_Vertex2##_type_(obj,args[0], args[1]); \
|
@@ -4763,6 +4805,9 @@ VALUE obj,arg1,arg2,arg3;
|
|
4763
4805
|
/* init */
|
4764
4806
|
void gl_init_functions_1_0__1_1(VALUE module)
|
4765
4807
|
{
|
4808
|
+
g_FogCoord_ptr = 0; /* for use in gl-1.4.c */
|
4809
|
+
g_SecondaryColor_ptr = 0; /* for use in gl-1.4.c */
|
4810
|
+
|
4766
4811
|
/* OpenGL 1.0 functions */
|
4767
4812
|
rb_define_module_function(module, "glNewList", gl_NewList, 2);
|
4768
4813
|
rb_define_module_function(module, "glEndList", gl_EndList, 0);
|
@@ -4893,8 +4938,8 @@ void gl_init_functions_1_0__1_1(VALUE module)
|
|
4893
4938
|
rb_define_module_function(module, "glTexGenfv", gl_TexGenfv, 3);
|
4894
4939
|
rb_define_module_function(module, "glTexGeni", gl_TexGeni, 3);
|
4895
4940
|
rb_define_module_function(module, "glTexGeniv", gl_TexGeniv, 3);
|
4896
|
-
rb_define_module_function(module, "glFeedbackBuffer", gl_FeedbackBuffer,
|
4897
|
-
rb_define_module_function(module, "glSelectBuffer", gl_SelectBuffer,
|
4941
|
+
rb_define_module_function(module, "glFeedbackBuffer", gl_FeedbackBuffer, 2);
|
4942
|
+
rb_define_module_function(module, "glSelectBuffer", gl_SelectBuffer, 1);
|
4898
4943
|
rb_define_module_function(module, "glRenderMode", gl_RenderMode, 1);
|
4899
4944
|
rb_define_module_function(module, "glInitNames", gl_InitNames, 0);
|
4900
4945
|
rb_define_module_function(module, "glLoadName", gl_LoadName, 1);
|
@@ -4957,12 +5002,12 @@ void gl_init_functions_1_0__1_1(VALUE module)
|
|
4957
5002
|
rb_define_module_function(module, "glCopyPixels", gl_CopyPixels, 5);
|
4958
5003
|
rb_define_module_function(module, "glReadPixels", gl_ReadPixels, 6);
|
4959
5004
|
rb_define_module_function(module, "glDrawPixels", gl_DrawPixels, 5);
|
4960
|
-
rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv,
|
5005
|
+
rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv, 1);
|
4961
5006
|
rb_define_module_function(module, "glGetClipPlane", gl_GetClipPlane, 1);
|
4962
5007
|
rb_define_module_function(module, "glGetDoublev", gl_GetDoublev, 1);
|
4963
5008
|
rb_define_module_function(module, "glGetError", gl_GetError, 0);
|
4964
|
-
rb_define_module_function(module, "glGetFloatv", gl_GetFloatv,
|
4965
|
-
rb_define_module_function(module, "glGetIntegerv", gl_GetIntegerv,
|
5009
|
+
rb_define_module_function(module, "glGetFloatv", gl_GetFloatv, 1);
|
5010
|
+
rb_define_module_function(module, "glGetIntegerv", gl_GetIntegerv, 1);
|
4966
5011
|
rb_define_module_function(module, "glGetLightfv", gl_GetLightfv, 2);
|
4967
5012
|
rb_define_module_function(module, "glGetLightiv", gl_GetLightiv, 2);
|
4968
5013
|
rb_define_module_function(module, "glGetMapdv", gl_GetMapdv, 2);
|
@@ -4973,14 +5018,14 @@ void gl_init_functions_1_0__1_1(VALUE module)
|
|
4973
5018
|
rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, 1);
|
4974
5019
|
rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, 1);
|
4975
5020
|
rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, 1);
|
4976
|
-
rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple,
|
5021
|
+
rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, 0);
|
4977
5022
|
rb_define_module_function(module, "glGetString", gl_GetString, 1);
|
4978
5023
|
rb_define_module_function(module, "glGetTexEnvfv", gl_GetTexEnvfv, 2);
|
4979
5024
|
rb_define_module_function(module, "glGetTexEnviv", gl_GetTexEnviv, 2);
|
4980
5025
|
rb_define_module_function(module, "glGetTexGendv", gl_GetTexGendv, 2);
|
4981
5026
|
rb_define_module_function(module, "glGetTexGenfv", gl_GetTexGenfv, 2);
|
4982
5027
|
rb_define_module_function(module, "glGetTexGeniv", gl_GetTexGeniv, 2);
|
4983
|
-
|
5028
|
+
rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, 4);
|
4984
5029
|
rb_define_module_function(module, "glGetTexParameterfv", gl_GetTexParameterfv, 2);
|
4985
5030
|
rb_define_module_function(module, "glGetTexParameteriv", gl_GetTexParameteriv, 2);
|
4986
5031
|
rb_define_module_function(module, "glGetTexLevelParameterfv", gl_GetTexLevelParameterfv, 3);
|
@@ -5014,7 +5059,7 @@ void gl_init_functions_1_0__1_1(VALUE module)
|
|
5014
5059
|
rb_define_module_function(module, "glDrawElements", gl_DrawElements, 4);
|
5015
5060
|
rb_define_module_function(module, "glEdgeFlagPointer", gl_EdgeFlagPointer, 2);
|
5016
5061
|
rb_define_module_function(module, "glEnableClientState", gl_EnableClientState, 1);
|
5017
|
-
rb_define_module_function(module, "glGetPointerv", gl_GetPointerv,
|
5062
|
+
rb_define_module_function(module, "glGetPointerv", gl_GetPointerv, 1);
|
5018
5063
|
rb_define_module_function(module, "glIndexPointer", gl_IndexPointer, 3);
|
5019
5064
|
rb_define_module_function(module, "glInterleavedArrays", gl_InterleavedArrays, 3);
|
5020
5065
|
rb_define_module_function(module, "glNormalPointer", gl_NormalPointer, 3);
|
@@ -5065,18 +5110,18 @@ void gl_init_functions_1_0__1_1(VALUE module)
|
|
5065
5110
|
rb_define_module_function(module, "glNormal3sv", gl_Normalsv, -1);
|
5066
5111
|
|
5067
5112
|
rb_define_module_function(module, "glRasterPos", gl_RasterPosdv, -1);
|
5068
|
-
rb_define_module_function(module, "
|
5069
|
-
rb_define_module_function(module, "
|
5070
|
-
rb_define_module_function(module, "
|
5071
|
-
rb_define_module_function(module, "
|
5072
|
-
rb_define_module_function(module, "
|
5073
|
-
rb_define_module_function(module, "
|
5074
|
-
rb_define_module_function(module, "
|
5075
|
-
rb_define_module_function(module, "
|
5076
|
-
rb_define_module_function(module, "
|
5077
|
-
rb_define_module_function(module, "
|
5078
|
-
rb_define_module_function(module, "
|
5079
|
-
rb_define_module_function(module, "
|
5113
|
+
rb_define_module_function(module, "glRasterPos2dv", gl_RasterPosdv, -1);
|
5114
|
+
rb_define_module_function(module, "glRasterPos2fv", gl_RasterPosfv, -1);
|
5115
|
+
rb_define_module_function(module, "glRasterPos2iv", gl_RasterPosiv, -1);
|
5116
|
+
rb_define_module_function(module, "glRasterPos2sv", gl_RasterPossv, -1);
|
5117
|
+
rb_define_module_function(module, "glRasterPos3dv", gl_RasterPosdv, -1);
|
5118
|
+
rb_define_module_function(module, "glRasterPos3fv", gl_RasterPosfv, -1);
|
5119
|
+
rb_define_module_function(module, "glRasterPos3iv", gl_RasterPosiv, -1);
|
5120
|
+
rb_define_module_function(module, "glRasterPos3sv", gl_RasterPossv, -1);
|
5121
|
+
rb_define_module_function(module, "glRasterPos4dv", gl_RasterPosdv, -1);
|
5122
|
+
rb_define_module_function(module, "glRasterPos4fv", gl_RasterPosfv, -1);
|
5123
|
+
rb_define_module_function(module, "glRasterPos4iv", gl_RasterPosiv, -1);
|
5124
|
+
rb_define_module_function(module, "glRasterPos4sv", gl_RasterPossv, -1);
|
5080
5125
|
|
5081
5126
|
rb_define_module_function(module, "glRect", gl_Rectdv, -1);
|
5082
5127
|
rb_define_module_function(module, "glRectdv", gl_Rectdv, -1);
|