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
data/ext/gl/gl.c
CHANGED
|
@@ -27,8 +27,13 @@ void gl_init_functions_1_4(VALUE);
|
|
|
27
27
|
void gl_init_functions_1_5(VALUE);
|
|
28
28
|
void gl_init_functions_2_0(VALUE);
|
|
29
29
|
void gl_init_functions_2_1(VALUE);
|
|
30
|
+
void gl_init_functions_ext_3dfx(VALUE);
|
|
30
31
|
void gl_init_functions_ext_arb(VALUE);
|
|
32
|
+
void gl_init_functions_ext_ati(VALUE);
|
|
31
33
|
void gl_init_functions_ext_ext(VALUE);
|
|
34
|
+
void gl_init_functions_ext_gremedy(VALUE);
|
|
35
|
+
void gl_init_functions_ext_nv(VALUE);
|
|
36
|
+
|
|
32
37
|
|
|
33
38
|
static int opengl_version[2]; /* major, minor */
|
|
34
39
|
static char *opengl_extensions = NULL;
|
|
@@ -41,7 +46,8 @@ const int *GetOpenglVersion(void)
|
|
|
41
46
|
{
|
|
42
47
|
if (opengl_version[0]==0) { /* not cached, query */
|
|
43
48
|
const char *vstr = (const char *) glGetString(GL_VERSION);
|
|
44
|
-
|
|
49
|
+
CHECK_GLERROR
|
|
50
|
+
if (vstr)
|
|
45
51
|
sscanf( vstr, "%d.%d", &opengl_version[0], &opengl_version[1] );
|
|
46
52
|
}
|
|
47
53
|
return opengl_version;
|
|
@@ -70,7 +76,8 @@ const char *GetOpenglExtensions(void)
|
|
|
70
76
|
{
|
|
71
77
|
if (opengl_extensions == NULL) {
|
|
72
78
|
const char *estr = (const char *) glGetString(GL_EXTENSIONS);
|
|
73
|
-
|
|
79
|
+
CHECK_GLERROR
|
|
80
|
+
if (estr) {
|
|
74
81
|
int len = strlen(estr);
|
|
75
82
|
opengl_extensions = ALLOC_N(GLchar,len+1+1); /* terminating null and added space */
|
|
76
83
|
strcpy(opengl_extensions,estr);
|
|
@@ -111,42 +118,38 @@ GLboolean CheckExtension(const char *name)
|
|
|
111
118
|
return res;
|
|
112
119
|
}
|
|
113
120
|
|
|
121
|
+
/* wrapper for CheckOpenglVersion and CheckExtension, also used by macros
|
|
122
|
+
*/
|
|
123
|
+
GLboolean CheckVersionExtension(const char *name)
|
|
124
|
+
{
|
|
125
|
+
if (name && name[0] && name[0]>='0' && name[0]<='9') { /* GL version query */
|
|
126
|
+
int major,minor;
|
|
127
|
+
|
|
128
|
+
if (sscanf( name, "%d.%d", &major, &minor ) != 2)
|
|
129
|
+
return GL_FALSE;
|
|
130
|
+
|
|
131
|
+
return (CheckOpenglVersion(major,minor));
|
|
132
|
+
} else {
|
|
133
|
+
return (CheckExtension(name));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Checks if given OpenGL version or extension is available
|
|
138
|
+
*/
|
|
114
139
|
static VALUE
|
|
115
140
|
IsAvailable(obj,arg1)
|
|
116
141
|
VALUE obj,arg1;
|
|
117
142
|
{
|
|
118
143
|
char *name = NULL;
|
|
119
144
|
VALUE s;
|
|
145
|
+
GLboolean res;
|
|
120
146
|
|
|
121
147
|
s = rb_funcall(arg1, rb_intern("to_s"),0);
|
|
122
|
-
name =
|
|
148
|
+
name = RSTRING_PTR(s);
|
|
123
149
|
|
|
124
|
-
|
|
125
|
-
int major,minor;
|
|
150
|
+
res = CheckVersionExtension(name);
|
|
126
151
|
|
|
127
|
-
|
|
128
|
-
return Qfalse;
|
|
129
|
-
|
|
130
|
-
if (CheckOpenglVersion(major,minor)==1)
|
|
131
|
-
return Qtrue;
|
|
132
|
-
else
|
|
133
|
-
return Qfalse;
|
|
134
|
-
} else if (name && name[0] && (name[0]=='G' || name[0]=='W')) { /* GL_, GLX_, WGL_ extension */
|
|
135
|
-
GLboolean res;
|
|
136
|
-
|
|
137
|
-
res = CheckExtension(name);
|
|
138
|
-
if (res==GL_TRUE)
|
|
139
|
-
return Qtrue;
|
|
140
|
-
else
|
|
141
|
-
return Qfalse;
|
|
142
|
-
} else { /* function */
|
|
143
|
-
GLvoid *ret;
|
|
144
|
-
ret = load_gl_function(name,0); /* won't raise */
|
|
145
|
-
if (ret==NULL)
|
|
146
|
-
return Qfalse;
|
|
147
|
-
else
|
|
148
|
-
return Qtrue;
|
|
149
|
-
}
|
|
152
|
+
return GLBOOL2RUBY(res);
|
|
150
153
|
}
|
|
151
154
|
|
|
152
155
|
/* Checks whether non-zero buffer of type $buffer is bound
|
|
@@ -173,12 +176,20 @@ GLint CheckBufferBinding(GLint buffer)
|
|
|
173
176
|
break;
|
|
174
177
|
}
|
|
175
178
|
glGetIntegerv(buffer,&result);
|
|
179
|
+
CHECK_GLERROR
|
|
176
180
|
return result;
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
DLLEXPORT void Init_gl()
|
|
180
184
|
{
|
|
185
|
+
VALUE VERSION = rb_str_new2("0.60");
|
|
186
|
+
|
|
181
187
|
module = rb_define_module("Gl");
|
|
188
|
+
|
|
189
|
+
rb_define_const(module, "BINDINGS_VERSION", VERSION);
|
|
190
|
+
rb_define_const(module, "RUBY_OPENGL_VERSION", VERSION);
|
|
191
|
+
|
|
192
|
+
gl_init_error(module);
|
|
182
193
|
gl_init_enums(module);
|
|
183
194
|
gl_init_functions_1_0__1_1(module);
|
|
184
195
|
gl_init_functions_1_2(module);
|
|
@@ -187,8 +198,17 @@ DLLEXPORT void Init_gl()
|
|
|
187
198
|
gl_init_functions_1_5(module);
|
|
188
199
|
gl_init_functions_2_0(module);
|
|
189
200
|
gl_init_functions_2_1(module);
|
|
201
|
+
gl_init_functions_ext_3dfx(module);
|
|
190
202
|
gl_init_functions_ext_arb(module);
|
|
203
|
+
gl_init_functions_ext_ati(module);
|
|
191
204
|
gl_init_functions_ext_ext(module);
|
|
205
|
+
gl_init_functions_ext_gremedy(module);
|
|
206
|
+
gl_init_functions_ext_nv(module);
|
|
192
207
|
|
|
193
208
|
rb_define_module_function(module, "is_available?", IsAvailable, 1);
|
|
209
|
+
rb_define_module_function(module, "is_supported?", IsAvailable, 1);
|
|
210
|
+
rb_define_module_function(module, "extension_available?", IsAvailable, 1);
|
|
211
|
+
rb_define_module_function(module, "extension_supported?", IsAvailable, 1);
|
|
212
|
+
rb_define_module_function(module, "version_available?", IsAvailable, 1);
|
|
213
|
+
rb_define_module_function(module, "version_supported?", IsAvailable, 1);
|
|
194
214
|
}
|
data/ext/gl/mkrf_conf.rb
CHANGED
|
@@ -17,15 +17,18 @@ require 'rubygems'
|
|
|
17
17
|
require 'mkrf'
|
|
18
18
|
require 'rbconfig'
|
|
19
19
|
|
|
20
|
+
RUBYVER = " -DRUBY_VERSION=" + RUBY_VERSION.split(".").join
|
|
21
|
+
|
|
20
22
|
Mkrf::Generator.new( 'gl' ) do |g|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
case RUBY_PLATFORM
|
|
24
|
+
when /darwin/
|
|
25
|
+
g.cflags << RUBYVER
|
|
26
|
+
g.ldshared << ' -framework OpenGL'
|
|
27
|
+
when /mswin32/
|
|
28
|
+
g.cflags << ' -DWIN32' + RUBYVER
|
|
29
|
+
g.include_library( 'opengl32.lib', 'glVertex3d')
|
|
30
|
+
else
|
|
31
|
+
g.cflags << ' -Wall' + RUBYVER
|
|
32
|
+
g.include_library( 'GL', 'glVertex3d')
|
|
33
|
+
end
|
|
31
34
|
end
|
data/ext/glu/glu-enums.c
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
#include "../common/common.h"
|
|
6
6
|
void glu_init_enums(VALUE module)
|
|
7
7
|
{
|
|
8
|
+
rb_define_const(module, "GLU_FALSE", Qfalse);
|
|
9
|
+
rb_define_const(module, "GLU_TRUE", Qtrue);
|
|
10
|
+
|
|
8
11
|
rb_define_const(module, "GLU_AUTO_LOAD_MATRIX", INT2NUM(GLU_AUTO_LOAD_MATRIX));
|
|
9
12
|
rb_define_const(module, "GLU_BEGIN", INT2NUM(GLU_BEGIN));
|
|
10
13
|
rb_define_const(module, "GLU_CCW", INT2NUM(GLU_CCW));
|
|
@@ -19,7 +22,6 @@ void glu_init_enums(VALUE module)
|
|
|
19
22
|
rb_define_const(module, "GLU_EXTERIOR", INT2NUM(GLU_EXTERIOR));
|
|
20
23
|
rb_define_const(module, "GLU_EXT_nurbs_tessellator", INT2NUM(GLU_EXT_nurbs_tessellator));
|
|
21
24
|
rb_define_const(module, "GLU_EXT_object_space_tess", INT2NUM(GLU_EXT_object_space_tess));
|
|
22
|
-
rb_define_const(module, "GLU_FALSE", INT2NUM(GLU_FALSE));
|
|
23
25
|
rb_define_const(module, "GLU_FILL", INT2NUM(GLU_FILL));
|
|
24
26
|
rb_define_const(module, "GLU_FLAT", INT2NUM(GLU_FLAT));
|
|
25
27
|
rb_define_const(module, "GLU_INSIDE", INT2NUM(GLU_INSIDE));
|
|
@@ -151,7 +153,6 @@ void glu_init_enums(VALUE module)
|
|
|
151
153
|
rb_define_const(module, "GLU_TESS_WINDING_ODD", INT2NUM(GLU_TESS_WINDING_ODD));
|
|
152
154
|
rb_define_const(module, "GLU_TESS_WINDING_POSITIVE", INT2NUM(GLU_TESS_WINDING_POSITIVE));
|
|
153
155
|
rb_define_const(module, "GLU_TESS_WINDING_RULE", INT2NUM(GLU_TESS_WINDING_RULE));
|
|
154
|
-
rb_define_const(module, "GLU_TRUE", INT2NUM(GLU_TRUE));
|
|
155
156
|
rb_define_const(module, "GLU_UNKNOWN", INT2NUM(GLU_UNKNOWN));
|
|
156
157
|
rb_define_const(module, "GLU_U_STEP", INT2NUM(GLU_U_STEP));
|
|
157
158
|
rb_define_const(module, "GLU_VERSION", INT2NUM(GLU_VERSION));
|
data/ext/glu/glu.c
CHANGED
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
static VALUE module;
|
|
23
23
|
|
|
24
|
+
VALUE Class_GLUError;
|
|
25
|
+
|
|
24
26
|
void glu_init_enums(VALUE);
|
|
25
27
|
|
|
26
28
|
typedef GLUtesselator tesselatorObj;
|
|
@@ -124,6 +126,35 @@ get_surface_dim(GLenum type)
|
|
|
124
126
|
return 0; /* never gets here */
|
|
125
127
|
}
|
|
126
128
|
|
|
129
|
+
VALUE GLUError_initialize(VALUE obj,VALUE message, VALUE error_id)
|
|
130
|
+
{
|
|
131
|
+
rb_call_super(1, &message);
|
|
132
|
+
rb_iv_set(obj, "@id", error_id);
|
|
133
|
+
|
|
134
|
+
return obj;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
void check_for_gluerror(GLenum error)
|
|
138
|
+
{
|
|
139
|
+
char *error_string = "";
|
|
140
|
+
VALUE exc;
|
|
141
|
+
|
|
142
|
+
/* no error */
|
|
143
|
+
if (error==0)
|
|
144
|
+
return;
|
|
145
|
+
|
|
146
|
+
switch(error) {
|
|
147
|
+
case GLU_INVALID_ENUM: error_string = "invalid enumerant"; break;
|
|
148
|
+
case GLU_INVALID_VALUE: error_string = "invalid value"; break;
|
|
149
|
+
case GLU_INVALID_OPERATION: error_string = "invalid operation"; break;
|
|
150
|
+
case GLU_OUT_OF_MEMORY: error_string = "out of memory"; break;
|
|
151
|
+
default: error_string = "unknown error"; break;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
exc = rb_funcall(Class_GLUError, rb_intern("new"), 2, rb_str_new2(error_string), RETCONV_GLenum(error));
|
|
155
|
+
rb_funcall(rb_cObject, rb_intern("raise"), 1, exc);
|
|
156
|
+
}
|
|
157
|
+
|
|
127
158
|
/*
|
|
128
159
|
* NURBS API
|
|
129
160
|
*/
|
|
@@ -177,7 +208,7 @@ VALUE obj, arg1, arg2, arg3;
|
|
|
177
208
|
gluNurbsCallback(ndata->nobj, type, NULL);
|
|
178
209
|
else
|
|
179
210
|
gluNurbsCallback(ndata->nobj, type, n_error);
|
|
180
|
-
|
|
211
|
+
|
|
181
212
|
return Qnil;
|
|
182
213
|
}
|
|
183
214
|
|
|
@@ -191,6 +222,7 @@ VALUE obj;
|
|
|
191
222
|
ret = Data_Make_Struct(cNurbs, struct nurbsdata, mark_nurbs, free_nurbs, ndata);
|
|
192
223
|
ndata->nobj = gluNewNurbsRenderer();
|
|
193
224
|
ndata->n_ref = rb_ary_new2(REF_LAST);
|
|
225
|
+
|
|
194
226
|
return ret;
|
|
195
227
|
}
|
|
196
228
|
static VALUE
|
|
@@ -200,6 +232,7 @@ VALUE obj, arg1;
|
|
|
200
232
|
struct nurbsdata *ndata;
|
|
201
233
|
GetNURBS(arg1, ndata);
|
|
202
234
|
free_nurbs(ndata);
|
|
235
|
+
|
|
203
236
|
return Qnil;
|
|
204
237
|
}
|
|
205
238
|
static VALUE
|
|
@@ -213,6 +246,7 @@ VALUE obj, arg1, arg2, arg3;
|
|
|
213
246
|
property = (GLenum)NUM2INT(arg2);
|
|
214
247
|
value = (GLfloat)NUM2DBL(arg3);
|
|
215
248
|
gluNurbsProperty(ndata->nobj, property, value);
|
|
249
|
+
|
|
216
250
|
return Qnil;
|
|
217
251
|
}
|
|
218
252
|
static VALUE
|
|
@@ -225,7 +259,8 @@ VALUE obj, arg1, arg2;
|
|
|
225
259
|
GetNURBS(arg1, ndata);
|
|
226
260
|
property = (GLenum)NUM2INT(arg2);
|
|
227
261
|
gluGetNurbsProperty(ndata->nobj, property, &value);
|
|
228
|
-
|
|
262
|
+
|
|
263
|
+
return cond_GLBOOL2RUBY_F(property,value);
|
|
229
264
|
}
|
|
230
265
|
static VALUE
|
|
231
266
|
glu_BeginCurve(obj, arg1)
|
|
@@ -235,6 +270,7 @@ VALUE obj, arg1;
|
|
|
235
270
|
GetNURBS(arg1, ndata);
|
|
236
271
|
rb_ary_push(n_current, arg1);
|
|
237
272
|
gluBeginCurve(ndata->nobj);
|
|
273
|
+
|
|
238
274
|
return Qnil;
|
|
239
275
|
}
|
|
240
276
|
static VALUE
|
|
@@ -252,6 +288,7 @@ VALUE obj, arg1;
|
|
|
252
288
|
|
|
253
289
|
rb_ary_pop(n_current);
|
|
254
290
|
|
|
291
|
+
|
|
255
292
|
return Qnil;
|
|
256
293
|
}
|
|
257
294
|
static VALUE
|
|
@@ -281,8 +318,7 @@ VALUE obj;
|
|
|
281
318
|
uknot = ALLOC_N(GLfloat, uknot_count);
|
|
282
319
|
ary2cflt(args[1], uknot, uknot_count);
|
|
283
320
|
|
|
284
|
-
ary_ctl1 =
|
|
285
|
-
mary2ary(args[2], ary_ctl1); /* flatten */
|
|
321
|
+
ary_ctl1 = rb_funcall(args[2],rb_intern("flatten"),0);
|
|
286
322
|
break;
|
|
287
323
|
case 7:
|
|
288
324
|
uknot_count = (GLint)NUM2INT(args[1]);
|
|
@@ -293,11 +329,10 @@ VALUE obj;
|
|
|
293
329
|
uknot = ALLOC_N(GLfloat, uknot_count);
|
|
294
330
|
ary2cflt(args[2], uknot, uknot_count);
|
|
295
331
|
|
|
296
|
-
ary_ctl1 =
|
|
297
|
-
mary2ary(args[4], ary_ctl1); /* flatten */
|
|
332
|
+
ary_ctl1 = rb_funcall(args[4],rb_intern("flatten"),0);
|
|
298
333
|
break;
|
|
299
334
|
default:
|
|
300
|
-
rb_raise(rb_eArgError, "gluNurbsCurve needs 5 or 7 arguments"
|
|
335
|
+
rb_raise(rb_eArgError, "gluNurbsCurve needs 5 or 7 arguments");
|
|
301
336
|
}
|
|
302
337
|
ctlarray = ALLOC_N(GLfloat, u_stride*(uknot_count-uorder));
|
|
303
338
|
ary2cflt((VALUE)ary_ctl1, ctlarray, (uknot_count-uorder)*u_stride);
|
|
@@ -309,6 +344,7 @@ VALUE obj;
|
|
|
309
344
|
gms.ptr = REALLOC_N(gms.ptr, GLfloat*, gms.len+=2);
|
|
310
345
|
gms.ptr[gms.len - 2] = uknot;
|
|
311
346
|
gms.ptr[gms.len - 1] = ctlarray;
|
|
347
|
+
|
|
312
348
|
return Qnil;
|
|
313
349
|
}
|
|
314
350
|
static VALUE
|
|
@@ -319,6 +355,7 @@ VALUE obj, arg1;
|
|
|
319
355
|
GetNURBS(arg1, ndata);
|
|
320
356
|
rb_ary_push(n_current, arg1);
|
|
321
357
|
gluBeginSurface(ndata->nobj);
|
|
358
|
+
|
|
322
359
|
return Qnil;
|
|
323
360
|
}
|
|
324
361
|
static VALUE
|
|
@@ -336,6 +373,7 @@ VALUE obj, arg1;
|
|
|
336
373
|
|
|
337
374
|
rb_ary_pop(n_current);
|
|
338
375
|
|
|
376
|
+
|
|
339
377
|
return Qnil;
|
|
340
378
|
}
|
|
341
379
|
|
|
@@ -379,8 +417,7 @@ VALUE obj;
|
|
|
379
417
|
s_stride = t_stride * sorder;
|
|
380
418
|
|
|
381
419
|
ctlarray = ALLOC_N(GLfloat, (sknot_count-sorder)*(tknot_count-torder)*t_stride);
|
|
382
|
-
ary_ctl1 =
|
|
383
|
-
mary2ary(args[3], ary_ctl1); /* flatten */
|
|
420
|
+
ary_ctl1 = rb_funcall(args[3],rb_intern("flatten"),0);
|
|
384
421
|
ary2cflt(ary_ctl1, ctlarray, (sknot_count-sorder)*(tknot_count-torder)*t_stride);
|
|
385
422
|
break;
|
|
386
423
|
case 11:
|
|
@@ -400,13 +437,11 @@ VALUE obj;
|
|
|
400
437
|
type_len = get_surface_dim(type);
|
|
401
438
|
|
|
402
439
|
ctlarray = ALLOC_N(GLfloat, (sknot_count-sorder)*(tknot_count-torder)*type_len);
|
|
403
|
-
|
|
404
|
-
ary_ctl1 = rb_ary_new();
|
|
405
|
-
mary2ary(args[7], ary_ctl1); /* flatten */
|
|
440
|
+
ary_ctl1 = rb_funcall(args[7],rb_intern("flatten"),0);
|
|
406
441
|
ary2cflt(ary_ctl1, ctlarray, (sknot_count-sorder)*(tknot_count-torder)*type_len);
|
|
407
442
|
break;
|
|
408
443
|
default:
|
|
409
|
-
rb_raise(rb_eArgError, "gluNurbsSurface needs 7 or 11 arguments"
|
|
444
|
+
rb_raise(rb_eArgError, "gluNurbsSurface needs 7 or 11 arguments");
|
|
410
445
|
return Qnil; /* not reached */
|
|
411
446
|
}
|
|
412
447
|
GetNURBS(args[0], ndata);
|
|
@@ -420,6 +455,7 @@ VALUE obj;
|
|
|
420
455
|
gms.ptr[gms.len-2] = tknot;
|
|
421
456
|
gms.ptr[gms.len-1] = ctlarray;
|
|
422
457
|
|
|
458
|
+
|
|
423
459
|
return Qnil;
|
|
424
460
|
}
|
|
425
461
|
static VALUE
|
|
@@ -430,6 +466,7 @@ VALUE obj, arg1;
|
|
|
430
466
|
GetNURBS(arg1, ndata);
|
|
431
467
|
rb_ary_push(n_current, arg1);
|
|
432
468
|
gluBeginTrim(ndata->nobj);
|
|
469
|
+
|
|
433
470
|
return Qnil;
|
|
434
471
|
}
|
|
435
472
|
static VALUE
|
|
@@ -440,6 +477,7 @@ VALUE obj, arg1;
|
|
|
440
477
|
GetNURBS(arg1, ndata);
|
|
441
478
|
gluEndTrim(ndata->nobj);
|
|
442
479
|
rb_ary_pop(n_current);
|
|
480
|
+
|
|
443
481
|
return Qnil;
|
|
444
482
|
}
|
|
445
483
|
static VALUE
|
|
@@ -464,8 +502,7 @@ VALUE obj;
|
|
|
464
502
|
stride = (type == GLU_MAP1_TRIM_2 ? 2 : 3);
|
|
465
503
|
|
|
466
504
|
array = ALLOC_N(GLfloat, count*stride);
|
|
467
|
-
ary_ctl1 =
|
|
468
|
-
mary2ary(args[1], ary_ctl1); /* flatten */
|
|
505
|
+
ary_ctl1 = rb_funcall(args[1],rb_intern("flatten"),0);
|
|
469
506
|
ary2cflt(ary_ctl1, array, count*stride);
|
|
470
507
|
break;
|
|
471
508
|
case 5:
|
|
@@ -474,18 +511,18 @@ VALUE obj;
|
|
|
474
511
|
type = NUM2INT(args[4]);
|
|
475
512
|
|
|
476
513
|
array = ALLOC_N(GLfloat, count*stride);
|
|
477
|
-
ary_ctl1 =
|
|
478
|
-
mary2ary(args[2], ary_ctl1); /* flatten */
|
|
514
|
+
ary_ctl1 = rb_funcall(args[2],rb_intern("flatten"),0);
|
|
479
515
|
ary2cflt(ary_ctl1, array, count*stride);
|
|
480
516
|
break;
|
|
481
517
|
default:
|
|
482
|
-
rb_raise(rb_eArgError, "gluPwlCurve needs 3 or 5 arguments"
|
|
518
|
+
rb_raise(rb_eArgError, "gluPwlCurve needs 3 or 5 arguments");
|
|
483
519
|
return Qnil; /* not reached */
|
|
484
520
|
}
|
|
485
521
|
|
|
486
522
|
GetNURBS(args[0], ndata);
|
|
487
523
|
gluPwlCurve(ndata->nobj, count, array, stride, type);
|
|
488
524
|
free(array);
|
|
525
|
+
|
|
489
526
|
return Qnil;
|
|
490
527
|
}
|
|
491
528
|
|
|
@@ -498,12 +535,13 @@ VALUE obj, arg1,arg2,arg3,arg4;
|
|
|
498
535
|
GLint viewport[4];
|
|
499
536
|
|
|
500
537
|
GetNURBS(arg1, ndata);
|
|
501
|
-
|
|
502
|
-
|
|
538
|
+
ary2cmatfloat(arg2,mdl_mtx,4,4);
|
|
539
|
+
ary2cmatfloat(arg3,persp_mtx,4,4);
|
|
503
540
|
ary2cint(arg4,viewport,4);
|
|
504
541
|
|
|
505
542
|
gluLoadSamplingMatrices(ndata->nobj,mdl_mtx,persp_mtx,viewport);
|
|
506
543
|
|
|
544
|
+
|
|
507
545
|
return Qnil;
|
|
508
546
|
}
|
|
509
547
|
|
|
@@ -552,6 +590,7 @@ VALUE obj;
|
|
|
552
590
|
ret = Data_Make_Struct(cTess, struct tessdata, mark_tess, free_tess, tdata);
|
|
553
591
|
tdata->tobj = gluNewTess();
|
|
554
592
|
tdata->t_ref = rb_ary_new2(REF_LAST);
|
|
593
|
+
|
|
555
594
|
return ret;
|
|
556
595
|
}
|
|
557
596
|
static VALUE
|
|
@@ -561,6 +600,7 @@ VALUE obj, arg1;
|
|
|
561
600
|
struct tessdata *tdata;
|
|
562
601
|
GetTESS(arg1, tdata);
|
|
563
602
|
free_tess(tdata);
|
|
603
|
+
|
|
564
604
|
return Qnil;
|
|
565
605
|
}
|
|
566
606
|
|
|
@@ -585,7 +625,7 @@ t_edgeFlag(flag)
|
|
|
585
625
|
GLboolean flag;
|
|
586
626
|
{
|
|
587
627
|
TESS_CALLBACK_COMMON
|
|
588
|
-
rb_funcall(rb_ary_entry(tdata->t_ref, TESS_EDGE_FLAG), callId, 1,
|
|
628
|
+
rb_funcall(rb_ary_entry(tdata->t_ref, TESS_EDGE_FLAG), callId, 1, GLBOOL2RUBY(flag));
|
|
589
629
|
}
|
|
590
630
|
static void CALLBACK
|
|
591
631
|
t_vertex(data)
|
|
@@ -621,7 +661,7 @@ GLboolean flag;
|
|
|
621
661
|
void* user_data;
|
|
622
662
|
{
|
|
623
663
|
TESS_CALLBACK_COMMON
|
|
624
|
-
rb_funcall(rb_ary_entry(tdata->t_ref, TESS_EDGE_FLAG_DATA), callId, 2,
|
|
664
|
+
rb_funcall(rb_ary_entry(tdata->t_ref, TESS_EDGE_FLAG_DATA), callId, 2, GLBOOL2RUBY(flag), user_data);
|
|
625
665
|
}
|
|
626
666
|
static void CALLBACK
|
|
627
667
|
t_vertex_data(data, user_data)
|
|
@@ -711,6 +751,7 @@ VALUE obj, arg1, arg2;
|
|
|
711
751
|
property = (GLenum)NUM2INT(arg2);
|
|
712
752
|
value = (GLdouble)NUM2DBL(arg3);
|
|
713
753
|
gluTessProperty(tdata->tobj, property, value);
|
|
754
|
+
|
|
714
755
|
return Qnil;
|
|
715
756
|
}
|
|
716
757
|
static VALUE
|
|
@@ -723,7 +764,8 @@ VALUE obj, arg1, arg2;
|
|
|
723
764
|
GetTESS(arg1, tdata);
|
|
724
765
|
property = (GLenum)NUM2INT(arg2);
|
|
725
766
|
gluGetTessProperty(tdata->tobj, property, &value);
|
|
726
|
-
|
|
767
|
+
|
|
768
|
+
return cond_GLBOOL2RUBY_F(property,value);
|
|
727
769
|
}
|
|
728
770
|
static VALUE
|
|
729
771
|
glu_TessNormal(obj, arg1, arg2, arg3, arg4)
|
|
@@ -736,6 +778,7 @@ VALUE obj, arg1, arg2, arg3, arg4;
|
|
|
736
778
|
y = (GLdouble)NUM2DBL(arg3);
|
|
737
779
|
z = (GLdouble)NUM2DBL(arg4);
|
|
738
780
|
gluTessNormal(tdata->tobj, x, y, z);
|
|
781
|
+
|
|
739
782
|
return Qnil;
|
|
740
783
|
}
|
|
741
784
|
static VALUE
|
|
@@ -749,6 +792,7 @@ VALUE obj, arg1, arg2;
|
|
|
749
792
|
rb_ary_store(tdata->t_ref, TESS_DATA, rb_ary_new());
|
|
750
793
|
rb_ary_push(t_current, arg1);
|
|
751
794
|
gluTessBeginPolygon(tdata->tobj, (void*)arg2);
|
|
795
|
+
|
|
752
796
|
return Qnil;
|
|
753
797
|
}
|
|
754
798
|
static VALUE
|
|
@@ -762,6 +806,7 @@ VALUE obj, arg1;
|
|
|
762
806
|
rb_ary_store(tdata->t_ref, TESS_OUTDATA, Qnil);
|
|
763
807
|
rb_ary_store(tdata->t_ref, TESS_DATA, Qnil);
|
|
764
808
|
rb_ary_pop(t_current);
|
|
809
|
+
|
|
765
810
|
return Qnil;
|
|
766
811
|
}
|
|
767
812
|
static VALUE
|
|
@@ -771,14 +816,17 @@ VALUE obj, arg1;
|
|
|
771
816
|
struct tessdata* tdata;
|
|
772
817
|
GetTESS(arg1, tdata);
|
|
773
818
|
gluTessBeginContour(tdata->tobj);
|
|
819
|
+
|
|
774
820
|
return Qnil;
|
|
775
821
|
}
|
|
776
822
|
static VALUE
|
|
777
823
|
glu_TessEndContour(obj, arg1)
|
|
824
|
+
VALUE obj, arg1;
|
|
778
825
|
{
|
|
779
826
|
struct tessdata* tdata;
|
|
780
827
|
GetTESS(arg1, tdata);
|
|
781
828
|
gluTessEndContour(tdata->tobj);
|
|
829
|
+
|
|
782
830
|
return Qnil;
|
|
783
831
|
}
|
|
784
832
|
|
|
@@ -816,6 +864,7 @@ VALUE obj, arg1, arg2, arg3;
|
|
|
816
864
|
TESS_CALLBACK_CASE(TESS_COMBINE,t_combine)
|
|
817
865
|
TESS_CALLBACK_CASE(TESS_COMBINE_DATA,t_combine_data)
|
|
818
866
|
}
|
|
867
|
+
|
|
819
868
|
return Qnil;
|
|
820
869
|
}
|
|
821
870
|
#undef TESS_CALLBACK_CASE
|
|
@@ -829,6 +878,7 @@ VALUE obj, arg1;
|
|
|
829
878
|
rb_ary_store(tdata->t_ref, TESS_DATA, rb_ary_new());
|
|
830
879
|
rb_ary_push(t_current, arg1);
|
|
831
880
|
gluBeginPolygon(tdata->tobj);
|
|
881
|
+
|
|
832
882
|
return Qnil;
|
|
833
883
|
}
|
|
834
884
|
static VALUE
|
|
@@ -842,6 +892,7 @@ VALUE obj, arg1, arg2, arg3;
|
|
|
842
892
|
Check_Type(arg2,T_ARRAY);
|
|
843
893
|
ary2cdbl(arg2, v, 3);
|
|
844
894
|
gluTessVertex(tdata->tobj, v,(void *)arg3);
|
|
895
|
+
|
|
845
896
|
return Qnil;
|
|
846
897
|
}
|
|
847
898
|
static VALUE
|
|
@@ -853,6 +904,7 @@ VALUE obj, arg1, arg2;
|
|
|
853
904
|
GetTESS(arg1, tdata);
|
|
854
905
|
type = (GLenum)NUM2INT(arg2);
|
|
855
906
|
gluNextContour(tdata->tobj, type);
|
|
907
|
+
|
|
856
908
|
return Qnil;
|
|
857
909
|
}
|
|
858
910
|
static VALUE
|
|
@@ -864,6 +916,7 @@ VALUE obj, arg1;
|
|
|
864
916
|
gluEndPolygon(tdata->tobj);
|
|
865
917
|
rb_ary_store(tdata->t_ref, TESS_DATA, Qnil);
|
|
866
918
|
rb_ary_pop(t_current);
|
|
919
|
+
|
|
867
920
|
return Qnil;
|
|
868
921
|
}
|
|
869
922
|
|
|
@@ -896,6 +949,7 @@ VALUE obj, arg1, arg2, arg3;
|
|
|
896
949
|
if (!rb_obj_is_kind_of(arg3,rb_cProc) && !NIL_P(arg3))
|
|
897
950
|
rb_raise(rb_eTypeError, "gluQuadricCallback needs Proc Object:%s",rb_class2name(CLASS_OF(arg3)));
|
|
898
951
|
|
|
952
|
+
|
|
899
953
|
if (type!=GLU_ERROR)
|
|
900
954
|
return Qnil;
|
|
901
955
|
|
|
@@ -905,6 +959,7 @@ VALUE obj, arg1, arg2, arg3;
|
|
|
905
959
|
else
|
|
906
960
|
gluQuadricCallback(qdata->qobj, type, q_error);
|
|
907
961
|
|
|
962
|
+
|
|
908
963
|
return Qnil;
|
|
909
964
|
}
|
|
910
965
|
|
|
@@ -932,6 +987,7 @@ VALUE obj;
|
|
|
932
987
|
ret = Data_Make_Struct(cQuad, struct quaddata, mark_quad, free_quad, qdata);
|
|
933
988
|
qdata->qobj = gluNewQuadric();
|
|
934
989
|
qdata->q_ref = rb_ary_new2(REF_LAST);
|
|
990
|
+
|
|
935
991
|
return ret;
|
|
936
992
|
}
|
|
937
993
|
static VALUE
|
|
@@ -941,6 +997,7 @@ VALUE obj, arg1;
|
|
|
941
997
|
struct quaddata *qdata;
|
|
942
998
|
GetQUAD(arg1, qdata);
|
|
943
999
|
free_quad(qdata);
|
|
1000
|
+
|
|
944
1001
|
return Qnil;
|
|
945
1002
|
}
|
|
946
1003
|
static VALUE
|
|
@@ -952,6 +1009,7 @@ VALUE obj, arg1, arg2;
|
|
|
952
1009
|
GetQUAD(arg1, qdata);
|
|
953
1010
|
normals = (GLenum)NUM2INT(arg2);
|
|
954
1011
|
gluQuadricNormals(qdata->qobj, normals);
|
|
1012
|
+
|
|
955
1013
|
return Qnil;
|
|
956
1014
|
}
|
|
957
1015
|
static VALUE
|
|
@@ -963,6 +1021,7 @@ VALUE obj, arg1, arg2;
|
|
|
963
1021
|
GetQUAD(arg1, qdata);
|
|
964
1022
|
textureCoords = (GLboolean)NUM2INT(arg2);
|
|
965
1023
|
gluQuadricTexture(qdata->qobj, textureCoords);
|
|
1024
|
+
|
|
966
1025
|
return Qnil;
|
|
967
1026
|
}
|
|
968
1027
|
static VALUE
|
|
@@ -974,6 +1033,7 @@ VALUE obj, arg1, arg2;
|
|
|
974
1033
|
GetQUAD(arg1, qdata);
|
|
975
1034
|
orientation = (GLenum)NUM2INT(arg2);
|
|
976
1035
|
gluQuadricOrientation(qdata->qobj, orientation);
|
|
1036
|
+
|
|
977
1037
|
return Qnil;
|
|
978
1038
|
}
|
|
979
1039
|
static VALUE
|
|
@@ -985,6 +1045,7 @@ VALUE obj, arg1, arg2;
|
|
|
985
1045
|
GetQUAD(arg1, qdata);
|
|
986
1046
|
drawStyle = (GLenum)NUM2INT(arg2);
|
|
987
1047
|
gluQuadricDrawStyle(qdata->qobj, drawStyle);
|
|
1048
|
+
|
|
988
1049
|
return Qnil;
|
|
989
1050
|
}
|
|
990
1051
|
static VALUE
|
|
@@ -1008,6 +1069,7 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6;
|
|
|
1008
1069
|
rb_ary_push(q_current, arg1);
|
|
1009
1070
|
gluCylinder(qdata->qobj, baseRadius, topRadius, height, slices, stacks);
|
|
1010
1071
|
rb_ary_pop(q_current);
|
|
1072
|
+
|
|
1011
1073
|
return Qnil;
|
|
1012
1074
|
}
|
|
1013
1075
|
static VALUE
|
|
@@ -1030,6 +1092,7 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5;
|
|
|
1030
1092
|
|
|
1031
1093
|
gluDisk(qdata->qobj, innerRadius, outerRadius, slices, loops);
|
|
1032
1094
|
rb_ary_pop(q_current);
|
|
1095
|
+
|
|
1033
1096
|
return Qnil;
|
|
1034
1097
|
}
|
|
1035
1098
|
static VALUE
|
|
@@ -1055,6 +1118,7 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7;
|
|
|
1055
1118
|
rb_ary_push(q_current, arg1);
|
|
1056
1119
|
gluPartialDisk(qdata->qobj, innerRadius, outerRadius, slices, loops, startAngle, sweepAngle);
|
|
1057
1120
|
rb_ary_pop(q_current);
|
|
1121
|
+
|
|
1058
1122
|
return Qnil;
|
|
1059
1123
|
}
|
|
1060
1124
|
static VALUE
|
|
@@ -1074,6 +1138,7 @@ VALUE obj, arg1, arg2, arg3, arg4;
|
|
|
1074
1138
|
rb_ary_push(q_current, arg1);
|
|
1075
1139
|
gluSphere(qdata->qobj, radius, slices, stacks);
|
|
1076
1140
|
rb_ary_pop(q_current);
|
|
1141
|
+
|
|
1077
1142
|
return Qnil;
|
|
1078
1143
|
}
|
|
1079
1144
|
|
|
@@ -1102,6 +1167,7 @@ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
|
|
|
1102
1167
|
upy = (GLdouble)NUM2DBL(arg8);
|
|
1103
1168
|
upz = (GLdouble)NUM2DBL(arg9);
|
|
1104
1169
|
gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz );
|
|
1170
|
+
|
|
1105
1171
|
return Qnil;
|
|
1106
1172
|
}
|
|
1107
1173
|
static VALUE
|
|
@@ -1117,6 +1183,7 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
|
1117
1183
|
bottom = (GLdouble)NUM2DBL(arg3);
|
|
1118
1184
|
top = (GLdouble)NUM2DBL(arg4);
|
|
1119
1185
|
gluOrtho2D(left,right,bottom,top);
|
|
1186
|
+
|
|
1120
1187
|
return Qnil;
|
|
1121
1188
|
}
|
|
1122
1189
|
static VALUE
|
|
@@ -1132,6 +1199,7 @@ VALUE obj,arg1,arg2,arg3,arg4;
|
|
|
1132
1199
|
zNear = (GLdouble)NUM2DBL(arg3);
|
|
1133
1200
|
zFar = (GLdouble)NUM2DBL(arg4);
|
|
1134
1201
|
gluPerspective(fovy,aspect,zNear,zFar);
|
|
1202
|
+
|
|
1135
1203
|
return Qnil;
|
|
1136
1204
|
}
|
|
1137
1205
|
static VALUE
|
|
@@ -1165,11 +1233,12 @@ VALUE obj;
|
|
|
1165
1233
|
ary2cint(args[4], viewport, 4);
|
|
1166
1234
|
break;
|
|
1167
1235
|
default:
|
|
1168
|
-
rb_raise(rb_eArgError, "gluPickMatrix needs 2,4 or 5 parameters"
|
|
1236
|
+
rb_raise(rb_eArgError, "gluPickMatrix needs 2,4 or 5 parameters");
|
|
1169
1237
|
}
|
|
1170
1238
|
x = (GLdouble)NUM2DBL(args[0]);
|
|
1171
1239
|
y = (GLdouble)NUM2DBL(args[1]);
|
|
1172
1240
|
gluPickMatrix(x, y, width, height, viewport);
|
|
1241
|
+
|
|
1173
1242
|
return Qnil;
|
|
1174
1243
|
}
|
|
1175
1244
|
|
|
@@ -1198,8 +1267,8 @@ VALUE obj;
|
|
|
1198
1267
|
glGetIntegerv(GL_VIEWPORT, vport);
|
|
1199
1268
|
break;
|
|
1200
1269
|
case 6:
|
|
1201
|
-
|
|
1202
|
-
|
|
1270
|
+
ary2cmatdouble(args[3], mdl_mtx, 4, 4);
|
|
1271
|
+
ary2cmatdouble(args[4], prj_mtx, 4, 4);
|
|
1203
1272
|
ary2cint(args[5], vport, 4);
|
|
1204
1273
|
break;
|
|
1205
1274
|
default:
|
|
@@ -1209,10 +1278,14 @@ VALUE obj;
|
|
|
1209
1278
|
oy = (GLdouble)NUM2DBL(args[1]);
|
|
1210
1279
|
oz = (GLdouble)NUM2DBL(args[2]);
|
|
1211
1280
|
|
|
1212
|
-
if (gluProject(ox, oy, oz, mdl_mtx, prj_mtx, vport, &wx, &wy, &wz) == GL_TRUE)
|
|
1281
|
+
if (gluProject(ox, oy, oz, mdl_mtx, prj_mtx, vport, &wx, &wy, &wz) == GL_TRUE) {
|
|
1282
|
+
|
|
1213
1283
|
return rb_ary_new3(3, rb_float_new(wx), rb_float_new(wy), rb_float_new(wz));
|
|
1214
|
-
else
|
|
1215
|
-
|
|
1284
|
+
} else {
|
|
1285
|
+
|
|
1286
|
+
check_for_gluerror(GLU_INVALID_VALUE);
|
|
1287
|
+
return Qnil; /* not reached */
|
|
1288
|
+
}
|
|
1216
1289
|
}
|
|
1217
1290
|
static VALUE
|
|
1218
1291
|
glu_UnProject(argc,argv,obj)
|
|
@@ -1239,8 +1312,8 @@ VALUE obj;
|
|
|
1239
1312
|
glGetIntegerv(GL_VIEWPORT, vport);
|
|
1240
1313
|
break;
|
|
1241
1314
|
case 6:
|
|
1242
|
-
|
|
1243
|
-
|
|
1315
|
+
ary2cmatdouble(args[3], mdl_mtx, 4, 4);
|
|
1316
|
+
ary2cmatdouble(args[4], prj_mtx, 4, 4);
|
|
1244
1317
|
ary2cint(args[5], vport, 4);
|
|
1245
1318
|
break;
|
|
1246
1319
|
default:
|
|
@@ -1250,10 +1323,14 @@ VALUE obj;
|
|
|
1250
1323
|
wy = (GLdouble)NUM2DBL(args[1]);
|
|
1251
1324
|
wz = (GLdouble)NUM2DBL(args[2]);
|
|
1252
1325
|
|
|
1253
|
-
if (gluUnProject(wx, wy, wz, mdl_mtx, prj_mtx, vport, &ox, &oy, &oz) == GL_TRUE)
|
|
1326
|
+
if (gluUnProject(wx, wy, wz, mdl_mtx, prj_mtx, vport, &ox, &oy, &oz) == GL_TRUE) {
|
|
1327
|
+
|
|
1254
1328
|
return rb_ary_new3(3, rb_float_new(ox), rb_float_new(oy), rb_float_new(oz));
|
|
1255
|
-
else
|
|
1256
|
-
|
|
1329
|
+
} else {
|
|
1330
|
+
|
|
1331
|
+
check_for_gluerror(GLU_INVALID_VALUE);
|
|
1332
|
+
return Qnil; /* not reached */
|
|
1333
|
+
}
|
|
1257
1334
|
}
|
|
1258
1335
|
|
|
1259
1336
|
static VALUE
|
|
@@ -1265,6 +1342,7 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6;
|
|
|
1265
1342
|
GLint width;
|
|
1266
1343
|
GLenum format;
|
|
1267
1344
|
GLenum type;
|
|
1345
|
+
int ret;
|
|
1268
1346
|
|
|
1269
1347
|
target = (GLenum)NUM2INT(arg1);
|
|
1270
1348
|
components = (GLint)NUM2INT(arg2);
|
|
@@ -1274,7 +1352,10 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6;
|
|
|
1274
1352
|
Check_Type(arg6,T_STRING);
|
|
1275
1353
|
CheckDataSize(type,format,width,arg6);
|
|
1276
1354
|
|
|
1277
|
-
|
|
1355
|
+
ret = gluBuild1DMipmaps(target, components, width, format, type, RSTRING_PTR(arg6));
|
|
1356
|
+
check_for_gluerror(ret);
|
|
1357
|
+
|
|
1358
|
+
return INT2NUM(ret);
|
|
1278
1359
|
}
|
|
1279
1360
|
|
|
1280
1361
|
static VALUE
|
|
@@ -1287,6 +1368,7 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7;
|
|
|
1287
1368
|
GLint height;
|
|
1288
1369
|
GLenum format;
|
|
1289
1370
|
GLenum type;
|
|
1371
|
+
int ret;
|
|
1290
1372
|
|
|
1291
1373
|
target = (GLenum)NUM2INT(arg1);
|
|
1292
1374
|
components = (GLint)NUM2INT(arg2);
|
|
@@ -1297,7 +1379,10 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7;
|
|
|
1297
1379
|
Check_Type(arg7,T_STRING);
|
|
1298
1380
|
CheckDataSize(type,format,width*height,arg7);
|
|
1299
1381
|
|
|
1300
|
-
|
|
1382
|
+
ret = gluBuild2DMipmaps(target, components, width, height, format, type, RSTRING_PTR(arg7));
|
|
1383
|
+
check_for_gluerror(ret);
|
|
1384
|
+
|
|
1385
|
+
return INT2NUM(ret);
|
|
1301
1386
|
}
|
|
1302
1387
|
|
|
1303
1388
|
static VALUE
|
|
@@ -1313,6 +1398,7 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8;
|
|
|
1313
1398
|
GLint heightout;
|
|
1314
1399
|
GLenum typeout;
|
|
1315
1400
|
VALUE ret;
|
|
1401
|
+
GLint retcode;
|
|
1316
1402
|
|
|
1317
1403
|
format = (GLenum)NUM2INT(arg1);
|
|
1318
1404
|
widthin = (GLint)NUM2INT(arg2);
|
|
@@ -1320,13 +1406,16 @@ VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8;
|
|
|
1320
1406
|
typein = (GLenum)NUM2INT(arg4);
|
|
1321
1407
|
Check_Type(arg5,T_STRING);
|
|
1322
1408
|
CheckDataSize(typein,format,heightin*widthin,arg5);
|
|
1323
|
-
datain =
|
|
1409
|
+
datain = RSTRING_PTR(arg5);
|
|
1324
1410
|
widthout = (GLint)NUM2INT(arg6);
|
|
1325
1411
|
heightout = (GLint)NUM2INT(arg7);
|
|
1326
1412
|
typeout = (GLenum)NUM2INT(arg8);
|
|
1327
1413
|
ret = allocate_buffer_with_string(GetDataSize(typeout,format,widthout*heightout));
|
|
1328
|
-
gluScaleImage(format, widthin, heightin, typein, datain,
|
|
1329
|
-
widthout, heightout, typeout, (GLvoid*)
|
|
1414
|
+
retcode = gluScaleImage(format, widthin, heightin, typein, datain,
|
|
1415
|
+
widthout, heightout, typeout, (GLvoid*)RSTRING_PTR(ret));
|
|
1416
|
+
|
|
1417
|
+
check_for_gluerror(retcode);
|
|
1418
|
+
|
|
1330
1419
|
return ret;
|
|
1331
1420
|
}
|
|
1332
1421
|
|
|
@@ -1338,6 +1427,7 @@ VALUE obj, arg1;
|
|
|
1338
1427
|
GLubyte* error;
|
|
1339
1428
|
errorCode = (GLenum)NUM2INT(arg1);
|
|
1340
1429
|
error = (GLubyte*)gluErrorString(errorCode);
|
|
1430
|
+
|
|
1341
1431
|
if (error)
|
|
1342
1432
|
return rb_str_new2((char *)error);
|
|
1343
1433
|
else
|
|
@@ -1351,6 +1441,7 @@ VALUE obj, arg1;
|
|
|
1351
1441
|
GLubyte* str;
|
|
1352
1442
|
name = (GLenum)NUM2INT(arg1);
|
|
1353
1443
|
str = (GLubyte*)gluGetString(name);
|
|
1444
|
+
|
|
1354
1445
|
if (str)
|
|
1355
1446
|
return rb_str_new2((char *)str);
|
|
1356
1447
|
else
|
|
@@ -1364,7 +1455,7 @@ DLLEXPORT void Init_glu()
|
|
|
1364
1455
|
callId = rb_intern("call");
|
|
1365
1456
|
refId = rb_intern("[]");
|
|
1366
1457
|
module = rb_define_module("Glu");
|
|
1367
|
-
|
|
1458
|
+
|
|
1368
1459
|
glu_init_enums(module);
|
|
1369
1460
|
|
|
1370
1461
|
rb_define_module_function(module, "gluNewNurbsRenderer", glu_NewNurbsRenderer, 0);
|
|
@@ -1421,7 +1512,11 @@ DLLEXPORT void Init_glu()
|
|
|
1421
1512
|
rb_define_module_function(module, "gluQuadricCallback", glu_QuadricCallback, 3);
|
|
1422
1513
|
rb_define_module_function(module, "gluNurbsCallback", glu_NurbsCallback, 3);
|
|
1423
1514
|
|
|
1424
|
-
|
|
1515
|
+
Class_GLUError = rb_define_class_under(module, "Error", rb_eStandardError);
|
|
1516
|
+
|
|
1517
|
+
rb_define_method(Class_GLUError, "initialize", GLUError_initialize, 2);
|
|
1518
|
+
rb_define_attr(Class_GLUError, "id", 1, 0);
|
|
1519
|
+
|
|
1425
1520
|
cNurbs = rb_define_class("Nurbs", rb_cObject);
|
|
1426
1521
|
cTess = rb_define_class("Tess", rb_cObject);
|
|
1427
1522
|
cQuad = rb_define_class("Quadric", rb_cObject);
|