ruby-opengl 0.33.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5152 @@
1
+ /*
2
+ * Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
3
+ * Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
4
+ *
5
+ * This program is distributed under the terms of the MIT license.
6
+ * See the included MIT-LICENSE file for the terms of this license.
7
+ *
8
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
11
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
12
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
13
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
14
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ */
16
+
17
+ #ifdef __APPLE__
18
+ #include <OpenGL/gl.h>
19
+ #elif defined WIN32
20
+ #include <windows.h>
21
+ #include <GL/gl.h>
22
+ #else
23
+ #include <GL/gl.h>
24
+ #endif
25
+ #include "../common/rbogl.h"
26
+ #include "../common/gl-enums.h"
27
+
28
+ #ifndef MAX
29
+ #define MAX(a, b) (((a) > (b)) ? (a) : (b))
30
+ #endif
31
+
32
+ /* OpenGL 1.0 + 1.1 functions */
33
+
34
+ static VALUE
35
+ gl_NewList(obj,arg1,arg2)
36
+ VALUE obj,arg1,arg2;
37
+ {
38
+ GLuint list;
39
+ GLenum mode;
40
+ list = (GLuint)NUM2INT(arg1);
41
+ mode = (GLenum)NUM2INT(arg2);
42
+ glNewList(list,mode);
43
+ return Qnil;
44
+ }
45
+
46
+ static VALUE
47
+ gl_EndList(obj)
48
+ VALUE obj;
49
+ {
50
+ glEndList();
51
+ return Qnil;
52
+ }
53
+
54
+ static VALUE
55
+ gl_CallList(obj,arg1)
56
+ VALUE obj,arg1;
57
+ {
58
+ GLuint list;
59
+ list = (GLuint)NUM2INT(arg1);
60
+ glCallList(list);
61
+ return Qnil;
62
+ }
63
+
64
+ static VALUE
65
+ gl_CallLists(obj,arg1)
66
+ VALUE obj,arg1;
67
+ {
68
+ GLsizei n;
69
+ GLenum type;
70
+ GLvoid *lists;
71
+ if (TYPE(arg1) == T_STRING) {
72
+ type = GL_BYTE;
73
+ lists = RSTRING(arg1)->ptr;
74
+ n = RSTRING(arg1)->len;
75
+ } else if (TYPE(arg1) == T_ARRAY) {
76
+ type = GL_INT;
77
+ lists = ALLOC_N(int, RARRAY(arg1)->len);
78
+ n = ary2cint(arg1,lists,0);
79
+ } else {
80
+ rb_raise(rb_eArgError,"GL.CallLists wrong arguments");
81
+ return Qnil; /* not reached */
82
+ }
83
+ glCallLists(n, type, lists);
84
+ if (type == GL_INT) xfree(lists);
85
+ return Qnil;
86
+ }
87
+
88
+ static VALUE
89
+ gl_DeleteLists(obj,arg1,arg2)
90
+ VALUE obj,arg1,arg2;
91
+ {
92
+ GLuint list;
93
+ GLsizei range;
94
+ list = (GLuint)NUM2INT(arg1);
95
+ range = (GLsizei)NUM2INT(arg2);
96
+ glDeleteLists(list,range);
97
+ return Qnil;
98
+ }
99
+
100
+ static VALUE
101
+ gl_GenLists(obj,arg1)
102
+ VALUE obj,arg1;
103
+ {
104
+ GLsizei range;
105
+ GLuint ret;
106
+ range = (GLsizei)NUM2INT(arg1);
107
+ ret = glGenLists(range);
108
+ return INT2NUM(ret);
109
+ }
110
+
111
+ static VALUE
112
+ gl_ListBase(obj,arg1)
113
+ VALUE obj,arg1;
114
+ {
115
+ GLuint base;
116
+ base = (GLuint)NUM2INT(arg1);
117
+ glListBase(base);
118
+ return Qnil;
119
+ }
120
+
121
+ static VALUE
122
+ gl_Begin(obj,arg1)
123
+ VALUE obj,arg1;
124
+ {
125
+ GLenum mode;
126
+ mode = (GLenum)NUM2INT(arg1);
127
+ glBegin(mode);
128
+ return Qnil;
129
+ }
130
+
131
+ static VALUE
132
+ gl_Bitmap(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
133
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
134
+ {
135
+ GLsizei width;
136
+ GLsizei height;
137
+ GLfloat xorig;
138
+ GLfloat yorig;
139
+ GLfloat xmove;
140
+ GLfloat ymove;
141
+ const GLubyte *bitmap;
142
+ width = (GLsizei)NUM2INT(arg1);
143
+ height = (GLsizei)NUM2INT(arg2);
144
+ xorig = (GLfloat)NUM2DBL(arg3);
145
+ yorig = (GLfloat)NUM2DBL(arg4);
146
+ xmove = (GLfloat)NUM2DBL(arg5);
147
+ ymove = (GLfloat)NUM2DBL(arg6);
148
+ if (TYPE(arg7) != T_STRING)
149
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(arg7)));
150
+ if (RSTRING(arg7)->len < (width * height / 8))
151
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
152
+ bitmap = (const GLubyte*)RSTRING(arg7)->ptr;
153
+ glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
154
+ return Qnil;
155
+ }
156
+
157
+ static VALUE
158
+ gl_Color3b(obj,arg1,arg2,arg3)
159
+ VALUE obj,arg1,arg2,arg3;
160
+ {
161
+ GLbyte red;
162
+ GLbyte green;
163
+ GLbyte blue;
164
+ red = (GLbyte)NUM2INT(arg1);
165
+ green = (GLbyte)NUM2INT(arg2);
166
+ blue = (GLbyte)NUM2INT(arg3);
167
+ glColor3b(red,green,blue);
168
+ return Qnil;
169
+ }
170
+
171
+ static VALUE
172
+ gl_Color3d(obj,arg1,arg2,arg3)
173
+ VALUE obj,arg1,arg2,arg3;
174
+ {
175
+ GLdouble red;
176
+ GLdouble green;
177
+ GLdouble blue;
178
+ red = (GLdouble)NUM2DBL(arg1);
179
+ green = (GLdouble)NUM2DBL(arg2);
180
+ blue = (GLdouble)NUM2DBL(arg3);
181
+ glColor3d(red,green,blue);
182
+ return Qnil;
183
+ }
184
+
185
+ static VALUE
186
+ gl_Color3f(obj,arg1,arg2,arg3)
187
+ VALUE obj,arg1,arg2,arg3;
188
+ {
189
+ GLfloat red;
190
+ GLfloat green;
191
+ GLfloat blue;
192
+ red = (GLfloat)NUM2DBL(arg1);
193
+ green = (GLfloat)NUM2DBL(arg2);
194
+ blue = (GLfloat)NUM2DBL(arg3);
195
+ glColor3f(red,green,blue);
196
+ return Qnil;
197
+ }
198
+
199
+ static VALUE
200
+ gl_Color3i(obj,arg1,arg2,arg3)
201
+ VALUE obj,arg1,arg2,arg3;
202
+ {
203
+ GLint red;
204
+ GLint green;
205
+ GLint blue;
206
+ red = (GLint)NUM2INT(arg1);
207
+ green = (GLint)NUM2INT(arg2);
208
+ blue = (GLint)NUM2INT(arg3);
209
+ glColor3i(red,green,blue);
210
+ return Qnil;
211
+ }
212
+
213
+ static VALUE
214
+ gl_Color3s(obj,arg1,arg2,arg3)
215
+ VALUE obj,arg1,arg2,arg3;
216
+ {
217
+ GLshort red;
218
+ GLshort green;
219
+ GLshort blue;
220
+ red = (GLshort)NUM2INT(arg1);
221
+ green = (GLshort)NUM2INT(arg2);
222
+ blue = (GLshort)NUM2INT(arg3);
223
+ glColor3s(red,green,blue);
224
+ return Qnil;
225
+ }
226
+
227
+ static VALUE
228
+ gl_Color3ub(obj,arg1,arg2,arg3)
229
+ VALUE obj,arg1,arg2,arg3;
230
+ {
231
+ GLubyte red;
232
+ GLubyte green;
233
+ GLubyte blue;
234
+ red = (GLubyte)NUM2INT(arg1);
235
+ green = (GLubyte)NUM2INT(arg2);
236
+ blue = (GLubyte)NUM2INT(arg3);
237
+ glColor3ub(red,green,blue);
238
+ return Qnil;
239
+ }
240
+
241
+ static VALUE
242
+ gl_Color3ui(obj,arg1,arg2,arg3)
243
+ VALUE obj,arg1,arg2,arg3;
244
+ {
245
+ GLuint red;
246
+ GLuint green;
247
+ GLuint blue;
248
+ red = (GLuint)NUM2INT(arg1);
249
+ green = (GLuint)NUM2INT(arg2);
250
+ blue = (GLuint)NUM2INT(arg3);
251
+ glColor3ui(red,green,blue);
252
+ return Qnil;
253
+ }
254
+
255
+ static VALUE
256
+ gl_Color3us(obj,arg1,arg2,arg3)
257
+ VALUE obj,arg1,arg2,arg3;
258
+ {
259
+ GLushort red;
260
+ GLushort green;
261
+ GLushort blue;
262
+ red = (GLushort)NUM2INT(arg1);
263
+ green = (GLushort)NUM2INT(arg2);
264
+ blue = (GLushort)NUM2INT(arg3);
265
+ glColor3us(red,green,blue);
266
+ return Qnil;
267
+ }
268
+
269
+ static VALUE
270
+ gl_Color4b(obj,arg1,arg2,arg3,arg4)
271
+ VALUE obj,arg1,arg2,arg3,arg4;
272
+ {
273
+ GLbyte red;
274
+ GLbyte green;
275
+ GLbyte blue;
276
+ GLbyte alpha;
277
+ red = (GLbyte)NUM2INT(arg1);
278
+ green = (GLbyte)NUM2INT(arg2);
279
+ blue = (GLbyte)NUM2INT(arg3);
280
+ alpha = (GLbyte)NUM2INT(arg4);
281
+ glColor4b(red,green,blue,alpha);
282
+ return Qnil;
283
+ }
284
+
285
+ static VALUE
286
+ gl_Color4d(obj,arg1,arg2,arg3,arg4)
287
+ VALUE obj,arg1,arg2,arg3,arg4;
288
+ {
289
+ GLdouble red;
290
+ GLdouble green;
291
+ GLdouble blue;
292
+ GLdouble alpha;
293
+ red = (GLdouble)NUM2DBL(arg1);
294
+ green = (GLdouble)NUM2DBL(arg2);
295
+ blue = (GLdouble)NUM2DBL(arg3);
296
+ alpha = (GLdouble)NUM2DBL(arg4);
297
+ glColor4d(red,green,blue,alpha);
298
+ return Qnil;
299
+ }
300
+
301
+ static VALUE
302
+ gl_Color4f(obj,arg1,arg2,arg3,arg4)
303
+ VALUE obj,arg1,arg2,arg3,arg4;
304
+ {
305
+ GLfloat red;
306
+ GLfloat green;
307
+ GLfloat blue;
308
+ GLfloat alpha;
309
+ red = (GLfloat)NUM2DBL(arg1);
310
+ green = (GLfloat)NUM2DBL(arg2);
311
+ blue = (GLfloat)NUM2DBL(arg3);
312
+ alpha = (GLfloat)NUM2DBL(arg4);
313
+ glColor4f(red,green,blue,alpha);
314
+ return Qnil;
315
+ }
316
+
317
+ static VALUE
318
+ gl_Color4i(obj,arg1,arg2,arg3,arg4)
319
+ VALUE obj,arg1,arg2,arg3,arg4;
320
+ {
321
+ GLint red;
322
+ GLint green;
323
+ GLint blue;
324
+ GLint alpha;
325
+ red = (GLint)NUM2INT(arg1);
326
+ green = (GLint)NUM2INT(arg2);
327
+ blue = (GLint)NUM2INT(arg3);
328
+ alpha = (GLint)NUM2INT(arg4);
329
+ glColor4i(red,green,blue,alpha);
330
+ return Qnil;
331
+ }
332
+
333
+ static VALUE
334
+ gl_Color4s(obj,arg1,arg2,arg3,arg4)
335
+ VALUE obj,arg1,arg2,arg3,arg4;
336
+ {
337
+ GLshort red;
338
+ GLshort green;
339
+ GLshort blue;
340
+ GLshort alpha;
341
+ red = (GLshort)NUM2INT(arg1);
342
+ green = (GLshort)NUM2INT(arg2);
343
+ blue = (GLshort)NUM2INT(arg3);
344
+ alpha = (GLshort)NUM2INT(arg4);
345
+ glColor4s(red,green,blue,alpha);
346
+ return Qnil;
347
+ }
348
+
349
+ static VALUE
350
+ gl_Color4ub(obj,arg1,arg2,arg3,arg4)
351
+ VALUE obj,arg1,arg2,arg3,arg4;
352
+ {
353
+ GLubyte red;
354
+ GLubyte green;
355
+ GLubyte blue;
356
+ GLubyte alpha;
357
+ red = (GLubyte)NUM2INT(arg1);
358
+ green = (GLubyte)NUM2INT(arg2);
359
+ blue = (GLubyte)NUM2INT(arg3);
360
+ alpha = (GLubyte)NUM2INT(arg4);
361
+ glColor4ub(red,green,blue,alpha);
362
+ return Qnil;
363
+ }
364
+
365
+ static VALUE
366
+ gl_Color4ui(obj,arg1,arg2,arg3,arg4)
367
+ VALUE obj,arg1,arg2,arg3,arg4;
368
+ {
369
+ GLuint red;
370
+ GLuint green;
371
+ GLuint blue;
372
+ GLuint alpha;
373
+ red = (GLuint)NUM2INT(arg1);
374
+ green = (GLuint)NUM2INT(arg2);
375
+ blue = (GLuint)NUM2INT(arg3);
376
+ alpha = (GLuint)NUM2INT(arg4);
377
+ glColor4ui(red,green,blue,alpha);
378
+ return Qnil;
379
+ }
380
+
381
+ static VALUE
382
+ gl_Color4us(obj,arg1,arg2,arg3,arg4)
383
+ VALUE obj,arg1,arg2,arg3,arg4;
384
+ {
385
+ GLushort red;
386
+ GLushort green;
387
+ GLushort blue;
388
+ GLushort alpha;
389
+ red = (GLushort)NUM2INT(arg1);
390
+ green = (GLushort)NUM2INT(arg2);
391
+ blue = (GLushort)NUM2INT(arg3);
392
+ alpha = (GLushort)NUM2INT(arg4);
393
+ glColor4us(red,green,blue,alpha);
394
+ return Qnil;
395
+ }
396
+
397
+ static VALUE
398
+ gl_EdgeFlag(obj,arg1)
399
+ VALUE obj,arg1;
400
+ {
401
+ GLboolean flag;
402
+ flag = (GLboolean)NUM2INT(arg1);
403
+ glEdgeFlag(flag);
404
+ return Qnil;
405
+ }
406
+
407
+ static VALUE
408
+ gl_EdgeFlagv(obj,arg1)
409
+ VALUE obj,arg1;
410
+ {
411
+ GLboolean flag[1] = { GL_FALSE };
412
+ if (TYPE(arg1) != T_ARRAY)
413
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
414
+ ary2cboolean(arg1,flag,1);
415
+ glEdgeFlagv(flag);
416
+ return Qnil;
417
+ }
418
+
419
+ static VALUE
420
+ gl_End(obj)
421
+ VALUE obj;
422
+ {
423
+ glEnd();
424
+ return Qnil;
425
+ }
426
+
427
+ static VALUE
428
+ gl_Indexd(obj,arg1)
429
+ VALUE obj,arg1;
430
+ {
431
+ GLdouble c;
432
+ c = (GLdouble)NUM2DBL(arg1);
433
+ glIndexd(c);
434
+ return Qnil;
435
+ }
436
+
437
+ static VALUE
438
+ gl_Indexdv(obj,arg1)
439
+ VALUE obj,arg1;
440
+ {
441
+ GLdouble c[1] = {0.0};
442
+ if (TYPE(arg1) != T_ARRAY)
443
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
444
+ ary2cdbl(arg1,c,1);
445
+ glIndexdv(c);
446
+ return Qnil;
447
+ }
448
+
449
+ static VALUE
450
+ gl_Indexf(obj,arg1)
451
+ VALUE obj,arg1;
452
+ {
453
+ GLfloat c;
454
+ c = (GLfloat)NUM2DBL(arg1);
455
+ glIndexf(c);
456
+ return Qnil;
457
+ }
458
+
459
+ static VALUE
460
+ gl_Indexfv(obj,arg1)
461
+ VALUE obj,arg1;
462
+ {
463
+ GLfloat c[1] = {0.0};
464
+ if (TYPE(arg1) != T_ARRAY)
465
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
466
+ ary2cflt(arg1,c,1);
467
+ glIndexfv(c);
468
+ return Qnil;
469
+ }
470
+
471
+ static VALUE
472
+ gl_Indexi(obj,arg1)
473
+ VALUE obj,arg1;
474
+ {
475
+ GLint c;
476
+ c = (GLint)NUM2INT(arg1);
477
+ glIndexi(c);
478
+ return Qnil;
479
+ }
480
+
481
+ static VALUE
482
+ gl_Indexiv(obj,arg1)
483
+ VALUE obj,arg1;
484
+ {
485
+ GLint c[1] = {0.0};
486
+ if (TYPE(arg1) != T_ARRAY)
487
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
488
+ ary2cint(arg1,c,1);
489
+ glIndexiv(c);
490
+ return Qnil;
491
+ }
492
+
493
+ static VALUE
494
+ gl_Indexs(obj,arg1)
495
+ VALUE obj,arg1;
496
+ {
497
+ GLshort c;
498
+ c = (GLshort)NUM2INT(arg1);
499
+ glIndexs(c);
500
+ return Qnil;
501
+ }
502
+
503
+ static VALUE
504
+ gl_Indexsv(obj,arg1)
505
+ VALUE obj,arg1;
506
+ {
507
+ GLshort c[1] = {0};
508
+ if (TYPE(arg1) != T_ARRAY)
509
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
510
+ ary2cshort(arg1,c,1);
511
+ glIndexsv(c);
512
+ return Qnil;
513
+ }
514
+
515
+ static VALUE
516
+ gl_Normal3b(obj,arg1,arg2,arg3)
517
+ VALUE obj,arg1,arg2,arg3;
518
+ {
519
+ GLbyte nx;
520
+ GLbyte ny;
521
+ GLbyte nz;
522
+ nx = (GLbyte)NUM2INT(arg1);
523
+ ny = (GLbyte)NUM2INT(arg2);
524
+ nz = (GLbyte)NUM2INT(arg3);
525
+ glNormal3b(nx,ny,nz);
526
+ return Qnil;
527
+ }
528
+
529
+ static VALUE
530
+ gl_Normal3d(obj,arg1,arg2,arg3)
531
+ VALUE obj,arg1,arg2,arg3;
532
+ {
533
+ GLdouble nx;
534
+ GLdouble ny;
535
+ GLdouble nz;
536
+ nx = (GLdouble)NUM2DBL(arg1);
537
+ ny = (GLdouble)NUM2DBL(arg2);
538
+ nz = (GLdouble)NUM2DBL(arg3);
539
+ glNormal3d(nx,ny,nz);
540
+ return Qnil;
541
+ }
542
+
543
+ static VALUE
544
+ gl_Normal3f(obj,arg1,arg2,arg3)
545
+ VALUE obj,arg1,arg2,arg3;
546
+ {
547
+ GLfloat nx;
548
+ GLfloat ny;
549
+ GLfloat nz;
550
+ nx = (GLfloat)NUM2DBL(arg1);
551
+ ny = (GLfloat)NUM2DBL(arg2);
552
+ nz = (GLfloat)NUM2DBL(arg3);
553
+ glNormal3f(nx,ny,nz);
554
+ return Qnil;
555
+ }
556
+
557
+ static VALUE
558
+ gl_Normal3i(obj,arg1,arg2,arg3)
559
+ VALUE obj,arg1,arg2,arg3;
560
+ {
561
+ GLint nx;
562
+ GLint ny;
563
+ GLint nz;
564
+ nx = (GLint)NUM2INT(arg1);
565
+ ny = (GLint)NUM2INT(arg2);
566
+ nz = (GLint)NUM2INT(arg3);
567
+ glNormal3i(nx,ny,nz);
568
+ return Qnil;
569
+ }
570
+
571
+ static VALUE
572
+ gl_Normal3s(obj,arg1,arg2,arg3)
573
+ VALUE obj,arg1,arg2,arg3;
574
+ {
575
+ GLshort nx;
576
+ GLshort ny;
577
+ GLshort nz;
578
+ nx = (GLshort)NUM2INT(arg1);
579
+ ny = (GLshort)NUM2INT(arg2);
580
+ nz = (GLshort)NUM2INT(arg3);
581
+ glNormal3s(nx,ny,nz);
582
+ return Qnil;
583
+ }
584
+
585
+ static VALUE
586
+ gl_RasterPos2d(obj,arg1,arg2)
587
+ VALUE obj,arg1,arg2;
588
+ {
589
+ GLdouble x;
590
+ GLdouble y;
591
+ x = (GLdouble)NUM2DBL(arg1);
592
+ y = (GLdouble)NUM2DBL(arg2);
593
+ glRasterPos2d(x,y);
594
+ return Qnil;
595
+ }
596
+
597
+ static VALUE
598
+ gl_RasterPos2f(obj,arg1,arg2)
599
+ VALUE obj,arg1,arg2;
600
+ {
601
+ GLfloat x;
602
+ GLfloat y;
603
+ x = (GLfloat)NUM2DBL(arg1);
604
+ y = (GLfloat)NUM2DBL(arg2);
605
+ glRasterPos2f(x,y);
606
+ return Qnil;
607
+ }
608
+
609
+ static VALUE
610
+ gl_RasterPos2i(obj,arg1,arg2)
611
+ VALUE obj,arg1,arg2;
612
+ {
613
+ GLint x;
614
+ GLint y;
615
+ x = (GLint)NUM2INT(arg1);
616
+ y = (GLint)NUM2INT(arg2);
617
+ glRasterPos2i(x,y);
618
+ return Qnil;
619
+ }
620
+
621
+ static VALUE
622
+ gl_RasterPos2s(obj,arg1,arg2)
623
+ VALUE obj,arg1,arg2;
624
+ {
625
+ GLshort x;
626
+ GLshort y;
627
+ x = (GLshort)NUM2INT(arg1);
628
+ y = (GLshort)NUM2INT(arg2);
629
+ glRasterPos2s(x,y);
630
+ return Qnil;
631
+ }
632
+
633
+ static VALUE
634
+ gl_RasterPos3d(obj,arg1,arg2,arg3)
635
+ VALUE obj,arg1,arg2,arg3;
636
+ {
637
+ GLdouble x;
638
+ GLdouble y;
639
+ GLdouble z;
640
+ x = (GLdouble)NUM2DBL(arg1);
641
+ y = (GLdouble)NUM2DBL(arg2);
642
+ z = (GLdouble)NUM2DBL(arg3);
643
+ glRasterPos3d(x,y,z);
644
+ return Qnil;
645
+ }
646
+
647
+ static VALUE
648
+ gl_RasterPos3f(obj,arg1,arg2,arg3)
649
+ VALUE obj,arg1,arg2,arg3;
650
+ {
651
+ GLfloat x;
652
+ GLfloat y;
653
+ GLfloat z;
654
+ x = (GLfloat)NUM2DBL(arg1);
655
+ y = (GLfloat)NUM2DBL(arg2);
656
+ z = (GLfloat)NUM2DBL(arg3);
657
+ glRasterPos3f(x,y,z);
658
+ return Qnil;
659
+ }
660
+
661
+ static VALUE
662
+ gl_RasterPos3i(obj,arg1,arg2,arg3)
663
+ VALUE obj,arg1,arg2,arg3;
664
+ {
665
+ GLint x;
666
+ GLint y;
667
+ GLint z;
668
+ x = (GLint)NUM2INT(arg1);
669
+ y = (GLint)NUM2INT(arg2);
670
+ z = (GLint)NUM2INT(arg3);
671
+ glRasterPos3i(x,y,z);
672
+ return Qnil;
673
+ }
674
+
675
+ static VALUE
676
+ gl_RasterPos3s(obj,arg1,arg2,arg3)
677
+ VALUE obj,arg1,arg2,arg3;
678
+ {
679
+ GLshort x;
680
+ GLshort y;
681
+ GLshort z;
682
+ x = (GLshort)NUM2INT(arg1);
683
+ y = (GLshort)NUM2INT(arg2);
684
+ z = (GLshort)NUM2INT(arg3);
685
+ glRasterPos3s(x,y,z);
686
+ return Qnil;
687
+ }
688
+
689
+ static VALUE
690
+ gl_RasterPos4d(obj,arg1,arg2,arg3,arg4)
691
+ VALUE obj,arg1,arg2,arg3,arg4;
692
+ {
693
+ GLdouble x;
694
+ GLdouble y;
695
+ GLdouble z;
696
+ GLdouble w;
697
+ x = (GLdouble)NUM2DBL(arg1);
698
+ y = (GLdouble)NUM2DBL(arg2);
699
+ z = (GLdouble)NUM2DBL(arg3);
700
+ w = (GLdouble)NUM2DBL(arg4);
701
+ glRasterPos4d(x,y,z,w);
702
+ return Qnil;
703
+ }
704
+
705
+ static VALUE
706
+ gl_RasterPos4f(obj,arg1,arg2,arg3,arg4)
707
+ VALUE obj,arg1,arg2,arg3,arg4;
708
+ {
709
+ GLfloat x;
710
+ GLfloat y;
711
+ GLfloat z;
712
+ GLfloat w;
713
+ x = (GLfloat)NUM2DBL(arg1);
714
+ y = (GLfloat)NUM2DBL(arg2);
715
+ z = (GLfloat)NUM2DBL(arg3);
716
+ w = (GLfloat)NUM2DBL(arg4);
717
+ glRasterPos4f(x,y,z,w);
718
+ return Qnil;
719
+ }
720
+
721
+ static VALUE
722
+ gl_RasterPos4i(obj,arg1,arg2,arg3,arg4)
723
+ VALUE obj,arg1,arg2,arg3,arg4;
724
+ {
725
+ GLint x;
726
+ GLint y;
727
+ GLint z;
728
+ GLint w;
729
+ x = (GLint)NUM2INT(arg1);
730
+ y = (GLint)NUM2INT(arg2);
731
+ z = (GLint)NUM2INT(arg3);
732
+ w = (GLint)NUM2INT(arg4);
733
+ glRasterPos4i(x,y,z,w);
734
+ return Qnil;
735
+ }
736
+
737
+ static VALUE
738
+ gl_RasterPos4s(obj,arg1,arg2,arg3,arg4)
739
+ VALUE obj,arg1,arg2,arg3,arg4;
740
+ {
741
+ GLshort x;
742
+ GLshort y;
743
+ GLshort z;
744
+ GLshort w;
745
+ x = (GLshort)NUM2INT(arg1);
746
+ y = (GLshort)NUM2INT(arg2);
747
+ z = (GLshort)NUM2INT(arg3);
748
+ w = (GLshort)NUM2INT(arg4);
749
+ glRasterPos4s(x,y,z,w);
750
+ return Qnil;
751
+ }
752
+
753
+ static VALUE
754
+ gl_Rectd(obj,arg1,arg2,arg3,arg4)
755
+ VALUE obj,arg1,arg2,arg3,arg4;
756
+ {
757
+ GLdouble x1;
758
+ GLdouble y1;
759
+ GLdouble x2;
760
+ GLdouble y2;
761
+ x1 = (GLdouble)NUM2DBL(arg1);
762
+ y1 = (GLdouble)NUM2DBL(arg2);
763
+ x2 = (GLdouble)NUM2DBL(arg3);
764
+ y2 = (GLdouble)NUM2DBL(arg4);
765
+ glRectd(x1,y1,x2,y2);
766
+ return Qnil;
767
+ }
768
+
769
+ static VALUE
770
+ gl_Rectf(obj,arg1,arg2,arg3,arg4)
771
+ VALUE obj,arg1,arg2,arg3,arg4;
772
+ {
773
+ GLfloat x1;
774
+ GLfloat y1;
775
+ GLfloat x2;
776
+ GLfloat y2;
777
+ x1 = (GLfloat)NUM2DBL(arg1);
778
+ y1 = (GLfloat)NUM2DBL(arg2);
779
+ x2 = (GLfloat)NUM2DBL(arg3);
780
+ y2 = (GLfloat)NUM2DBL(arg4);
781
+ glRectf(x1,y1,x2,y2);
782
+ return Qnil;
783
+ }
784
+
785
+ static VALUE
786
+ gl_Recti(obj,arg1,arg2,arg3,arg4)
787
+ VALUE obj,arg1,arg2,arg3,arg4;
788
+ {
789
+ GLint x1;
790
+ GLint y1;
791
+ GLint x2;
792
+ GLint y2;
793
+ x1 = (GLint)NUM2INT(arg1);
794
+ y1 = (GLint)NUM2INT(arg2);
795
+ x2 = (GLint)NUM2INT(arg3);
796
+ y2 = (GLint)NUM2INT(arg4);
797
+ glRecti(x1,y1,x2,y2);
798
+ return Qnil;
799
+ }
800
+
801
+ static VALUE
802
+ gl_Rects(obj,arg1,arg2,arg3,arg4)
803
+ VALUE obj,arg1,arg2,arg3,arg4;
804
+ {
805
+ GLshort x1;
806
+ GLshort y1;
807
+ GLshort x2;
808
+ GLshort y2;
809
+ x1 = (GLshort)NUM2INT(arg1);
810
+ y1 = (GLshort)NUM2INT(arg2);
811
+ x2 = (GLshort)NUM2INT(arg3);
812
+ y2 = (GLshort)NUM2INT(arg4);
813
+ glRects(x1,y1,x2,y2);
814
+ return Qnil;
815
+ }
816
+
817
+ static VALUE
818
+ gl_TexCoord1d(obj,arg1)
819
+ VALUE obj,arg1;
820
+ {
821
+ GLdouble s;
822
+ s = (GLdouble)NUM2DBL(arg1);
823
+ glTexCoord1d(s);
824
+ return Qnil;
825
+ }
826
+
827
+ static VALUE
828
+ gl_TexCoord1f(obj,arg1)
829
+ VALUE obj,arg1;
830
+ {
831
+ GLfloat s;
832
+ s = (GLfloat)NUM2DBL(arg1);
833
+ glTexCoord1f(s);
834
+ return Qnil;
835
+ }
836
+
837
+ static VALUE
838
+ gl_TexCoord1i(obj,arg1)
839
+ VALUE obj,arg1;
840
+ {
841
+ GLint s;
842
+ s = (GLint)NUM2INT(arg1);
843
+ glTexCoord1i(s);
844
+ return Qnil;
845
+ }
846
+
847
+ static VALUE
848
+ gl_TexCoord1s(obj,arg1)
849
+ VALUE obj,arg1;
850
+ {
851
+ GLshort s;
852
+ s = (GLshort)NUM2INT(arg1);
853
+ glTexCoord1s(s);
854
+ return Qnil;
855
+ }
856
+
857
+ static VALUE
858
+ gl_TexCoord2d(obj,arg1,arg2)
859
+ VALUE obj,arg1,arg2;
860
+ {
861
+ GLdouble s;
862
+ GLdouble t;
863
+ s = (GLdouble)NUM2DBL(arg1);
864
+ t = (GLdouble)NUM2DBL(arg2);
865
+ glTexCoord2d(s,t);
866
+ return Qnil;
867
+ }
868
+
869
+ static VALUE
870
+ gl_TexCoord2f(obj,arg1,arg2)
871
+ VALUE obj,arg1,arg2;
872
+ {
873
+ GLfloat s;
874
+ GLfloat t;
875
+ s = (GLfloat)NUM2DBL(arg1);
876
+ t = (GLfloat)NUM2DBL(arg2);
877
+ glTexCoord2f(s,t);
878
+ return Qnil;
879
+ }
880
+
881
+ static VALUE
882
+ gl_TexCoord2i(obj,arg1,arg2)
883
+ VALUE obj,arg1,arg2;
884
+ {
885
+ GLint s;
886
+ GLint t;
887
+ s = (GLint)NUM2INT(arg1);
888
+ t = (GLint)NUM2INT(arg2);
889
+ glTexCoord2i(s,t);
890
+ return Qnil;
891
+ }
892
+
893
+ static VALUE
894
+ gl_TexCoord2s(obj,arg1,arg2)
895
+ VALUE obj,arg1,arg2;
896
+ {
897
+ GLshort s;
898
+ GLshort t;
899
+ s = (GLshort)NUM2INT(arg1);
900
+ t = (GLshort)NUM2INT(arg2);
901
+ glTexCoord2s(s,t);
902
+ return Qnil;
903
+ }
904
+
905
+ static VALUE
906
+ gl_TexCoord3d(obj,arg1,arg2,arg3)
907
+ VALUE obj,arg1,arg2,arg3;
908
+ {
909
+ GLdouble s;
910
+ GLdouble t;
911
+ GLdouble r;
912
+ s = (GLdouble)NUM2DBL(arg1);
913
+ t = (GLdouble)NUM2DBL(arg2);
914
+ r = (GLdouble)NUM2DBL(arg3);
915
+ glTexCoord3d(s,t,r);
916
+ return Qnil;
917
+ }
918
+
919
+ static VALUE
920
+ gl_TexCoord3f(obj,arg1,arg2,arg3)
921
+ VALUE obj,arg1,arg2,arg3;
922
+ {
923
+ GLfloat s;
924
+ GLfloat t;
925
+ GLfloat r;
926
+ s = (GLfloat)NUM2DBL(arg1);
927
+ t = (GLfloat)NUM2DBL(arg2);
928
+ r = (GLfloat)NUM2DBL(arg3);
929
+ glTexCoord3f(s,t,r);
930
+ return Qnil;
931
+ }
932
+
933
+ static VALUE
934
+ gl_TexCoord3i(obj,arg1,arg2,arg3)
935
+ VALUE obj,arg1,arg2,arg3;
936
+ {
937
+ GLint s;
938
+ GLint t;
939
+ GLint r;
940
+ s = (GLint)NUM2INT(arg1);
941
+ t = (GLint)NUM2INT(arg2);
942
+ r = (GLint)NUM2INT(arg3);
943
+ glTexCoord3i(s,t,r);
944
+ return Qnil;
945
+ }
946
+
947
+ static VALUE
948
+ gl_TexCoord3s(obj,arg1,arg2,arg3)
949
+ VALUE obj,arg1,arg2,arg3;
950
+ {
951
+ GLshort s;
952
+ GLshort t;
953
+ GLshort r;
954
+ s = (GLshort)NUM2INT(arg1);
955
+ t = (GLshort)NUM2INT(arg2);
956
+ r = (GLshort)NUM2INT(arg3);
957
+ glTexCoord3s(s,t,r);
958
+ return Qnil;
959
+ }
960
+
961
+ static VALUE
962
+ gl_TexCoord4d(obj,arg1,arg2,arg3,arg4)
963
+ VALUE obj,arg1,arg2,arg3,arg4;
964
+ {
965
+ GLdouble s;
966
+ GLdouble t;
967
+ GLdouble r;
968
+ GLdouble q;
969
+ s = (GLdouble)NUM2DBL(arg1);
970
+ t = (GLdouble)NUM2DBL(arg2);
971
+ r = (GLdouble)NUM2DBL(arg3);
972
+ q = (GLdouble)NUM2DBL(arg4);
973
+ glTexCoord4d(s,t,r,q);
974
+ return Qnil;
975
+ }
976
+
977
+ static VALUE
978
+ gl_TexCoord4f(obj,arg1,arg2,arg3,arg4)
979
+ VALUE obj,arg1,arg2,arg3,arg4;
980
+ {
981
+ GLfloat s;
982
+ GLfloat t;
983
+ GLfloat r;
984
+ GLfloat q;
985
+ s = (GLfloat)NUM2DBL(arg1);
986
+ t = (GLfloat)NUM2DBL(arg2);
987
+ r = (GLfloat)NUM2DBL(arg3);
988
+ q = (GLfloat)NUM2DBL(arg4);
989
+ glTexCoord4f(s,t,r,q);
990
+ return Qnil;
991
+ }
992
+
993
+ static VALUE
994
+ gl_TexCoord4i(obj,arg1,arg2,arg3,arg4)
995
+ VALUE obj,arg1,arg2,arg3,arg4;
996
+ {
997
+ GLint s;
998
+ GLint t;
999
+ GLint r;
1000
+ GLint q;
1001
+ s = (GLint)NUM2INT(arg1);
1002
+ t = (GLint)NUM2INT(arg2);
1003
+ r = (GLint)NUM2INT(arg3);
1004
+ q = (GLint)NUM2INT(arg4);
1005
+ glTexCoord4i(s,t,r,q);
1006
+ return Qnil;
1007
+ }
1008
+
1009
+ static VALUE
1010
+ gl_TexCoord4s(obj,arg1,arg2,arg3,arg4)
1011
+ VALUE obj,arg1,arg2,arg3,arg4;
1012
+ {
1013
+ GLshort s;
1014
+ GLshort t;
1015
+ GLshort r;
1016
+ GLshort q;
1017
+ s = (GLshort)NUM2INT(arg1);
1018
+ t = (GLshort)NUM2INT(arg2);
1019
+ r = (GLshort)NUM2INT(arg3);
1020
+ q = (GLshort)NUM2INT(arg4);
1021
+ glTexCoord4s(s,t,r,q);
1022
+ return Qnil;
1023
+ }
1024
+
1025
+ static VALUE
1026
+ gl_Vertex2d(obj,arg1,arg2)
1027
+ VALUE obj,arg1,arg2;
1028
+ {
1029
+ GLdouble x;
1030
+ GLdouble y;
1031
+ x = (GLdouble)NUM2DBL(arg1);
1032
+ y = (GLdouble)NUM2DBL(arg2);
1033
+ glVertex2d(x,y);
1034
+ return Qnil;
1035
+ }
1036
+
1037
+ static VALUE
1038
+ gl_Vertex2f(obj,arg1,arg2)
1039
+ VALUE obj,arg1,arg2;
1040
+ {
1041
+ GLfloat x;
1042
+ GLfloat y;
1043
+ x = (GLfloat)NUM2DBL(arg1);
1044
+ y = (GLfloat)NUM2DBL(arg2);
1045
+ glVertex2f(x,y);
1046
+ return Qnil;
1047
+ }
1048
+
1049
+ static VALUE
1050
+ gl_Vertex2i(obj,arg1,arg2)
1051
+ VALUE obj,arg1,arg2;
1052
+ {
1053
+ GLint x;
1054
+ GLint y;
1055
+ x = (GLint)NUM2INT(arg1);
1056
+ y = (GLint)NUM2INT(arg2);
1057
+ glVertex2i(x,y);
1058
+ return Qnil;
1059
+ }
1060
+
1061
+ static VALUE
1062
+ gl_Vertex2s(obj,arg1,arg2)
1063
+ VALUE obj,arg1,arg2;
1064
+ {
1065
+ GLshort x;
1066
+ GLshort y;
1067
+ x = (GLshort)NUM2INT(arg1);
1068
+ y = (GLshort)NUM2INT(arg2);
1069
+ glVertex2s(x,y);
1070
+ return Qnil;
1071
+ }
1072
+
1073
+ static VALUE
1074
+ gl_Vertex3d(obj,arg1,arg2,arg3)
1075
+ VALUE obj,arg1,arg2,arg3;
1076
+ {
1077
+ GLdouble x;
1078
+ GLdouble y;
1079
+ GLdouble z;
1080
+ x = (GLdouble)NUM2DBL(arg1);
1081
+ y = (GLdouble)NUM2DBL(arg2);
1082
+ z = (GLdouble)NUM2DBL(arg3);
1083
+ glVertex3d(x,y,z);
1084
+ return Qnil;
1085
+ }
1086
+
1087
+ static VALUE
1088
+ gl_Vertex3f(obj,arg1,arg2,arg3)
1089
+ VALUE obj,arg1,arg2,arg3;
1090
+ {
1091
+ GLfloat x;
1092
+ GLfloat y;
1093
+ GLfloat z;
1094
+ x = (GLfloat)NUM2DBL(arg1);
1095
+ y = (GLfloat)NUM2DBL(arg2);
1096
+ z = (GLfloat)NUM2DBL(arg3);
1097
+ glVertex3f(x,y,z);
1098
+ return Qnil;
1099
+ }
1100
+
1101
+ static VALUE
1102
+ gl_Vertex3i(obj,arg1,arg2,arg3)
1103
+ VALUE obj,arg1,arg2,arg3;
1104
+ {
1105
+ GLint x;
1106
+ GLint y;
1107
+ GLint z;
1108
+ x = (GLint)NUM2INT(arg1);
1109
+ y = (GLint)NUM2INT(arg2);
1110
+ z = (GLint)NUM2INT(arg3);
1111
+ glVertex3i(x,y,z);
1112
+ return Qnil;
1113
+ }
1114
+
1115
+ static VALUE
1116
+ gl_Vertex3s(obj,arg1,arg2,arg3)
1117
+ VALUE obj,arg1,arg2,arg3;
1118
+ {
1119
+ GLshort x;
1120
+ GLshort y;
1121
+ GLshort z;
1122
+ x = (GLshort)NUM2INT(arg1);
1123
+ y = (GLshort)NUM2INT(arg2);
1124
+ z = (GLshort)NUM2INT(arg3);
1125
+ glVertex3s(x,y,z);
1126
+ return Qnil;
1127
+ }
1128
+
1129
+ static VALUE
1130
+ gl_Vertex4d(obj,arg1,arg2,arg3,arg4)
1131
+ VALUE obj,arg1,arg2,arg3,arg4;
1132
+ {
1133
+ GLdouble x;
1134
+ GLdouble y;
1135
+ GLdouble z;
1136
+ GLdouble w;
1137
+ x = (GLdouble)NUM2DBL(arg1);
1138
+ y = (GLdouble)NUM2DBL(arg2);
1139
+ z = (GLdouble)NUM2DBL(arg3);
1140
+ w = (GLdouble)NUM2DBL(arg4);
1141
+ glVertex4d(x,y,z,w);
1142
+ return Qnil;
1143
+ }
1144
+
1145
+ static VALUE
1146
+ gl_Vertex4f(obj,arg1,arg2,arg3,arg4)
1147
+ VALUE obj,arg1,arg2,arg3,arg4;
1148
+ {
1149
+ GLfloat x;
1150
+ GLfloat y;
1151
+ GLfloat z;
1152
+ GLfloat w;
1153
+ x = (GLfloat)NUM2DBL(arg1);
1154
+ y = (GLfloat)NUM2DBL(arg2);
1155
+ z = (GLfloat)NUM2DBL(arg3);
1156
+ w = (GLfloat)NUM2DBL(arg4);
1157
+ glVertex4f(x,y,z,w);
1158
+ return Qnil;
1159
+ }
1160
+
1161
+ static VALUE
1162
+ gl_Vertex4i(obj,arg1,arg2,arg3,arg4)
1163
+ VALUE obj,arg1,arg2,arg3,arg4;
1164
+ {
1165
+ GLint x;
1166
+ GLint y;
1167
+ GLint z;
1168
+ GLint w;
1169
+ x = (GLint)NUM2INT(arg1);
1170
+ y = (GLint)NUM2INT(arg2);
1171
+ z = (GLint)NUM2INT(arg3);
1172
+ w = (GLint)NUM2INT(arg4);
1173
+ glVertex4i(x,y,z,w);
1174
+ return Qnil;
1175
+ }
1176
+
1177
+ static VALUE
1178
+ gl_Vertex4s(obj,arg1,arg2,arg3,arg4)
1179
+ VALUE obj,arg1,arg2,arg3,arg4;
1180
+ {
1181
+ GLshort x;
1182
+ GLshort y;
1183
+ GLshort z;
1184
+ GLshort w;
1185
+ x = (GLshort)NUM2INT(arg1);
1186
+ y = (GLshort)NUM2INT(arg2);
1187
+ z = (GLshort)NUM2INT(arg3);
1188
+ w = (GLshort)NUM2INT(arg4);
1189
+ glVertex4s(x,y,z,w);
1190
+ return Qnil;
1191
+ }
1192
+
1193
+ static VALUE
1194
+ gl_ClipPlane(obj,arg1,arg2)
1195
+ VALUE obj,arg1,arg2;
1196
+ {
1197
+ GLenum plane;
1198
+ GLdouble equation[4];
1199
+ plane = (GLenum)NUM2INT(arg1);
1200
+ if (TYPE(arg2) == T_ARRAY)
1201
+ ary2cdbl(arg2, equation, 4);
1202
+ else
1203
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
1204
+ glClipPlane(plane,equation);
1205
+ return Qnil;
1206
+ }
1207
+
1208
+ static VALUE
1209
+ gl_ColorMaterial(obj,arg1,arg2)
1210
+ VALUE obj,arg1,arg2;
1211
+ {
1212
+ GLenum face;
1213
+ GLenum mode;
1214
+ face = (GLenum)NUM2INT(arg1);
1215
+ mode = (GLenum)NUM2INT(arg2);
1216
+ glColorMaterial(face,mode);
1217
+ return Qnil;
1218
+ }
1219
+
1220
+ static VALUE
1221
+ gl_CullFace(obj,arg1)
1222
+ VALUE obj,arg1;
1223
+ {
1224
+ GLenum mode;
1225
+ mode = (GLenum)NUM2INT(arg1);
1226
+ glCullFace(mode);
1227
+ return Qnil;
1228
+ }
1229
+
1230
+ static VALUE
1231
+ gl_Fogf(obj,arg1,arg2)
1232
+ VALUE obj,arg1,arg2;
1233
+ {
1234
+ GLenum pname;
1235
+ GLfloat param;
1236
+ pname = (GLenum)NUM2INT(arg1);
1237
+ param = (GLfloat)NUM2DBL(arg2);
1238
+ glFogf(pname,param);
1239
+ return Qnil;
1240
+ }
1241
+
1242
+ static VALUE
1243
+ gl_Fogfv(obj,arg1,arg2)
1244
+ VALUE obj,arg1,arg2;
1245
+ {
1246
+ GLenum pname;
1247
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1248
+ pname = (GLenum)NUM2INT(arg1);
1249
+ if (TYPE(arg2) != T_ARRAY)
1250
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1251
+ ary2cflt(arg2,params,4);
1252
+ glFogfv(pname,params);
1253
+ return Qnil;
1254
+ }
1255
+
1256
+ static VALUE
1257
+ gl_Fogi(obj,arg1,arg2)
1258
+ VALUE obj,arg1,arg2;
1259
+ {
1260
+ GLenum pname;
1261
+ GLint param;
1262
+ pname = (GLenum)NUM2INT(arg1);
1263
+ param = (GLint)NUM2INT(arg2);
1264
+ glFogi(pname,param);
1265
+ return Qnil;
1266
+ }
1267
+
1268
+ static VALUE
1269
+ gl_Fogiv(obj,arg1,arg2)
1270
+ VALUE obj,arg1,arg2;
1271
+ {
1272
+ GLenum pname;
1273
+ GLint params[4] = {0,0,0,0};
1274
+ pname = (GLenum)NUM2INT(arg1);
1275
+ if (TYPE(arg2) != T_ARRAY)
1276
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1277
+ ary2cint(arg2,params,4);
1278
+ glFogiv(pname,params);
1279
+ return Qnil;
1280
+ }
1281
+
1282
+ static VALUE
1283
+ gl_FrontFace(obj,arg1)
1284
+ VALUE obj,arg1;
1285
+ {
1286
+ GLenum mode;
1287
+ mode = (GLenum)NUM2INT(arg1);
1288
+ glFrontFace(mode);
1289
+ return Qnil;
1290
+ }
1291
+
1292
+ static VALUE
1293
+ gl_Hint(obj,arg1,arg2)
1294
+ VALUE obj,arg1,arg2;
1295
+ {
1296
+ GLenum target;
1297
+ GLenum mode;
1298
+ target = (GLenum)NUM2INT(arg1);
1299
+ mode = (GLenum)NUM2INT(arg2);
1300
+ glHint(target,mode);
1301
+ return Qnil;
1302
+ }
1303
+
1304
+ static VALUE
1305
+ gl_Lightf(obj,arg1,arg2,arg3)
1306
+ VALUE obj,arg1,arg2,arg3;
1307
+ {
1308
+ GLenum light;
1309
+ GLenum pname;
1310
+ GLfloat param;
1311
+ light = (GLenum)NUM2INT(arg1);
1312
+ pname = (GLenum)NUM2INT(arg2);
1313
+ param = (GLfloat)NUM2DBL(arg3);
1314
+ glLightf(light,pname,param);
1315
+ return Qnil;
1316
+ }
1317
+
1318
+ static VALUE
1319
+ gl_Lightfv(obj,arg1,arg2,arg3)
1320
+ VALUE obj,arg1,arg2,arg3;
1321
+ {
1322
+ GLenum light;
1323
+ GLenum pname;
1324
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1325
+ light = (GLenum)NUM2INT(arg1);
1326
+ pname = (GLenum)NUM2INT(arg2);
1327
+ if (TYPE(arg3) != T_ARRAY)
1328
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1329
+ ary2cflt(arg3,params,4);
1330
+ glLightfv(light,pname,params);
1331
+ return Qnil;
1332
+ }
1333
+
1334
+ static VALUE
1335
+ gl_Lighti(obj,arg1,arg2,arg3)
1336
+ VALUE obj,arg1,arg2,arg3;
1337
+ {
1338
+ GLenum light;
1339
+ GLenum pname;
1340
+ GLint param;
1341
+ light = (GLenum)NUM2INT(arg1);
1342
+ pname = (GLenum)NUM2INT(arg2);
1343
+ param = (GLint)NUM2INT(arg3);
1344
+ glLighti(light,pname,param);
1345
+ return Qnil;
1346
+ }
1347
+
1348
+ static VALUE
1349
+ gl_Lightiv(obj,arg1,arg2,arg3)
1350
+ VALUE obj,arg1,arg2,arg3;
1351
+ {
1352
+ GLenum light;
1353
+ GLenum pname;
1354
+ GLint params[4]={0,0,0,0};
1355
+ light = (GLenum)NUM2INT(arg1);
1356
+ pname = (GLenum)NUM2INT(arg2);
1357
+ if (TYPE(arg3) != T_ARRAY)
1358
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1359
+ ary2cint(arg3,params,4);
1360
+ glLightiv(light,pname,params);
1361
+ return Qnil;
1362
+ }
1363
+
1364
+ static VALUE
1365
+ gl_LightModelf(obj,arg1,arg2)
1366
+ VALUE obj,arg1,arg2;
1367
+ {
1368
+ GLenum pname;
1369
+ GLfloat param;
1370
+ pname = (GLenum)NUM2INT(arg1);
1371
+ param = (GLfloat)NUM2DBL(arg2);
1372
+ glLightModelf(pname,param);
1373
+ return Qnil;
1374
+ }
1375
+
1376
+ static VALUE
1377
+ gl_LightModelfv(obj,arg1,arg2)
1378
+ VALUE obj,arg1,arg2;
1379
+ {
1380
+ GLenum pname;
1381
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1382
+ pname = (GLenum)NUM2INT(arg1);
1383
+ if (TYPE(arg2) != T_ARRAY)
1384
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1385
+ ary2cflt(arg2,params,4);
1386
+ glLightModelfv(pname,params);
1387
+ return Qnil;
1388
+ }
1389
+
1390
+ static VALUE
1391
+ gl_LightModeli(obj,arg1,arg2)
1392
+ VALUE obj,arg1,arg2;
1393
+ {
1394
+ GLenum pname;
1395
+ GLint param;
1396
+ pname = (GLenum)NUM2INT(arg1);
1397
+ param = (GLint)NUM2INT(arg2);
1398
+ glLightModeli(pname,param);
1399
+ return Qnil;
1400
+ }
1401
+
1402
+ static VALUE
1403
+ gl_LightModeliv(obj,arg1,arg2)
1404
+ VALUE obj,arg1,arg2;
1405
+ {
1406
+ GLenum pname;
1407
+ GLint params[4] = {0,0,0,0};
1408
+ pname = (GLenum)NUM2INT(arg1);
1409
+ if (TYPE(arg2) != T_ARRAY)
1410
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1411
+ ary2cint(arg2,params,4);
1412
+ glLightModeliv(pname,params);
1413
+ return Qnil;
1414
+ }
1415
+
1416
+ static VALUE
1417
+ gl_LineStipple(obj,arg1,arg2)
1418
+ VALUE obj,arg1,arg2;
1419
+ {
1420
+ GLint factor;
1421
+ GLushort pattern;
1422
+ factor = (GLint)NUM2INT(arg1);
1423
+ pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF);
1424
+ glLineStipple(factor,pattern);
1425
+ return Qnil;
1426
+ }
1427
+
1428
+ static VALUE
1429
+ gl_LineWidth(obj,arg1)
1430
+ VALUE obj,arg1;
1431
+ {
1432
+ GLfloat width;
1433
+ width = (GLfloat)NUM2DBL(arg1);
1434
+ glLineWidth(width);
1435
+ return Qnil;
1436
+ }
1437
+
1438
+ static VALUE
1439
+ gl_Materialf(obj,arg1,arg2,arg3)
1440
+ VALUE obj,arg1,arg2,arg3;
1441
+ {
1442
+ GLenum face;
1443
+ GLenum pname;
1444
+ GLfloat param;
1445
+ face = (GLenum)NUM2INT(arg1);
1446
+ pname = (GLenum)NUM2INT(arg2);
1447
+ param = (GLfloat)NUM2DBL(arg3);
1448
+ glMaterialf(face,pname,param);
1449
+ return Qnil;
1450
+ }
1451
+
1452
+ static VALUE
1453
+ gl_Materialfv(obj,arg1,arg2,arg3)
1454
+ VALUE obj,arg1,arg2,arg3;
1455
+ {
1456
+ GLenum face;
1457
+ GLenum pname;
1458
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1459
+ face = (GLenum)NUM2INT(arg1);
1460
+ pname = (GLenum)NUM2INT(arg2);
1461
+ if (TYPE(arg3) != T_ARRAY)
1462
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg3));
1463
+ ary2cflt(arg3,params,4);
1464
+ glMaterialfv(face,pname,params);
1465
+ return Qnil;
1466
+ }
1467
+
1468
+ static VALUE
1469
+ gl_Materiali(obj,arg1,arg2,arg3)
1470
+ VALUE obj,arg1,arg2,arg3;
1471
+ {
1472
+ GLenum face;
1473
+ GLenum pname;
1474
+ GLint param;
1475
+ face = (GLenum)NUM2INT(arg1);
1476
+ pname = (GLenum)NUM2INT(arg2);
1477
+ param = (GLint)NUM2INT(arg3);
1478
+ glMateriali(face,pname,param);
1479
+ return Qnil;
1480
+ }
1481
+
1482
+ static VALUE
1483
+ gl_Materialiv(obj,arg1,arg2,arg3)
1484
+ VALUE obj,arg1,arg2,arg3;
1485
+ {
1486
+ GLenum face;
1487
+ GLenum pname;
1488
+ GLint params[4] = {0,0,0,0};
1489
+ face = (GLenum)NUM2INT(arg1);
1490
+ pname = (GLenum)NUM2INT(arg2);
1491
+ if (TYPE(arg3) != T_ARRAY)
1492
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg3));
1493
+ ary2cint(arg3,params,4);
1494
+ glMaterialiv(face,pname,params);
1495
+ return Qnil;
1496
+ }
1497
+
1498
+ static VALUE
1499
+ gl_PointSize(obj,arg1)
1500
+ VALUE obj,arg1;
1501
+ {
1502
+ GLfloat size;
1503
+ size = (GLfloat)NUM2DBL(arg1);
1504
+ glPointSize(size);
1505
+ return Qnil;
1506
+ }
1507
+
1508
+ static VALUE
1509
+ gl_PolygonMode(obj,arg1,arg2)
1510
+ VALUE obj,arg1,arg2;
1511
+ {
1512
+ GLenum face;
1513
+ GLenum mode;
1514
+ face = (GLenum)NUM2INT(arg1);
1515
+ mode = (GLenum)NUM2INT(arg2);
1516
+ glPolygonMode(face,mode);
1517
+ return Qnil;
1518
+ }
1519
+
1520
+ static VALUE
1521
+ gl_PolygonStipple(obj,arg1)
1522
+ VALUE obj,arg1;
1523
+ {
1524
+ GLubyte mask[128];
1525
+ RArray* ary;
1526
+ int i;
1527
+ memset(mask, 0x0, sizeof(GLubyte[128]));
1528
+ if (TYPE(arg1) == T_ARRAY) {
1529
+ ary = RARRAY(arg1);
1530
+ for(i = 0; i < ary->len && i < 128; i++)
1531
+ mask[i] = (GLubyte)NUM2INT(ary->ptr[i]);
1532
+ }
1533
+ else if (TYPE(arg1) == T_STRING) {
1534
+ if (RSTRING(arg1)->len < 128)
1535
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg1)->len);
1536
+ memcpy(mask, RSTRING(arg1)->ptr, 128);
1537
+ }
1538
+ else
1539
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
1540
+ glPolygonStipple(mask);
1541
+ return Qnil;
1542
+ }
1543
+
1544
+ static VALUE
1545
+ gl_Scissor(obj,arg1,arg2,arg3,arg4)
1546
+ VALUE obj,arg1,arg2,arg3,arg4;
1547
+ {
1548
+ GLint x;
1549
+ GLint y;
1550
+ GLsizei width;
1551
+ GLsizei height;
1552
+ x = (GLint)NUM2INT(arg1);
1553
+ y = (GLint)NUM2INT(arg2);
1554
+ width = (GLsizei)NUM2INT(arg3);
1555
+ height = (GLsizei)NUM2INT(arg4);
1556
+ glScissor(x,y,width,height);
1557
+ return Qnil;
1558
+ }
1559
+
1560
+ static VALUE
1561
+ gl_ShadeModel(obj,arg1)
1562
+ VALUE obj,arg1;
1563
+ {
1564
+ GLenum mode;
1565
+ mode = (GLenum)NUM2INT(arg1);
1566
+ glShadeModel(mode);
1567
+ return Qnil;
1568
+ }
1569
+
1570
+ static VALUE
1571
+ gl_TexParameterf(obj,arg1,arg2,arg3)
1572
+ VALUE obj,arg1,arg2,arg3;
1573
+ {
1574
+ GLenum target;
1575
+ GLenum pname;
1576
+ GLfloat param;
1577
+ target = (GLenum)NUM2INT(arg1);
1578
+ pname = (GLenum)NUM2INT(arg2);
1579
+ param = (GLfloat)NUM2DBL(arg3);
1580
+ glTexParameterf(target,pname,param);
1581
+ return Qnil;
1582
+ }
1583
+
1584
+ static VALUE
1585
+ gl_TexParameterfv(obj,arg1,arg2,arg3)
1586
+ VALUE obj,arg1,arg2,arg3;
1587
+ {
1588
+ GLenum target;
1589
+ GLenum pname;
1590
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1591
+ target = (GLenum)NUM2INT(arg1);
1592
+ pname = (GLenum)NUM2INT(arg2);
1593
+ if (TYPE(arg3) != T_ARRAY)
1594
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1595
+ ary2cflt(arg3,params,4);
1596
+ glTexParameterfv(target,pname,params);
1597
+ return Qnil;
1598
+ }
1599
+
1600
+ static VALUE
1601
+ gl_TexParameteri(obj,arg1,arg2,arg3)
1602
+ VALUE obj,arg1,arg2,arg3;
1603
+ {
1604
+ GLenum target;
1605
+ GLenum pname;
1606
+ GLint param;
1607
+ target = (GLenum)NUM2INT(arg1);
1608
+ pname = (GLenum)NUM2INT(arg2);
1609
+ param = (GLint)NUM2INT(arg3);
1610
+ glTexParameteri(target,pname,param);
1611
+ return Qnil;
1612
+ }
1613
+
1614
+ static VALUE
1615
+ gl_TexParameteriv(obj,arg1,arg2,arg3)
1616
+ VALUE obj,arg1,arg2,arg3;
1617
+ {
1618
+ GLenum target;
1619
+ GLenum pname;
1620
+ GLint params[4] = {0,0,0,0};
1621
+ target = (GLenum)NUM2INT(arg1);
1622
+ pname = (GLenum)NUM2INT(arg2);
1623
+ if (TYPE(arg3) != T_ARRAY)
1624
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1625
+ ary2cint(arg3,params,4);
1626
+ glTexParameteriv(target,pname,params);
1627
+ return Qnil;
1628
+ }
1629
+
1630
+ /* FIXME: spatna funkce ? */
1631
+ static VALUE
1632
+ gl_TexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
1633
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
1634
+ {
1635
+ GLenum target;
1636
+ GLint level;
1637
+ GLint components;
1638
+ GLsizei width;
1639
+ GLint border;
1640
+ GLenum format;
1641
+ GLenum type;
1642
+ const char *pixels;
1643
+ int size;
1644
+ int type_size;
1645
+ int format_size;
1646
+ target = (GLenum)NUM2INT(arg1);
1647
+ level = (GLint)NUM2INT(arg2);
1648
+ components = (GLint)NUM2INT(arg3);
1649
+ width = (GLsizei)NUM2INT(arg4);
1650
+ border = (GLint)NUM2INT(arg5);
1651
+ format = (GLenum)NUM2INT(arg6);
1652
+ type = (GLenum)NUM2INT(arg7);
1653
+ if (TYPE(arg8) == T_STRING) {
1654
+ type_size = gltype_size(type) / 8;
1655
+ format_size = glformat_size(format);
1656
+ if (type_size <= 0 || format_size == -1)
1657
+ return Qnil;
1658
+ size = type_size*format_size*width;
1659
+ if (RSTRING(arg8)->len < size)
1660
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len);
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;
1667
+ size = type_size*format_size*width;
1668
+ pixels = NULL;
1669
+ } else
1670
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg8));
1671
+ glTexImage1D(target,level,components,width,border,format,type,pixels);
1672
+ return Qnil;
1673
+ }
1674
+
1675
+ static VALUE
1676
+ gl_TexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
1677
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
1678
+ {
1679
+ GLenum target;
1680
+ GLint level;
1681
+ GLint components;
1682
+ GLsizei width;
1683
+ GLsizei height;
1684
+ GLint border;
1685
+ GLenum format;
1686
+ GLenum type;
1687
+ const char *pixels;
1688
+ int size;
1689
+ int type_size;
1690
+ int format_size;
1691
+ target = (GLenum)NUM2INT(arg1);
1692
+ level = (GLint)NUM2INT(arg2);
1693
+ components = (GLint)NUM2INT(arg3);
1694
+ width = (GLsizei)NUM2INT(arg4);
1695
+ height = (GLsizei)NUM2INT(arg5);
1696
+ border = (GLint)NUM2INT(arg6);
1697
+ format = (GLenum)NUM2INT(arg7);
1698
+ type = (GLenum)NUM2INT(arg8);
1699
+ if (TYPE(arg9) == T_STRING) {
1700
+ type_size = gltype_size(type) / 8;
1701
+ format_size = glformat_size(format);
1702
+ if (type_size <= 0 || format_size == -1)
1703
+ return Qnil;
1704
+ size = type_size*format_size*height*width;
1705
+ if (RSTRING(arg9)->len < size)
1706
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
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;
1713
+ size = type_size*format_size*height*width;
1714
+ pixels = NULL;
1715
+ } else
1716
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg9));
1717
+ glTexImage2D(target,level,components,width,height,border,format,type,pixels);
1718
+ return Qnil;
1719
+ }
1720
+
1721
+ static VALUE
1722
+ gl_TexEnvf(obj,arg1,arg2,arg3)
1723
+ VALUE obj,arg1,arg2,arg3;
1724
+ {
1725
+ GLenum target;
1726
+ GLenum pname;
1727
+ GLfloat param;
1728
+ target = (GLenum)NUM2INT(arg1);
1729
+ pname = (GLenum)NUM2INT(arg2);
1730
+ param = (GLfloat)NUM2DBL(arg3);
1731
+ glTexEnvf(target,pname,param);
1732
+ return Qnil;
1733
+ }
1734
+
1735
+ static VALUE
1736
+ gl_TexEnvfv(obj,arg1,arg2,arg3)
1737
+ VALUE obj,arg1,arg2,arg3;
1738
+ {
1739
+ GLenum target;
1740
+ GLenum pname;
1741
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1742
+ target = (GLenum)NUM2INT(arg1);
1743
+ pname = (GLenum)NUM2INT(arg2);
1744
+ if (TYPE(arg3) != T_ARRAY)
1745
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1746
+ ary2cflt(arg3,params,4);
1747
+ glTexEnvfv(target,pname,params);
1748
+ return Qnil;
1749
+ }
1750
+
1751
+ static VALUE
1752
+ gl_TexEnvi(obj,arg1,arg2,arg3)
1753
+ VALUE obj,arg1,arg2,arg3;
1754
+ {
1755
+ GLenum target;
1756
+ GLenum pname;
1757
+ GLint param;
1758
+ target = (GLenum)NUM2INT(arg1);
1759
+ pname = (GLenum)NUM2INT(arg2);
1760
+ param = (GLint)NUM2INT(arg3);
1761
+ glTexEnvi(target,pname,param);
1762
+ return Qnil;
1763
+ }
1764
+
1765
+ static VALUE
1766
+ gl_TexEnviv(obj,arg1,arg2,arg3)
1767
+ VALUE obj,arg1,arg2,arg3;
1768
+ {
1769
+ GLenum target;
1770
+ GLenum pname;
1771
+ GLint params[4] = {0,0,0,0};
1772
+ target = (GLenum)NUM2INT(arg1);
1773
+ pname = (GLenum)NUM2INT(arg2);
1774
+ if (TYPE(arg3) != T_ARRAY)
1775
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1776
+ ary2cint(arg3,params,4);
1777
+ glTexEnviv(target,pname,params);
1778
+ return Qnil;
1779
+ }
1780
+
1781
+ static VALUE
1782
+ gl_TexGend(obj,arg1,arg2,arg3)
1783
+ VALUE obj,arg1,arg2,arg3;
1784
+ {
1785
+ GLenum coord;
1786
+ GLenum pname;
1787
+ GLdouble param;
1788
+ coord = (GLenum)NUM2INT(arg1);
1789
+ pname = (GLenum)NUM2INT(arg2);
1790
+ param = (GLdouble)NUM2DBL(arg3);
1791
+ glTexGend(coord,pname,param);
1792
+ return Qnil;
1793
+ }
1794
+
1795
+ static VALUE
1796
+ gl_TexGendv(obj,arg1,arg2,arg3)
1797
+ VALUE obj,arg1,arg2,arg3;
1798
+ {
1799
+ GLenum coord;
1800
+ GLenum pname;
1801
+ GLdouble params[4] = {0.0,0.0,0.0,0.0};
1802
+ coord = (GLenum)NUM2INT(arg1);
1803
+ pname = (GLenum)NUM2INT(arg2);
1804
+ if (TYPE(arg3) != T_ARRAY)
1805
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1806
+ ary2cdbl(arg3,params,4);
1807
+ glTexGendv(coord,pname,params);
1808
+ return Qnil;
1809
+ }
1810
+
1811
+
1812
+ static VALUE
1813
+ gl_TexGenf(obj,arg1,arg2,arg3)
1814
+ VALUE obj,arg1,arg2,arg3;
1815
+ {
1816
+ GLenum coord;
1817
+ GLenum pname;
1818
+ GLfloat param;
1819
+ coord = (GLenum)NUM2INT(arg1);
1820
+ pname = (GLenum)NUM2INT(arg2);
1821
+ param = (GLfloat)NUM2DBL(arg3);
1822
+ glTexGenf(coord,pname,param);
1823
+ return Qnil;
1824
+ }
1825
+
1826
+ static VALUE
1827
+ gl_TexGenfv(obj,arg1,arg2,arg3)
1828
+ VALUE obj,arg1,arg2,arg3;
1829
+ {
1830
+ GLenum coord;
1831
+ GLenum pname;
1832
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1833
+ coord = (GLenum)NUM2INT(arg1);
1834
+ pname = (GLenum)NUM2INT(arg2);
1835
+ if (TYPE(arg3) != T_ARRAY)
1836
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1837
+ ary2cflt(arg3,params,4);
1838
+ glTexGenfv(coord,pname,params);
1839
+ return Qnil;
1840
+ }
1841
+
1842
+ static VALUE
1843
+ gl_TexGeni(obj,arg1,arg2,arg3)
1844
+ VALUE obj,arg1,arg2,arg3;
1845
+ {
1846
+ GLenum coord;
1847
+ GLenum pname;
1848
+ GLint param;
1849
+ coord = (GLenum)NUM2INT(arg1);
1850
+ pname = (GLenum)NUM2INT(arg2);
1851
+ param = (GLint)NUM2INT(arg3);
1852
+ glTexGeni(coord,pname,param);
1853
+ return Qnil;
1854
+ }
1855
+
1856
+ static VALUE
1857
+ gl_TexGeniv(obj,arg1,arg2,arg3)
1858
+ VALUE obj,arg1,arg2,arg3;
1859
+ {
1860
+ GLenum coord;
1861
+ GLenum pname;
1862
+ GLint params[4] = {0,0,0,0};
1863
+ coord = (GLenum)NUM2INT(arg1);
1864
+ pname = (GLenum)NUM2INT(arg2);
1865
+ if (TYPE(arg3) != T_ARRAY)
1866
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1867
+ ary2cint(arg3,params,4);
1868
+ glTexGeniv(coord,pname,params);
1869
+ return Qnil;
1870
+ }
1871
+
1872
+ #define DEFAULT_BUFFER 512
1873
+ static VALUE g_current_feed_buffer;
1874
+ static VALUE
1875
+ gl_FeedbackBuffer(argc, argv, obj)
1876
+ int argc;
1877
+ VALUE* argv;
1878
+ VALUE obj;
1879
+ {
1880
+ GLsizei size;
1881
+ GLenum type;
1882
+ if (argc == 0) {
1883
+ size = DEFAULT_BUFFER;
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
+ }
1893
+ g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
1894
+ rb_str_freeze(g_current_feed_buffer);
1895
+ glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr);
1896
+ return g_current_feed_buffer;
1897
+ }
1898
+
1899
+ static VALUE g_current_sel_buffer;
1900
+ static VALUE
1901
+ gl_SelectBuffer(argc,argv,obj)
1902
+ int argc;
1903
+ VALUE *argv;
1904
+ VALUE obj;
1905
+ {
1906
+ VALUE args;
1907
+ GLsizei size;
1908
+ size = DEFAULT_BUFFER;
1909
+ rb_scan_args(argc, argv, "01", &args);
1910
+ if (args != Qnil)
1911
+ size = (GLsizei)NUM2INT(args);
1912
+ g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
1913
+ rb_str_freeze(g_current_sel_buffer);
1914
+ glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr);
1915
+ return g_current_sel_buffer;
1916
+ }
1917
+
1918
+ static VALUE
1919
+ gl_RenderMode(obj,arg1)
1920
+ VALUE obj,arg1;
1921
+ {
1922
+ GLenum mode;
1923
+ GLint ret;
1924
+ mode = (GLenum)NUM2INT(arg1);
1925
+ ret = glRenderMode(mode);
1926
+ return INT2NUM(ret);
1927
+ }
1928
+
1929
+ static VALUE
1930
+ gl_InitNames(obj)
1931
+ VALUE obj;
1932
+ {
1933
+ glInitNames();
1934
+ return Qnil;
1935
+ }
1936
+
1937
+ static VALUE
1938
+ gl_LoadName(obj,arg1)
1939
+ VALUE obj,arg1;
1940
+ {
1941
+ GLuint name;
1942
+ name = (GLuint)NUM2INT(arg1);
1943
+ glLoadName(name);
1944
+ return Qnil;
1945
+ }
1946
+
1947
+ static VALUE
1948
+ gl_PassThrough(obj,arg1)
1949
+ VALUE obj,arg1;
1950
+ {
1951
+ GLfloat token;
1952
+ token = (GLfloat)NUM2DBL(arg1);
1953
+ glPassThrough(token);
1954
+ return Qnil;
1955
+ }
1956
+
1957
+ static VALUE
1958
+ gl_PopName(obj)
1959
+ VALUE obj;
1960
+ {
1961
+ glPopName();
1962
+ return Qnil;
1963
+ }
1964
+
1965
+ static VALUE
1966
+ gl_PushName(obj,arg1)
1967
+ VALUE obj,arg1;
1968
+ {
1969
+ GLuint name;
1970
+ name = (GLuint)NUM2INT(arg1);
1971
+ glPushName(name);
1972
+ return Qnil;
1973
+ }
1974
+
1975
+ static VALUE
1976
+ gl_DrawBuffer(obj,arg1)
1977
+ VALUE obj,arg1;
1978
+ {
1979
+ GLenum mode;
1980
+ mode = (GLenum)NUM2INT(arg1);
1981
+ glDrawBuffer(mode);
1982
+ return Qnil;
1983
+ }
1984
+
1985
+ static VALUE
1986
+ gl_Clear(obj,arg1)
1987
+ VALUE obj,arg1;
1988
+ {
1989
+ GLbitfield mask;
1990
+ mask = (GLbitfield)NUM2INT(arg1);
1991
+ glClear(mask);
1992
+ return Qnil;
1993
+ }
1994
+
1995
+ static VALUE
1996
+ gl_ClearAccum(obj,arg1,arg2,arg3,arg4)
1997
+ VALUE obj,arg1,arg2,arg3,arg4;
1998
+ {
1999
+ GLfloat red;
2000
+ GLfloat green;
2001
+ GLfloat blue;
2002
+ GLfloat alpha;
2003
+ red = (GLfloat)NUM2DBL(arg1);
2004
+ green = (GLfloat)NUM2DBL(arg2);
2005
+ blue = (GLfloat)NUM2DBL(arg3);
2006
+ alpha = (GLfloat)NUM2DBL(arg4);
2007
+ glClearAccum(red,green,blue,alpha);
2008
+ return Qnil;
2009
+ }
2010
+
2011
+ static VALUE
2012
+ gl_ClearIndex(obj,arg1)
2013
+ VALUE obj,arg1;
2014
+ {
2015
+ GLfloat c;
2016
+ c = (GLfloat)NUM2DBL(arg1);
2017
+ glClearIndex(c);
2018
+ return Qnil;
2019
+ }
2020
+
2021
+ static VALUE
2022
+ gl_ClearColor(obj,arg1,arg2,arg3,arg4)
2023
+ VALUE obj,arg1,arg2,arg3,arg4;
2024
+ {
2025
+ GLclampf red;
2026
+ GLclampf green;
2027
+ GLclampf blue;
2028
+ GLclampf alpha;
2029
+ red = (GLclampf)NUM2DBL(arg1);
2030
+ green = (GLclampf)NUM2DBL(arg2);
2031
+ blue = (GLclampf)NUM2DBL(arg3);
2032
+ alpha = (GLclampf)NUM2DBL(arg4);
2033
+ glClearColor(red,green,blue,alpha);
2034
+ return Qnil;
2035
+ }
2036
+
2037
+ static VALUE
2038
+ gl_ClearStencil(obj,arg1)
2039
+ VALUE obj,arg1;
2040
+ {
2041
+ GLint s;
2042
+ s = (GLint)NUM2INT(arg1);
2043
+ glClearStencil(s);
2044
+ return Qnil;
2045
+ }
2046
+
2047
+ static VALUE
2048
+ gl_ClearDepth(obj,arg1)
2049
+ VALUE obj,arg1;
2050
+ {
2051
+ GLclampd depth;
2052
+ depth = (GLclampd)NUM2DBL(arg1);
2053
+ glClearDepth(depth);
2054
+ return Qnil;
2055
+ }
2056
+
2057
+ static VALUE
2058
+ gl_StencilMask(obj,arg1)
2059
+ VALUE obj,arg1;
2060
+ {
2061
+ GLuint mask;
2062
+ mask = (GLuint)NUM2INT(arg1);
2063
+ glStencilMask(mask);
2064
+ return Qnil;
2065
+ }
2066
+
2067
+ static VALUE
2068
+ gl_ColorMask(obj,arg1,arg2,arg3,arg4)
2069
+ VALUE obj,arg1,arg2,arg3,arg4;
2070
+ {
2071
+ GLboolean red;
2072
+ GLboolean green;
2073
+ GLboolean blue;
2074
+ GLboolean alpha;
2075
+ red = (GLboolean)NUM2INT(arg1);
2076
+ green = (GLboolean)NUM2INT(arg2);
2077
+ blue = (GLboolean)NUM2INT(arg3);
2078
+ alpha = (GLboolean)NUM2INT(arg4);
2079
+ glColorMask(red,green,blue,alpha);
2080
+ return Qnil;
2081
+ }
2082
+
2083
+ static VALUE
2084
+ gl_DepthMask(obj,arg1)
2085
+ VALUE obj,arg1;
2086
+ {
2087
+ GLboolean flag;
2088
+ flag = (GLboolean)NUM2INT(arg1);
2089
+ glDepthMask(flag);
2090
+ return Qnil;
2091
+ }
2092
+
2093
+ static VALUE
2094
+ gl_IndexMask(obj,arg1)
2095
+ VALUE obj,arg1;
2096
+ {
2097
+ GLuint mask;
2098
+ mask = (GLuint)NUM2INT(arg1);
2099
+ glIndexMask(mask);
2100
+ return Qnil;
2101
+ }
2102
+
2103
+ static VALUE
2104
+ gl_Accum(obj,arg1,arg2)
2105
+ VALUE obj,arg1,arg2;
2106
+ {
2107
+ GLenum op;
2108
+ GLfloat value;
2109
+ op = (GLenum)NUM2INT(arg1);
2110
+ value = (GLfloat)NUM2DBL(arg2);
2111
+ glAccum(op,value);
2112
+ return Qnil;
2113
+ }
2114
+
2115
+ static VALUE
2116
+ gl_Disable(obj,arg1)
2117
+ VALUE obj,arg1;
2118
+ {
2119
+ GLenum cap;
2120
+ cap = (GLenum)NUM2INT(arg1);
2121
+ glDisable(cap);
2122
+ return Qnil;
2123
+ }
2124
+
2125
+ static VALUE
2126
+ gl_Enable(obj,arg1)
2127
+ VALUE obj,arg1;
2128
+ {
2129
+ GLenum cap;
2130
+ cap = (GLenum)NUM2INT(arg1);
2131
+ glEnable(cap);
2132
+ return Qnil;
2133
+ }
2134
+
2135
+ static VALUE
2136
+ gl_Finish(obj)
2137
+ VALUE obj;
2138
+ {
2139
+ glFinish();
2140
+ return Qnil;
2141
+ }
2142
+
2143
+ static VALUE
2144
+ gl_Flush(obj)
2145
+ VALUE obj;
2146
+ {
2147
+ glFlush();
2148
+ return Qnil;
2149
+ }
2150
+
2151
+ static VALUE
2152
+ gl_PopAttrib(obj)
2153
+ VALUE obj;
2154
+ {
2155
+ glPopAttrib();
2156
+ return Qnil;
2157
+ }
2158
+
2159
+ static VALUE
2160
+ gl_PushAttrib(obj,arg1)
2161
+ VALUE obj,arg1;
2162
+ {
2163
+ GLbitfield mask;
2164
+ mask = (GLbitfield)NUM2INT(arg1);
2165
+ glPushAttrib(mask);
2166
+ return Qnil;
2167
+ }
2168
+
2169
+ static VALUE
2170
+ gl_Map1d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2171
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2172
+ {
2173
+ GLenum target;
2174
+ GLdouble u1;
2175
+ GLdouble u2;
2176
+ GLint stride;
2177
+ GLint order;
2178
+ GLdouble *points;
2179
+
2180
+ VALUE work_ary;
2181
+
2182
+ target = (GLenum)NUM2INT(arg1);
2183
+ u1 = (GLdouble)NUM2DBL(arg2);
2184
+ u2 = (GLdouble)NUM2DBL(arg3);
2185
+ stride = (GLint)NUM2INT(arg4);
2186
+ order = (GLint)NUM2INT(arg5);
2187
+ points = ALLOC_N(GLdouble, order*stride);
2188
+ work_ary = rb_ary_new();
2189
+ mary2ary(arg6, work_ary);
2190
+ ary2cdbl(work_ary, points, order*stride);
2191
+ glMap1d(target, u1, u2, stride, order, points);
2192
+ xfree(points);
2193
+ return Qnil;
2194
+ }
2195
+
2196
+ static VALUE
2197
+ gl_Map1f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2198
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2199
+ {
2200
+ GLenum target;
2201
+ GLfloat u1;
2202
+ GLfloat u2;
2203
+ GLint stride;
2204
+ GLint order;
2205
+ GLfloat *points;
2206
+
2207
+ VALUE work_ary;
2208
+
2209
+ target = (GLenum)NUM2INT(arg1);
2210
+ u1 = (GLfloat)NUM2DBL(arg2);
2211
+ u2 = (GLfloat)NUM2DBL(arg3);
2212
+ stride = (GLint)NUM2INT(arg4);
2213
+ order = (GLint)NUM2INT(arg5);
2214
+ points = ALLOC_N(GLfloat, order*stride);
2215
+ work_ary = rb_ary_new();
2216
+ mary2ary(arg6, work_ary);
2217
+ ary2cflt(work_ary, points, order*stride);
2218
+ glMap1f(target, u1, u2, stride, order, points);
2219
+ xfree(points);
2220
+ return Qnil;
2221
+ }
2222
+
2223
+ static VALUE
2224
+ gl_Map2d(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
2225
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
2226
+ {
2227
+ GLenum target;
2228
+ GLdouble u1;
2229
+ GLdouble u2;
2230
+ GLint ustride;
2231
+ GLint uorder;
2232
+ GLdouble v1;
2233
+ GLdouble v2;
2234
+ GLint vstride;
2235
+ GLint vorder;
2236
+ GLdouble *points;
2237
+
2238
+ VALUE work_ary;
2239
+
2240
+ target = (GLenum)NUM2INT(arg1);
2241
+ u1 = (GLdouble)NUM2INT(arg2);
2242
+ u2 = (GLdouble)NUM2INT(arg3);
2243
+ ustride = (GLint)NUM2INT(arg4);
2244
+ uorder = (GLint)NUM2INT(arg5);
2245
+ v1 = (GLdouble)NUM2INT(arg6);
2246
+ v2 = (GLdouble)NUM2INT(arg7);
2247
+ vstride = (GLint)NUM2INT(arg8);
2248
+ vorder = (GLint)NUM2INT(arg9);
2249
+ points = ALLOC_N(GLdouble, MAX(ustride*uorder, vstride*vorder));
2250
+ work_ary = rb_ary_new();
2251
+ mary2ary(arg10, work_ary);
2252
+ ary2cdbl(arg10, points, MAX(ustride*uorder, vstride*vorder));
2253
+ glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
2254
+ xfree(points);
2255
+ return Qnil;
2256
+ }
2257
+
2258
+ static VALUE
2259
+ gl_Map2f(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
2260
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
2261
+ {
2262
+ GLenum target;
2263
+ GLfloat u1;
2264
+ GLfloat u2;
2265
+ GLint ustride;
2266
+ GLint uorder;
2267
+ GLfloat v1;
2268
+ GLfloat v2;
2269
+ GLint vstride;
2270
+ GLint vorder;
2271
+ GLfloat *points;
2272
+
2273
+ VALUE work_ary;
2274
+
2275
+ target = (GLenum)NUM2INT(arg1);
2276
+ u1 = (GLfloat)NUM2INT(arg2);
2277
+ u2 = (GLfloat)NUM2INT(arg3);
2278
+ ustride = (GLint)NUM2INT(arg4);
2279
+ uorder = (GLint)NUM2INT(arg5);
2280
+ v1 = (GLfloat)NUM2INT(arg6);
2281
+ v2 = (GLfloat)NUM2INT(arg7);
2282
+ vstride = (GLint)NUM2INT(arg8);
2283
+ vorder = (GLint)NUM2INT(arg9);
2284
+ points = ALLOC_N(GLfloat, MAX(ustride*uorder, vstride*vorder));
2285
+ work_ary = rb_ary_new();
2286
+ mary2ary(arg10, work_ary);
2287
+ ary2cflt(arg10, points, MAX(ustride*uorder, vstride*vorder));
2288
+ glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
2289
+ xfree(points);
2290
+ return Qnil;
2291
+ }
2292
+
2293
+ static VALUE
2294
+ gl_MapGrid1d(obj,arg1,arg2,arg3)
2295
+ VALUE obj,arg1,arg2,arg3;
2296
+ {
2297
+ GLint un;
2298
+ GLdouble u1;
2299
+ GLdouble u2;
2300
+ un = (GLint)NUM2INT(arg1);
2301
+ u1 = (GLdouble)NUM2DBL(arg2);
2302
+ u2 = (GLdouble)NUM2DBL(arg3);
2303
+ glMapGrid1d(un,u1,u2);
2304
+ return Qnil;
2305
+ }
2306
+
2307
+ static VALUE
2308
+ gl_MapGrid1f(obj,arg1,arg2,arg3)
2309
+ VALUE obj,arg1,arg2,arg3;
2310
+ {
2311
+ GLint un;
2312
+ GLfloat u1;
2313
+ GLfloat u2;
2314
+ un = (GLint)NUM2INT(arg1);
2315
+ u1 = (GLfloat)NUM2DBL(arg2);
2316
+ u2 = (GLfloat)NUM2DBL(arg3);
2317
+ glMapGrid1f(un,u1,u2);
2318
+ return Qnil;
2319
+ }
2320
+
2321
+ static VALUE
2322
+ gl_MapGrid2d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2323
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2324
+ {
2325
+ GLint un;
2326
+ GLdouble u1;
2327
+ GLdouble u2;
2328
+ GLint vn;
2329
+ GLdouble v1;
2330
+ GLdouble v2;
2331
+ un = (GLint)NUM2INT(arg1);
2332
+ u1 = (GLdouble)NUM2DBL(arg2);
2333
+ u2 = (GLdouble)NUM2DBL(arg3);
2334
+ vn = (GLint)NUM2INT(arg4);
2335
+ v1 = (GLdouble)NUM2DBL(arg5);
2336
+ v2 = (GLdouble)NUM2DBL(arg6);
2337
+ glMapGrid2d(un,u1,u2,vn,v1,v2);
2338
+ return Qnil;
2339
+ }
2340
+
2341
+ static VALUE
2342
+ gl_MapGrid2f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2343
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2344
+ {
2345
+ GLint un;
2346
+ GLfloat u1;
2347
+ GLfloat u2;
2348
+ GLint vn;
2349
+ GLfloat v1;
2350
+ GLfloat v2;
2351
+ un = (GLint)NUM2INT(arg1);
2352
+ u1 = (GLfloat)NUM2DBL(arg2);
2353
+ u2 = (GLfloat)NUM2DBL(arg3);
2354
+ vn = (GLint)NUM2INT(arg4);
2355
+ v1 = (GLfloat)NUM2DBL(arg5);
2356
+ v2 = (GLfloat)NUM2DBL(arg6);
2357
+ glMapGrid2f(un,u1,u2,vn,v1,v2);
2358
+ return Qnil;
2359
+ }
2360
+
2361
+ static VALUE
2362
+ gl_EvalCoord1d(obj,arg1)
2363
+ VALUE obj,arg1;
2364
+ {
2365
+ GLdouble u;
2366
+ u = (GLdouble)NUM2DBL(arg1);
2367
+ glEvalCoord1d(u);
2368
+ return Qnil;
2369
+ }
2370
+
2371
+ static VALUE
2372
+ gl_EvalCoord1dv(obj,arg1)
2373
+ VALUE obj,arg1;
2374
+ {
2375
+ GLdouble params[1] = {0.0};
2376
+ if (TYPE(arg1) != T_ARRAY)
2377
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2378
+ ary2cdbl(arg1,params,1);
2379
+ glEvalCoord1dv(params);
2380
+ return Qnil;
2381
+ }
2382
+
2383
+ static VALUE
2384
+ gl_EvalCoord1f(obj,arg1)
2385
+ VALUE obj,arg1;
2386
+ {
2387
+ GLfloat u;
2388
+ u = (GLfloat)NUM2DBL(arg1);
2389
+ glEvalCoord1f(u);
2390
+ return Qnil;
2391
+ }
2392
+
2393
+ static VALUE
2394
+ gl_EvalCoord1fv(obj,arg1)
2395
+ VALUE obj,arg1;
2396
+ {
2397
+ GLfloat params[1] = {0.0};
2398
+ if (TYPE(arg1) != T_ARRAY)
2399
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2400
+ ary2cflt(arg1,params,1);
2401
+ glEvalCoord1fv(params);
2402
+ return Qnil;
2403
+ }
2404
+
2405
+ static VALUE
2406
+ gl_EvalCoord2d(obj,arg1,arg2)
2407
+ VALUE obj,arg1,arg2;
2408
+ {
2409
+ GLdouble u;
2410
+ GLdouble v;
2411
+ u = (GLdouble)NUM2DBL(arg1);
2412
+ v = (GLdouble)NUM2DBL(arg2);
2413
+ glEvalCoord2d(u,v);
2414
+ return Qnil;
2415
+ }
2416
+
2417
+ static VALUE
2418
+ gl_EvalCoord2dv(obj,arg1)
2419
+ VALUE obj,arg1;
2420
+ {
2421
+ GLdouble params[2] = {0.0,0.0};
2422
+ if (TYPE(arg1) != T_ARRAY)
2423
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2424
+ ary2cdbl(arg1,params,2);
2425
+ glEvalCoord2dv(params);
2426
+ return Qnil;
2427
+ }
2428
+
2429
+ static VALUE
2430
+ gl_EvalCoord2f(obj,arg1,arg2)
2431
+ VALUE obj,arg1,arg2;
2432
+ {
2433
+ GLfloat u;
2434
+ GLfloat v;
2435
+ u = (GLfloat)NUM2DBL(arg1);
2436
+ v = (GLfloat)NUM2DBL(arg2);
2437
+ glEvalCoord2f(u,v);
2438
+ return Qnil;
2439
+ }
2440
+
2441
+ static VALUE
2442
+ gl_EvalCoord2fv(obj,arg1)
2443
+ VALUE obj,arg1;
2444
+ {
2445
+ GLfloat params[2] = {0.0,0.0};
2446
+ if (TYPE(arg1) != T_ARRAY)
2447
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2448
+ ary2cflt(arg1,params,2);
2449
+ glEvalCoord2fv(params);
2450
+ return Qnil;
2451
+ }
2452
+
2453
+ static VALUE
2454
+ gl_EvalMesh1(obj,arg1,arg2,arg3)
2455
+ VALUE obj,arg1,arg2,arg3;
2456
+ {
2457
+ GLenum mode;
2458
+ GLint i1;
2459
+ GLint i2;
2460
+ mode = (GLenum)NUM2INT(arg1);
2461
+ i1 = (GLint)NUM2INT(arg2);
2462
+ i2 = (GLint)NUM2INT(arg3);
2463
+ glEvalMesh1(mode,i1,i2);
2464
+ return Qnil;
2465
+ }
2466
+
2467
+ static VALUE
2468
+ gl_EvalPoint1(obj,arg1)
2469
+ VALUE obj,arg1;
2470
+ {
2471
+ GLint i;
2472
+ i = (GLint)NUM2INT(arg1);
2473
+ glEvalPoint1(i);
2474
+ return Qnil;
2475
+ }
2476
+
2477
+ static VALUE
2478
+ gl_EvalMesh2(obj,arg1,arg2,arg3,arg4,arg5)
2479
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2480
+ {
2481
+ GLenum mode;
2482
+ GLint i1;
2483
+ GLint i2;
2484
+ GLint j1;
2485
+ GLint j2;
2486
+ mode = (GLenum)NUM2INT(arg1);
2487
+ i1 = (GLint)NUM2INT(arg2);
2488
+ i2 = (GLint)NUM2INT(arg3);
2489
+ j1 = (GLint)NUM2INT(arg4);
2490
+ j2 = (GLint)NUM2INT(arg5);
2491
+ glEvalMesh2(mode,i1,i2,j1,j2);
2492
+ return Qnil;
2493
+ }
2494
+
2495
+ static VALUE
2496
+ gl_EvalPoint2(obj,arg1,arg2)
2497
+ VALUE obj,arg1,arg2;
2498
+ {
2499
+ GLint i;
2500
+ GLint j;
2501
+ i = (GLint)NUM2INT(arg1);
2502
+ j = (GLint)NUM2INT(arg2);
2503
+ glEvalPoint2(i,j);
2504
+ return Qnil;
2505
+ }
2506
+
2507
+ static VALUE
2508
+ gl_AlphaFunc(obj,arg1,arg2)
2509
+ VALUE obj,arg1,arg2;
2510
+ {
2511
+ GLenum func;
2512
+ GLclampf ref;
2513
+ func = (GLenum)NUM2INT(arg1);
2514
+ ref = (GLclampf)NUM2DBL(arg2);
2515
+ glAlphaFunc(func,ref);
2516
+ return Qnil;
2517
+ }
2518
+
2519
+ static VALUE
2520
+ gl_BlendFunc(obj,arg1,arg2)
2521
+ VALUE obj,arg1,arg2;
2522
+ {
2523
+ GLenum sfactor;
2524
+ GLenum dfactor;
2525
+ sfactor = (GLenum)NUM2INT(arg1);
2526
+ dfactor = (GLenum)NUM2INT(arg2);
2527
+ glBlendFunc(sfactor,dfactor);
2528
+ return Qnil;
2529
+ }
2530
+
2531
+ static VALUE
2532
+ gl_LogicOp(obj,arg1)
2533
+ VALUE obj,arg1;
2534
+ {
2535
+ GLenum opcode;
2536
+ opcode = (GLenum)NUM2INT(arg1);
2537
+ glLogicOp(opcode);
2538
+ return Qnil;
2539
+ }
2540
+
2541
+ static VALUE
2542
+ gl_StencilFunc(obj,arg1,arg2,arg3)
2543
+ VALUE obj,arg1,arg2,arg3;
2544
+ {
2545
+ GLenum func;
2546
+ GLint ref;
2547
+ GLuint mask;
2548
+ func = (GLenum)NUM2INT(arg1);
2549
+ ref = (GLint)NUM2INT(arg2);
2550
+ mask = (GLuint)NUM2INT(arg3);
2551
+ glStencilFunc(func,ref,mask);
2552
+ return Qnil;
2553
+ }
2554
+
2555
+ static VALUE
2556
+ gl_StencilOp(obj,arg1,arg2,arg3)
2557
+ VALUE obj,arg1,arg2,arg3;
2558
+ {
2559
+ GLenum fail;
2560
+ GLenum zfail;
2561
+ GLenum zpass;
2562
+ fail = (GLenum)NUM2INT(arg1);
2563
+ zfail = (GLenum)NUM2INT(arg2);
2564
+ zpass = (GLenum)NUM2INT(arg3);
2565
+ glStencilOp(fail,zfail,zpass);
2566
+ return Qnil;
2567
+ }
2568
+
2569
+ static VALUE
2570
+ gl_DepthFunc(obj,arg1)
2571
+ VALUE obj,arg1;
2572
+ {
2573
+ GLenum func;
2574
+ func = (GLenum)NUM2INT(arg1);
2575
+ glDepthFunc(func);
2576
+ return Qnil;
2577
+ }
2578
+
2579
+ static VALUE
2580
+ gl_PixelZoom(obj,arg1,arg2)
2581
+ VALUE obj,arg1,arg2;
2582
+ {
2583
+ GLfloat xfactor;
2584
+ GLfloat yfactor;
2585
+ xfactor = (GLfloat)NUM2DBL(arg1);
2586
+ yfactor = (GLfloat)NUM2DBL(arg2);
2587
+ glPixelZoom(xfactor,yfactor);
2588
+ return Qnil;
2589
+ }
2590
+
2591
+ static VALUE
2592
+ gl_PixelTransferf(obj,arg1,arg2)
2593
+ VALUE obj,arg1,arg2;
2594
+ {
2595
+ GLenum pname;
2596
+ GLfloat param;
2597
+ pname = (GLenum)NUM2INT(arg1);
2598
+ param = (GLfloat)NUM2DBL(arg2);
2599
+ glPixelTransferf(pname,param);
2600
+ return Qnil;
2601
+ }
2602
+
2603
+ static VALUE
2604
+ gl_PixelTransferi(obj,arg1,arg2)
2605
+ VALUE obj,arg1,arg2;
2606
+ {
2607
+ GLenum pname;
2608
+ GLint param;
2609
+ pname = (GLenum)NUM2INT(arg1);
2610
+ param = (GLint)NUM2INT(arg2);
2611
+ glPixelTransferi(pname,param);
2612
+ return Qnil;
2613
+ }
2614
+
2615
+ static VALUE
2616
+ gl_PixelStoref(obj,arg1,arg2)
2617
+ VALUE obj,arg1,arg2;
2618
+ {
2619
+ GLenum pname;
2620
+ GLfloat param;
2621
+ pname = (GLenum)NUM2INT(arg1);
2622
+ param = (GLfloat)NUM2DBL(arg2);
2623
+ glPixelStoref(pname,param);
2624
+ return Qnil;
2625
+ }
2626
+
2627
+ static VALUE
2628
+ gl_PixelStorei(obj,arg1,arg2)
2629
+ VALUE obj,arg1,arg2;
2630
+ {
2631
+ GLenum pname;
2632
+ GLint param;
2633
+ pname = (GLenum)NUM2INT(arg1);
2634
+ param = (GLint)NUM2INT(arg2);
2635
+ glPixelStorei(pname,param);
2636
+ return Qnil;
2637
+ }
2638
+
2639
+ static VALUE
2640
+ gl_PixelMapfv(obj,arg1,arg2)
2641
+ VALUE obj,arg1,arg2;
2642
+ {
2643
+ GLenum map;
2644
+ GLfloat *values;
2645
+ GLsizei size;
2646
+ map = (GLenum)NUM2INT(arg1);
2647
+ if (TYPE(arg2) != T_ARRAY)
2648
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
2649
+ size = RARRAY(arg2)->len;
2650
+ values = ALLOC_N(GLfloat,size);
2651
+ ary2cflt(arg2,values,size);
2652
+ glPixelMapfv(map,size,values);
2653
+ xfree(values);
2654
+ return Qnil;
2655
+ }
2656
+
2657
+ static VALUE
2658
+ gl_PixelMapuiv(obj,arg1,arg2)
2659
+ VALUE obj,arg1,arg2;
2660
+ {
2661
+ GLenum map;
2662
+ GLuint *values;
2663
+ GLsizei size;
2664
+ map = (GLenum)NUM2INT(arg1);
2665
+ if (TYPE(arg2) != T_ARRAY)
2666
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
2667
+ size = RARRAY(arg2)->len;
2668
+ values = ALLOC_N(GLuint,size);
2669
+ ary2cuint(arg2,values,size);
2670
+ glPixelMapuiv(map,size,values);
2671
+ xfree(values);
2672
+ return Qnil;
2673
+ }
2674
+
2675
+ static VALUE
2676
+ gl_PixelMapusv(obj,arg1,arg2)
2677
+ VALUE obj,arg1,arg2;
2678
+ {
2679
+ GLenum map;
2680
+ GLushort *values;
2681
+ GLsizei size;
2682
+ map = (GLenum)NUM2INT(arg1);
2683
+ if (TYPE(arg2) != T_ARRAY)
2684
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
2685
+ size = RARRAY(arg2)->len;
2686
+ values = ALLOC_N(GLushort,size);
2687
+ ary2cushort(arg2,values,size);
2688
+ glPixelMapusv(map,size,values);
2689
+ xfree(values);
2690
+ return Qnil;
2691
+ }
2692
+
2693
+ static VALUE
2694
+ gl_ReadBuffer(obj,arg1)
2695
+ VALUE obj,arg1;
2696
+ {
2697
+ GLenum mode;
2698
+ mode = (GLenum)NUM2INT(arg1);
2699
+ glReadBuffer(mode);
2700
+ return Qnil;
2701
+ }
2702
+
2703
+ static VALUE
2704
+ gl_CopyPixels(obj,arg1,arg2,arg3,arg4,arg5)
2705
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2706
+ {
2707
+ GLint x;
2708
+ GLint y;
2709
+ GLsizei width;
2710
+ GLsizei height;
2711
+ GLenum type;
2712
+ x = (GLint)NUM2INT(arg1);
2713
+ y = (GLint)NUM2INT(arg2);
2714
+ width = (GLsizei)NUM2INT(arg3);
2715
+ height = (GLsizei)NUM2INT(arg4);
2716
+ type = (GLenum)NUM2INT(arg5);
2717
+ glCopyPixels(x,y,width,height,type);
2718
+ return Qnil;
2719
+ }
2720
+
2721
+ static VALUE
2722
+ gl_ReadPixels(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2723
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2724
+ {
2725
+ GLint x;
2726
+ GLint y;
2727
+ GLsizei width;
2728
+ GLsizei height;
2729
+ int format;
2730
+ int type;
2731
+ VALUE pixels;
2732
+ x = (GLint)NUM2INT(arg1);
2733
+ y = (GLint)NUM2INT(arg2);
2734
+ width = (GLsizei)NUM2INT(arg3);
2735
+ height = (GLsizei)NUM2INT(arg4);
2736
+ format = NUM2INT(arg5);
2737
+ type = NUM2INT(arg6);
2738
+ if (format != -1 && type != -1) {
2739
+ int type_size;
2740
+ int format_size;
2741
+ type_size = gltype_size(type) / 8;
2742
+ format_size = glformat_size(format);
2743
+ pixels = allocate_buffer_with_string(width*height*format_size*type_size);
2744
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr);
2745
+ return pixels;
2746
+ }
2747
+ return Qnil;
2748
+ }
2749
+
2750
+ static VALUE
2751
+ gl_DrawPixels(obj,arg1,arg2,arg3,arg4,arg5)
2752
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2753
+ {
2754
+ GLsizei width;
2755
+ GLsizei height;
2756
+ GLenum format;
2757
+ GLenum type;
2758
+ const char *pixels;
2759
+ width = (GLsizei)NUM2INT(arg1);
2760
+ height = (GLsizei)NUM2INT(arg2);
2761
+ format = (GLenum)NUM2INT(arg3);
2762
+ type = (GLenum)NUM2INT(arg4);
2763
+ if (format != -1 && type != -1) {
2764
+ if (TYPE(arg5) != T_STRING)
2765
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg5));
2766
+ if (RSTRING(arg5)->len < width * height * glformat_size(format) * gltype_size(type) / 8)
2767
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg5)->len);
2768
+ pixels = RSTRING(arg5)->ptr;
2769
+ glDrawPixels(width,height,format,type,pixels);
2770
+ }
2771
+ return Qnil;
2772
+ }
2773
+
2774
+ static VALUE
2775
+ gl_GetClipPlane(obj,arg1)
2776
+ VALUE obj,arg1;
2777
+ {
2778
+ GLenum plane;
2779
+ GLdouble equation[4] = {0.0,0.0,0.0,0.0};
2780
+ VALUE retary;
2781
+ int i;
2782
+ plane = (GLenum)NUM2INT(arg1);
2783
+ glGetClipPlane(plane,equation);
2784
+ retary = rb_ary_new2(4);
2785
+ for(i=0;i<4;i++)
2786
+ rb_ary_push(retary, rb_float_new(equation[i]));
2787
+ return retary;
2788
+ }
2789
+
2790
+ #define GLGET_FUNC(_name_,_type_,_conv_) \
2791
+ static VALUE \
2792
+ gl_Get##_name_##v(obj,arg1) \
2793
+ VALUE obj,arg1; \
2794
+ { \
2795
+ GLenum pname; \
2796
+ int nitems; \
2797
+ VALUE ary, ary2; \
2798
+ int i,j; \
2799
+ _type_ items[32]; \
2800
+ pname = NUM2INT(arg1); \
2801
+ switch(pname) { \
2802
+ case GL_ACCUM_CLEAR_VALUE: \
2803
+ case GL_BLEND_COLOR: \
2804
+ case GL_COLOR_CLEAR_VALUE: \
2805
+ case GL_COLOR_WRITEMASK: \
2806
+ case GL_CURRENT_COLOR: \
2807
+ case GL_CURRENT_RASTER_COLOR: \
2808
+ case GL_CURRENT_RASTER_POSITION: \
2809
+ case GL_CURRENT_RASTER_SECONDARY_COLOR: \
2810
+ case GL_CURRENT_RASTER_TEXTURE_COORDS: \
2811
+ case GL_CURRENT_TEXTURE_COORDS: \
2812
+ case GL_FOG_COLOR: \
2813
+ case GL_LIGHT_MODEL_AMBIENT: \
2814
+ case GL_MAP2_GRID_DOMAIN: \
2815
+ case GL_CURRENT_SECONDARY_COLOR: \
2816
+ case GL_SCISSOR_BOX: \
2817
+ case GL_TEXTURE_ENV_COLOR: \
2818
+ case GL_VIEWPORT: \
2819
+ nitems = 4; \
2820
+ break; \
2821
+ case GL_CURRENT_NORMAL: \
2822
+ case GL_POINT_DISTANCE_ATTENUATION: \
2823
+ nitems = 3; \
2824
+ break; \
2825
+ case GL_DEPTH_RANGE: \
2826
+ case GL_LINE_WIDTH_RANGE: \
2827
+ case GL_MAP1_GRID_DOMAIN: \
2828
+ case GL_MAP2_GRID_SEGMENTS: \
2829
+ case GL_MAX_VIEWPORT_DIMS: \
2830
+ case GL_POINT_SIZE_RANGE: \
2831
+ case GL_POLYGON_MODE: \
2832
+ case GL_ALIASED_LINE_WIDTH_RANGE: \
2833
+ case GL_ALIASED_POINT_SIZE_RANGE: \
2834
+ nitems = 2; \
2835
+ break; \
2836
+ case GL_MODELVIEW_MATRIX: \
2837
+ case GL_PROJECTION_MATRIX: \
2838
+ case GL_TEXTURE_MATRIX: \
2839
+ glGet##_name_##v(pname, items); \
2840
+ ary = rb_ary_new2(4); \
2841
+ for (i = 0; i < 4; i++) { \
2842
+ ary2 = rb_ary_new2(4); \
2843
+ rb_ary_push(ary, ary2); \
2844
+ for (j = 0; j < 4; j++) \
2845
+ rb_ary_push(ary2, _conv_(items[i*4+j])); \
2846
+ } \
2847
+ return ary; \
2848
+ case GL_POLYGON_STIPPLE: \
2849
+ glGet##_name_##v(pname, items); \
2850
+ return rb_str_new((const char*)items, 32); \
2851
+ default: /* size=1 */ \
2852
+ glGet##_name_##v(pname, items); \
2853
+ return _conv_(items[0]); \
2854
+ } \
2855
+ glGet##_name_##v(pname, items); \
2856
+ ary = rb_ary_new2(nitems); \
2857
+ for (i = 0; i < nitems; i++) \
2858
+ rb_ary_push(ary, _conv_(items[i])); \
2859
+ return ary; \
2860
+ }
2861
+
2862
+ GLGET_FUNC(Double,GLdouble,rb_float_new)
2863
+ GLGET_FUNC(Float,GLfloat,rb_float_new)
2864
+ GLGET_FUNC(Integer,GLint,INT2NUM)
2865
+ GLGET_FUNC(Boolean,GLboolean,INT2NUM)
2866
+
2867
+ #undef GLGET_FUNC
2868
+
2869
+ static VALUE
2870
+ gl_GetError(obj)
2871
+ VALUE obj;
2872
+ {
2873
+ GLenum ret;
2874
+ ret = glGetError();
2875
+ return INT2NUM(ret);
2876
+ }
2877
+
2878
+ static VALUE
2879
+ gl_GetLightfv(obj,arg1,arg2)
2880
+ VALUE obj,arg1,arg2;
2881
+ {
2882
+ GLenum light;
2883
+ GLenum pname;
2884
+ GLsizei size;
2885
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
2886
+ VALUE retary;
2887
+ int i;
2888
+ light = (GLenum)NUM2INT(arg1);
2889
+ pname = (GLenum)NUM2INT(arg2);
2890
+ switch(pname) {
2891
+ case GL_AMBIENT:
2892
+ case GL_DIFFUSE:
2893
+ case GL_SPECULAR:
2894
+ case GL_POSITION:
2895
+ size = 4;
2896
+ break;
2897
+ case GL_SPOT_DIRECTION:
2898
+ size = 3;
2899
+ break;
2900
+ case GL_CONSTANT_ATTENUATION:
2901
+ case GL_LINEAR_ATTENUATION:
2902
+ case GL_QUADRATIC_ATTENUATION:
2903
+ case GL_SPOT_EXPONENT:
2904
+ case GL_SPOT_CUTOFF:
2905
+ size = 1;
2906
+ break;
2907
+ default:
2908
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
2909
+ break; /* not reached */
2910
+ }
2911
+ glGetLightfv(light,pname,params);
2912
+ retary = rb_ary_new2(size);
2913
+ for(i=0;i<size;i++)
2914
+ rb_ary_push(retary, rb_float_new(params[i]));
2915
+ return retary;
2916
+ }
2917
+
2918
+ static VALUE
2919
+ gl_GetLightiv(obj,arg1,arg2)
2920
+ VALUE obj,arg1,arg2;
2921
+ {
2922
+ GLenum light;
2923
+ GLenum pname;
2924
+ GLsizei size;
2925
+ GLint params[4] = {0,0,0,0};
2926
+ VALUE retary;
2927
+ int i;
2928
+ light = (GLenum)NUM2INT(arg1);
2929
+ pname = (GLenum)NUM2INT(arg2);
2930
+ switch(pname) {
2931
+ case GL_AMBIENT:
2932
+ case GL_DIFFUSE:
2933
+ case GL_SPECULAR:
2934
+ case GL_POSITION:
2935
+ size = 4;
2936
+ break;
2937
+ case GL_SPOT_DIRECTION:
2938
+ size = 3;
2939
+ break;
2940
+ case GL_CONSTANT_ATTENUATION:
2941
+ case GL_LINEAR_ATTENUATION:
2942
+ case GL_QUADRATIC_ATTENUATION:
2943
+ case GL_SPOT_EXPONENT:
2944
+ case GL_SPOT_CUTOFF:
2945
+ size = 1;
2946
+ break;
2947
+ default:
2948
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
2949
+ break; /* not reached */
2950
+ }
2951
+ glGetLightiv(light,pname,params);
2952
+ retary = rb_ary_new2(size);
2953
+ for(i=0;i<size;i++)
2954
+ rb_ary_push(retary, INT2FIX(params[i]));
2955
+ return retary;
2956
+ }
2957
+
2958
+ static VALUE
2959
+ gl_GetMapdv(obj,arg1,arg2)
2960
+ VALUE obj,arg1,arg2;
2961
+ {
2962
+ GLenum target;
2963
+ GLenum query;
2964
+ int dims;
2965
+ int pointsize;
2966
+ int size=0;
2967
+ int i;
2968
+ GLdouble *points;
2969
+ VALUE retary;
2970
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
2971
+ target = (GLenum)NUM2INT(arg1);
2972
+ query = (GLenum)NUM2INT(arg2);
2973
+ switch(target) {
2974
+ case GL_MAP1_INDEX:
2975
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
2976
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
2977
+ case GL_MAP1_VERTEX_3:
2978
+ case GL_MAP1_NORMAL:
2979
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
2980
+ case GL_MAP1_COLOR_4:
2981
+ case GL_MAP1_TEXTURE_COORD_4:
2982
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
2983
+ case GL_MAP2_INDEX:
2984
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
2985
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
2986
+ case GL_MAP2_VERTEX_3:
2987
+ case GL_MAP2_NORMAL:
2988
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
2989
+ case GL_MAP2_COLOR_4:
2990
+ case GL_MAP2_TEXTURE_COORD_4:
2991
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
2992
+ default:
2993
+ rb_raise(rb_eArgError, "unknown target:%d",target);
2994
+ break; /* not reached */
2995
+ }
2996
+ switch(query) {
2997
+ case GL_ORDER: size = dims; break;
2998
+ case GL_DOMAIN: size = dims*2; break;
2999
+ case GL_COEFF:
3000
+ glGetMapiv(target,GL_ORDER,order);
3001
+ if (dims==1)
3002
+ size = order[0] * pointsize;
3003
+ else
3004
+ size = (order[0]*order[1]) * pointsize;
3005
+ break;
3006
+ default:
3007
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3008
+ break; /* not reached */
3009
+ }
3010
+ points = ALLOC_N(GLdouble,size);
3011
+ glGetMapdv(target,query,points);
3012
+ retary = rb_ary_new2(size);
3013
+ for(i=0;i<size;i++)
3014
+ rb_ary_push(retary, rb_float_new(points[i]));
3015
+ xfree(points);
3016
+ return retary;
3017
+ }
3018
+
3019
+ static VALUE
3020
+ gl_GetMapfv(obj,arg1,arg2)
3021
+ VALUE obj,arg1,arg2;
3022
+ {
3023
+ GLenum target;
3024
+ GLenum query;
3025
+ int dims;
3026
+ int pointsize;
3027
+ int size=0;
3028
+ int i;
3029
+ GLfloat *points;
3030
+ VALUE retary;
3031
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
3032
+ target = (GLenum)NUM2INT(arg1);
3033
+ query = (GLenum)NUM2INT(arg2);
3034
+ switch(target) {
3035
+ case GL_MAP1_INDEX:
3036
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
3037
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
3038
+ case GL_MAP1_VERTEX_3:
3039
+ case GL_MAP1_NORMAL:
3040
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
3041
+ case GL_MAP1_COLOR_4:
3042
+ case GL_MAP1_TEXTURE_COORD_4:
3043
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
3044
+ case GL_MAP2_INDEX:
3045
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
3046
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
3047
+ case GL_MAP2_VERTEX_3:
3048
+ case GL_MAP2_NORMAL:
3049
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
3050
+ case GL_MAP2_COLOR_4:
3051
+ case GL_MAP2_TEXTURE_COORD_4:
3052
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
3053
+ default:
3054
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3055
+ break; /* not reached */
3056
+ }
3057
+ switch(query) {
3058
+ case GL_ORDER: size = dims; break;
3059
+ case GL_DOMAIN: size = dims*2; break;
3060
+ case GL_COEFF:
3061
+ glGetMapiv(target,GL_ORDER,order);
3062
+ if (dims==1)
3063
+ size = order[0] * pointsize;
3064
+ else
3065
+ size = (order[0]*order[1]) * pointsize;
3066
+ break;
3067
+ default:
3068
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3069
+ break; /* not reached */
3070
+ }
3071
+ points = ALLOC_N(GLfloat,size);
3072
+ glGetMapfv(target,query,points);
3073
+ retary = rb_ary_new2(size);
3074
+ for(i=0;i<size;i++)
3075
+ rb_ary_push(retary, rb_float_new(points[i]));
3076
+ xfree(points);
3077
+ return retary;
3078
+ }
3079
+
3080
+ static VALUE
3081
+ gl_GetMapiv(obj,arg1,arg2)
3082
+ VALUE obj,arg1,arg2;
3083
+ {
3084
+ GLenum target;
3085
+ GLenum query;
3086
+ int dims;
3087
+ int pointsize;
3088
+ int size=0;
3089
+ int i;
3090
+ GLint *points;
3091
+ VALUE retary;
3092
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
3093
+ target = (GLenum)NUM2INT(arg1);
3094
+ query = (GLenum)NUM2INT(arg2);
3095
+ switch(target) {
3096
+ case GL_MAP1_INDEX:
3097
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
3098
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
3099
+ case GL_MAP1_VERTEX_3:
3100
+ case GL_MAP1_NORMAL:
3101
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
3102
+ case GL_MAP1_COLOR_4:
3103
+ case GL_MAP1_TEXTURE_COORD_4:
3104
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
3105
+ case GL_MAP2_INDEX:
3106
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
3107
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
3108
+ case GL_MAP2_VERTEX_3:
3109
+ case GL_MAP2_NORMAL:
3110
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
3111
+ case GL_MAP2_COLOR_4:
3112
+ case GL_MAP2_TEXTURE_COORD_4:
3113
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
3114
+ default:
3115
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3116
+ break; /* not reached */
3117
+ }
3118
+ switch(query) {
3119
+ case GL_ORDER: size = dims; break;
3120
+ case GL_DOMAIN: size = dims*2; break;
3121
+ case GL_COEFF:
3122
+ glGetMapiv(target,GL_ORDER,order);
3123
+ if (dims==1)
3124
+ size = order[0] * pointsize;
3125
+ else
3126
+ size = (order[0]*order[1]) * pointsize;
3127
+ break;
3128
+ default:
3129
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3130
+ break; /* not reached */
3131
+ }
3132
+ points = ALLOC_N(GLint,size);
3133
+ glGetMapiv(target,query,points);
3134
+ retary = rb_ary_new2(size);
3135
+ for(i=0;i<size;i++)
3136
+ rb_ary_push(retary, INT2FIX(points[i]));
3137
+ xfree(points);
3138
+ return retary;
3139
+ }
3140
+
3141
+ static VALUE
3142
+ gl_GetMaterialfv(obj,arg1,arg2)
3143
+ VALUE obj,arg1,arg2;
3144
+ {
3145
+ GLenum face;
3146
+ GLenum pname;
3147
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3148
+ int size;
3149
+ VALUE retary;
3150
+ int i;
3151
+ face = (GLenum)NUM2INT(arg1);
3152
+ pname = (GLenum)NUM2INT(arg2);
3153
+ switch(pname) {
3154
+ case GL_AMBIENT:
3155
+ case GL_DIFFUSE:
3156
+ case GL_SPECULAR:
3157
+ case GL_EMISSION:
3158
+ size = 4;
3159
+ break;
3160
+ case GL_COLOR_INDEXES:
3161
+ size = 3;
3162
+ break;
3163
+ case GL_SHININESS:
3164
+ size = 1;
3165
+ break;
3166
+ default:
3167
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3168
+ break; /* not reached */
3169
+ }
3170
+ glGetMaterialfv(face,pname,params);
3171
+ retary = rb_ary_new2(size);
3172
+ for(i=0;i<size;i++)
3173
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3174
+ return retary;
3175
+ }
3176
+
3177
+ static VALUE
3178
+ gl_GetMaterialiv(obj,arg1,arg2)
3179
+ VALUE obj,arg1,arg2;
3180
+ {
3181
+ GLenum face;
3182
+ GLenum pname;
3183
+ GLint params[4] = {0,0,0,0};
3184
+ int size;
3185
+ VALUE retary;
3186
+ int i;
3187
+ face = (GLenum)NUM2INT(arg1);
3188
+ pname = (GLenum)NUM2INT(arg2);
3189
+ switch(pname) {
3190
+ case GL_AMBIENT:
3191
+ case GL_DIFFUSE:
3192
+ case GL_SPECULAR:
3193
+ case GL_EMISSION:
3194
+ size = 4;
3195
+ break;
3196
+ case GL_COLOR_INDEXES:
3197
+ size = 3;
3198
+ break;
3199
+ case GL_SHININESS:
3200
+ size = 1;
3201
+ break;
3202
+ default:
3203
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3204
+ break; /* not reached */
3205
+ }
3206
+ glGetMaterialiv(face,pname,params);
3207
+ retary = rb_ary_new2(size);
3208
+ for(i=0;i<size;i++)
3209
+ rb_ary_push(retary, INT2FIX(params[i]));
3210
+ return retary;
3211
+ }
3212
+
3213
+ static VALUE
3214
+ gl_GetPixelMapfv(obj,arg1)
3215
+ VALUE obj,arg1;
3216
+ {
3217
+ GLenum map;
3218
+ GLenum map_size;
3219
+ GLint size;
3220
+ GLfloat *values;
3221
+ VALUE retary;
3222
+ int i;
3223
+ map = (GLenum)NUM2INT(arg1);
3224
+ switch(map) {
3225
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3226
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3227
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3228
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3229
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3230
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3231
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3232
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3233
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3234
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3235
+ default:
3236
+ rb_raise(rb_eArgError, "unknown map:%d",map);
3237
+ break; /* not reached */
3238
+ }
3239
+ glGetIntegerv(map_size,&size);
3240
+ values = ALLOC_N(GLfloat,size);
3241
+ glGetPixelMapfv(map,values);
3242
+ retary = rb_ary_new2(size);
3243
+ for(i=0;i<size;i++)
3244
+ rb_ary_push(retary, rb_float_new(values[i]));
3245
+ xfree(values);
3246
+ return retary;
3247
+ }
3248
+
3249
+ static VALUE
3250
+ gl_GetPixelMapuiv(obj,arg1)
3251
+ VALUE obj,arg1;
3252
+ {
3253
+ GLenum map;
3254
+ GLenum map_size;
3255
+ GLint size;
3256
+ GLuint *values;
3257
+ VALUE retary;
3258
+ int i;
3259
+ map = (GLenum)NUM2INT(arg1);
3260
+ switch(map) {
3261
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3262
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3263
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3264
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3265
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3266
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3267
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3268
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3269
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3270
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3271
+ default:
3272
+ rb_raise(rb_eArgError, "unknown map:%d",map);
3273
+ break; /* not reached */
3274
+ }
3275
+ glGetIntegerv(map_size,&size);
3276
+ values = ALLOC_N(GLuint,size);
3277
+ glGetPixelMapuiv(map,values);
3278
+ retary = rb_ary_new2(size);
3279
+ for(i=0;i<size;i++)
3280
+ rb_ary_push(retary, INT2FIX(values[i]));
3281
+ xfree(values);
3282
+ return retary;
3283
+ }
3284
+
3285
+ static VALUE
3286
+ gl_GetPixelMapusv(obj,arg1)
3287
+ VALUE obj,arg1;
3288
+ {
3289
+ GLenum map;
3290
+ GLenum map_size;
3291
+ GLint size;
3292
+ GLushort *values;
3293
+ VALUE retary;
3294
+ int i;
3295
+ map = (GLenum)NUM2INT(arg1);
3296
+ switch(map) {
3297
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3298
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3299
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3300
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3301
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3302
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3303
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3304
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3305
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3306
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3307
+ default:
3308
+ rb_raise(rb_eArgError, "unknown map:%d",map);
3309
+ break; /* not reached */
3310
+ }
3311
+ glGetIntegerv(map_size,&size);
3312
+ values = ALLOC_N(GLushort,size);
3313
+ glGetPixelMapusv(map,values);
3314
+ retary = rb_ary_new2(size);
3315
+ for(i=0;i<size;i++)
3316
+ rb_ary_push(retary, INT2FIX(values[i]));
3317
+ xfree(values);
3318
+ return retary;
3319
+ }
3320
+
3321
+ static VALUE
3322
+ gl_GetPolygonStipple(obj,arg1)
3323
+ VALUE obj,arg1;
3324
+ {
3325
+ GLubyte mask[128];
3326
+ glGetPolygonStipple(mask);
3327
+ return rb_str_new((const char*)mask, 128);
3328
+ }
3329
+
3330
+ static VALUE
3331
+ gl_GetString(obj,arg1)
3332
+ VALUE obj,arg1;
3333
+ {
3334
+ GLenum name;
3335
+ const GLubyte *ret;
3336
+ name = (GLenum)NUM2INT(arg1);
3337
+ ret = glGetString(name);
3338
+ return rb_str_new2((const char*)ret);
3339
+ }
3340
+
3341
+ static VALUE
3342
+ gl_GetTexEnvfv(obj,arg1,arg2)
3343
+ VALUE obj,arg1,arg2;
3344
+ {
3345
+ GLenum target;
3346
+ GLenum pname;
3347
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3348
+ int size;
3349
+ VALUE retary;
3350
+ int i;
3351
+ target = (GLenum)NUM2INT(arg1);
3352
+ pname = (GLenum)NUM2INT(arg2);
3353
+ switch(pname) {
3354
+ case GL_TEXTURE_ENV_COLOR:
3355
+ size = 4;
3356
+ break;
3357
+ case GL_TEXTURE_ENV_MODE:
3358
+ case GL_COORD_REPLACE:
3359
+ case GL_TEXTURE_LOD_BIAS:
3360
+ case GL_COMBINE_RGB:
3361
+ case GL_COMBINE_ALPHA:
3362
+ case GL_SRC0_RGB:
3363
+ case GL_SRC1_RGB:
3364
+ case GL_SRC2_RGB:
3365
+ case GL_SRC0_ALPHA:
3366
+ case GL_SRC1_ALPHA:
3367
+ case GL_SRC2_ALPHA:
3368
+ case GL_OPERAND0_RGB:
3369
+ case GL_OPERAND1_RGB:
3370
+ case GL_OPERAND2_RGB:
3371
+ case GL_OPERAND0_ALPHA:
3372
+ case GL_OPERAND1_ALPHA:
3373
+ case GL_OPERAND2_ALPHA:
3374
+ case GL_RGB_SCALE:
3375
+ case GL_ALPHA_SCALE:
3376
+ size = 1;
3377
+ break;
3378
+ default:
3379
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3380
+ break; /* not reached */
3381
+ }
3382
+ glGetTexEnvfv(target,pname,params);
3383
+ retary = rb_ary_new2(size);
3384
+ for(i=0;i<size;i++)
3385
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3386
+ return retary;
3387
+ }
3388
+
3389
+ static VALUE
3390
+ gl_GetTexEnviv(obj,arg1,arg2)
3391
+ VALUE obj,arg1,arg2;
3392
+ {
3393
+ GLenum target;
3394
+ GLenum pname;
3395
+ GLint params[4] = {0,0,0,0};
3396
+ int size;
3397
+ VALUE retary;
3398
+ int i;
3399
+ target = (GLenum)NUM2INT(arg1);
3400
+ pname = (GLenum)NUM2INT(arg2);
3401
+ switch(pname) {
3402
+ case GL_TEXTURE_ENV_COLOR:
3403
+ size = 4;
3404
+ break;
3405
+ case GL_TEXTURE_ENV_MODE:
3406
+ case GL_COORD_REPLACE:
3407
+ case GL_TEXTURE_LOD_BIAS:
3408
+ case GL_COMBINE_RGB:
3409
+ case GL_COMBINE_ALPHA:
3410
+ case GL_SRC0_RGB:
3411
+ case GL_SRC1_RGB:
3412
+ case GL_SRC2_RGB:
3413
+ case GL_SRC0_ALPHA:
3414
+ case GL_SRC1_ALPHA:
3415
+ case GL_SRC2_ALPHA:
3416
+ case GL_OPERAND0_RGB:
3417
+ case GL_OPERAND1_RGB:
3418
+ case GL_OPERAND2_RGB:
3419
+ case GL_OPERAND0_ALPHA:
3420
+ case GL_OPERAND1_ALPHA:
3421
+ case GL_OPERAND2_ALPHA:
3422
+ case GL_RGB_SCALE:
3423
+ case GL_ALPHA_SCALE:
3424
+ size = 1;
3425
+ break;
3426
+ default:
3427
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3428
+ break; /* not reached */
3429
+ }
3430
+ glGetTexEnviv(target,pname,params);
3431
+ retary = rb_ary_new2(size);
3432
+ for(i=0;i<size;i++)
3433
+ rb_ary_push(retary, INT2FIX(params[i]));
3434
+ return retary;
3435
+ }
3436
+
3437
+ static VALUE
3438
+ gl_GetTexGendv(obj,arg1,arg2)
3439
+ VALUE obj,arg1,arg2;
3440
+ {
3441
+ GLenum coord;
3442
+ GLenum pname;
3443
+ GLdouble params[4] = {0.0,0.0,0.0,0.0};
3444
+ int size;
3445
+ VALUE retary;
3446
+ int i;
3447
+ coord = (GLenum)NUM2INT(arg1);
3448
+ pname = (GLenum)NUM2INT(arg2);
3449
+ switch(pname) {
3450
+ case GL_OBJECT_PLANE:
3451
+ case GL_EYE_PLANE:
3452
+ size = 4;
3453
+ break;
3454
+ case GL_TEXTURE_GEN_MODE:
3455
+ size = 1;
3456
+ break;
3457
+ default:
3458
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3459
+ break; /* not reached */
3460
+ }
3461
+ glGetTexGendv(coord,pname,params);
3462
+ retary = rb_ary_new2(size);
3463
+ for(i=0;i<size;i++)
3464
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3465
+ return retary;
3466
+ }
3467
+
3468
+ static VALUE
3469
+ gl_GetTexGenfv(obj,arg1,arg2)
3470
+ VALUE obj,arg1,arg2;
3471
+ {
3472
+ GLenum coord;
3473
+ GLenum pname;
3474
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3475
+ int size;
3476
+ VALUE retary;
3477
+ int i;
3478
+ coord = (GLenum)NUM2INT(arg1);
3479
+ pname = (GLenum)NUM2INT(arg2);
3480
+ switch(pname) {
3481
+ case GL_OBJECT_PLANE:
3482
+ case GL_EYE_PLANE:
3483
+ size = 4;
3484
+ break;
3485
+ case GL_TEXTURE_GEN_MODE:
3486
+ size = 1;
3487
+ break;
3488
+ default:
3489
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3490
+ break; /* not reached */
3491
+ }
3492
+ glGetTexGenfv(coord,pname,params);
3493
+ retary = rb_ary_new2(size);
3494
+ for(i=0;i<size;i++)
3495
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3496
+ return retary;
3497
+ }
3498
+
3499
+ static VALUE
3500
+ gl_GetTexGeniv(obj,arg1,arg2)
3501
+ VALUE obj,arg1,arg2;
3502
+ {
3503
+ GLenum coord;
3504
+ GLenum pname;
3505
+ GLint params[4] = {0,0,0,0};
3506
+ int size;
3507
+ VALUE retary;
3508
+ int i;
3509
+ coord = (GLenum)NUM2INT(arg1);
3510
+ pname = (GLenum)NUM2INT(arg2);
3511
+ switch(pname) {
3512
+ case GL_OBJECT_PLANE:
3513
+ case GL_EYE_PLANE:
3514
+ size = 4;
3515
+ break;
3516
+ case GL_TEXTURE_GEN_MODE:
3517
+ size = 1;
3518
+ break;
3519
+ default:
3520
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3521
+ break; /* not reached */
3522
+ }
3523
+ glGetTexGeniv(coord,pname,params);
3524
+ retary = rb_ary_new2(size);
3525
+ for(i=0;i<size;i++)
3526
+ rb_ary_push(retary, INT2FIX(params[i]));
3527
+ return retary;
3528
+ }
3529
+
3530
+ /*
3531
+ static VALUE
3532
+ gl_GetTexImage(obj,arg1,arg2,arg3,arg4,arg5)
3533
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
3534
+ {
3535
+ #warning glGetTexImage not implemented
3536
+ return Qnil;
3537
+ }
3538
+ */
3539
+
3540
+ static VALUE
3541
+ gl_GetTexParameterfv(obj,arg1,arg2)
3542
+ VALUE obj,arg1,arg2;
3543
+ {
3544
+ GLenum target;
3545
+ GLenum pname;
3546
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3547
+ int size;
3548
+ VALUE retary;
3549
+ int i;
3550
+ target = (GLenum)NUM2INT(arg1);
3551
+ pname = (GLenum)NUM2INT(arg2);
3552
+ switch(pname) {
3553
+ case GL_TEXTURE_BORDER_COLOR:
3554
+ size = 4;
3555
+ break;
3556
+ default:
3557
+ size = 1;
3558
+ break;
3559
+ }
3560
+ glGetTexParameterfv(target,pname,params);
3561
+ retary = rb_ary_new2(size);
3562
+ for(i=0;i<size;i++)
3563
+ rb_ary_push(retary, rb_float_new(params[i]));
3564
+ return retary;
3565
+ }
3566
+
3567
+ static VALUE
3568
+ gl_GetTexParameteriv(obj,arg1,arg2)
3569
+ VALUE obj,arg1,arg2;
3570
+ {
3571
+ GLenum target;
3572
+ GLenum pname;
3573
+ GLint params[4] = {0,0,0,0};
3574
+ int size;
3575
+ VALUE retary;
3576
+ int i;
3577
+ target = (GLenum)NUM2INT(arg1);
3578
+ pname = (GLenum)NUM2INT(arg2);
3579
+ switch(pname) {
3580
+ case GL_TEXTURE_BORDER_COLOR:
3581
+ size = 4;
3582
+ break;
3583
+ default:
3584
+ size = 1;
3585
+ break;
3586
+ }
3587
+ glGetTexParameteriv(target,pname,params);
3588
+ retary = rb_ary_new2(size);
3589
+ for(i=0;i<size;i++)
3590
+ rb_ary_push(retary, INT2FIX(params[i]));
3591
+ return retary;
3592
+ }
3593
+
3594
+ static VALUE
3595
+ gl_GetTexLevelParameterfv(obj,arg1,arg2,arg3)
3596
+ VALUE obj,arg1,arg2,arg3;
3597
+ {
3598
+ GLenum target;
3599
+ GLint level;
3600
+ GLenum pname;
3601
+ GLfloat params;
3602
+ VALUE retary;
3603
+ target = (GLenum)NUM2INT(arg1);
3604
+ level = (GLint)NUM2INT(arg2);
3605
+ pname = (GLenum)NUM2INT(arg3);
3606
+ glGetTexLevelParameterfv(target,level,pname,&params);
3607
+ retary = rb_ary_new2(1);
3608
+ rb_ary_push(retary, rb_float_new(params));
3609
+ return retary;
3610
+ }
3611
+
3612
+ static VALUE
3613
+ gl_GetTexLevelParameteriv(obj,arg1,arg2,arg3)
3614
+ VALUE obj,arg1,arg2,arg3;
3615
+ {
3616
+ GLenum target;
3617
+ GLint level;
3618
+ GLenum pname;
3619
+ GLint params;
3620
+ VALUE retary;
3621
+ target = (GLenum)NUM2INT(arg1);
3622
+ level = (GLint)NUM2INT(arg2);
3623
+ pname = (GLenum)NUM2INT(arg3);
3624
+ glGetTexLevelParameteriv(target,level,pname,&params);
3625
+ retary = rb_ary_new2(1);
3626
+ rb_ary_push(retary, INT2FIX(params));
3627
+ return retary;
3628
+ }
3629
+
3630
+ static VALUE
3631
+ gl_IsEnabled(obj,arg1)
3632
+ VALUE obj,arg1;
3633
+ {
3634
+ GLenum cap;
3635
+ GLboolean ret;
3636
+ cap = (GLenum)NUM2INT(arg1);
3637
+ ret = glIsEnabled(cap);
3638
+ return INT2NUM(ret);
3639
+ }
3640
+
3641
+ static VALUE
3642
+ gl_IsList(obj,arg1)
3643
+ VALUE obj,arg1;
3644
+ {
3645
+ GLuint list;
3646
+ GLboolean ret;
3647
+ list = (GLuint)NUM2INT(arg1);
3648
+ ret = glIsList(list);
3649
+ return INT2NUM(ret);
3650
+ }
3651
+
3652
+ static VALUE
3653
+ gl_DepthRange(obj,arg1,arg2)
3654
+ VALUE obj,arg1,arg2;
3655
+ {
3656
+ GLclampd near_val;
3657
+ GLclampd far_val;
3658
+ near_val = (GLclampd)NUM2DBL(arg1);
3659
+ far_val = (GLclampd)NUM2DBL(arg2);
3660
+ glDepthRange(near_val,far_val);
3661
+ return Qnil;
3662
+ }
3663
+
3664
+ static VALUE
3665
+ gl_Frustum(obj,arg1,arg2,arg3,arg4,arg5,arg6)
3666
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
3667
+ {
3668
+ GLdouble left;
3669
+ GLdouble right;
3670
+ GLdouble bottom;
3671
+ GLdouble top;
3672
+ GLdouble near_val;
3673
+ GLdouble far_val;
3674
+ left = (GLdouble)NUM2DBL(arg1);
3675
+ right = (GLdouble)NUM2DBL(arg2);
3676
+ bottom = (GLdouble)NUM2DBL(arg3);
3677
+ top = (GLdouble)NUM2DBL(arg4);
3678
+ near_val = (GLdouble)NUM2DBL(arg5);
3679
+ far_val = (GLdouble)NUM2DBL(arg6);
3680
+ glFrustum(left,right,bottom,top,near_val,far_val);
3681
+ return Qnil;
3682
+ }
3683
+
3684
+ static VALUE
3685
+ gl_LoadIdentity(obj)
3686
+ VALUE obj;
3687
+ {
3688
+ glLoadIdentity();
3689
+ return Qnil;
3690
+ }
3691
+
3692
+ static VALUE
3693
+ gl_LoadMatrixf(obj,arg1)
3694
+ VALUE obj,arg1;
3695
+ {
3696
+ GLfloat m[4*4];
3697
+ ary2cmat4x4flt(arg1, m);
3698
+ glLoadMatrixf(m);
3699
+ return Qnil;
3700
+ }
3701
+
3702
+ static VALUE
3703
+ gl_LoadMatrixd(obj,arg1)
3704
+ VALUE obj,arg1;
3705
+ {
3706
+ GLdouble m[4*4];
3707
+ ary2cmat4x4dbl(arg1, m);
3708
+ glLoadMatrixd(m);
3709
+ return Qnil;
3710
+ }
3711
+
3712
+ static VALUE
3713
+ gl_MatrixMode(obj,arg1)
3714
+ VALUE obj,arg1;
3715
+ {
3716
+ GLenum mode;
3717
+ mode = (GLenum)NUM2INT(arg1);
3718
+ glMatrixMode(mode);
3719
+ return Qnil;
3720
+ }
3721
+
3722
+ static VALUE
3723
+ gl_MultMatrixf(obj,arg1)
3724
+ VALUE obj,arg1;
3725
+ {
3726
+ GLfloat m[4*4];
3727
+ ary2cmat4x4flt(arg1, m);
3728
+ glMultMatrixf(m);
3729
+ return Qnil;
3730
+ }
3731
+
3732
+ static VALUE
3733
+ gl_MultMatrixd(obj,arg1)
3734
+ VALUE obj,arg1;
3735
+ {
3736
+ GLdouble m[4*4];
3737
+ ary2cmat4x4dbl(arg1, m);
3738
+ glMultMatrixd(m);
3739
+ return Qnil;
3740
+ }
3741
+
3742
+ static VALUE
3743
+ gl_Ortho(obj,arg1,arg2,arg3,arg4,arg5,arg6)
3744
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
3745
+ {
3746
+ GLdouble left;
3747
+ GLdouble right;
3748
+ GLdouble bottom;
3749
+ GLdouble top;
3750
+ GLdouble near_val;
3751
+ GLdouble far_val;
3752
+ left = (GLdouble)NUM2DBL(arg1);
3753
+ right = (GLdouble)NUM2DBL(arg2);
3754
+ bottom = (GLdouble)NUM2DBL(arg3);
3755
+ top = (GLdouble)NUM2DBL(arg4);
3756
+ near_val = (GLdouble)NUM2DBL(arg5);
3757
+ far_val = (GLdouble)NUM2DBL(arg6);
3758
+ glOrtho(left,right,bottom,top,near_val,far_val);
3759
+ return Qnil;
3760
+ }
3761
+
3762
+ static VALUE
3763
+ gl_PopMatrix(obj)
3764
+ VALUE obj;
3765
+ {
3766
+ glPopMatrix();
3767
+ return Qnil;
3768
+ }
3769
+
3770
+ static VALUE
3771
+ gl_PushMatrix(obj)
3772
+ VALUE obj;
3773
+ {
3774
+ glPushMatrix();
3775
+ return Qnil;
3776
+ }
3777
+
3778
+ static VALUE
3779
+ gl_Rotated(obj,arg1,arg2,arg3,arg4)
3780
+ VALUE obj,arg1,arg2,arg3,arg4;
3781
+ {
3782
+ GLdouble angle;
3783
+ GLdouble x;
3784
+ GLdouble y;
3785
+ GLdouble z;
3786
+ angle = (GLdouble)NUM2DBL(arg1);
3787
+ x = (GLdouble)NUM2DBL(arg2);
3788
+ y = (GLdouble)NUM2DBL(arg3);
3789
+ z = (GLdouble)NUM2DBL(arg4);
3790
+ glRotated(angle,x,y,z);
3791
+ return Qnil;
3792
+ }
3793
+
3794
+ static VALUE
3795
+ gl_Rotatef(obj,arg1,arg2,arg3,arg4)
3796
+ VALUE obj,arg1,arg2,arg3,arg4;
3797
+ {
3798
+ GLfloat angle;
3799
+ GLfloat x;
3800
+ GLfloat y;
3801
+ GLfloat z;
3802
+ angle = (GLfloat)NUM2DBL(arg1);
3803
+ x = (GLfloat)NUM2DBL(arg2);
3804
+ y = (GLfloat)NUM2DBL(arg3);
3805
+ z = (GLfloat)NUM2DBL(arg4);
3806
+ glRotatef(angle,x,y,z);
3807
+ return Qnil;
3808
+ }
3809
+
3810
+ static VALUE
3811
+ gl_Scaled(obj,arg1,arg2,arg3)
3812
+ VALUE obj,arg1,arg2,arg3;
3813
+ {
3814
+ GLdouble x;
3815
+ GLdouble y;
3816
+ GLdouble z;
3817
+ x = (GLdouble)NUM2DBL(arg1);
3818
+ y = (GLdouble)NUM2DBL(arg2);
3819
+ z = (GLdouble)NUM2DBL(arg3);
3820
+ glScaled(x,y,z);
3821
+ return Qnil;
3822
+ }
3823
+
3824
+ static VALUE
3825
+ gl_Scalef(obj,arg1,arg2,arg3)
3826
+ VALUE obj,arg1,arg2,arg3;
3827
+ {
3828
+ GLfloat x;
3829
+ GLfloat y;
3830
+ GLfloat z;
3831
+ x = (GLfloat)NUM2DBL(arg1);
3832
+ y = (GLfloat)NUM2DBL(arg2);
3833
+ z = (GLfloat)NUM2DBL(arg3);
3834
+ glScalef(x,y,z);
3835
+ return Qnil;
3836
+ }
3837
+
3838
+ static VALUE
3839
+ gl_Translated(obj,arg1,arg2,arg3)
3840
+ VALUE obj,arg1,arg2,arg3;
3841
+ {
3842
+ GLdouble x;
3843
+ GLdouble y;
3844
+ GLdouble z;
3845
+ x = (GLdouble)NUM2DBL(arg1);
3846
+ y = (GLdouble)NUM2DBL(arg2);
3847
+ z = (GLdouble)NUM2DBL(arg3);
3848
+ glTranslated(x,y,z);
3849
+ return Qnil;
3850
+ }
3851
+
3852
+ static VALUE
3853
+ gl_Translatef(obj,arg1,arg2,arg3)
3854
+ VALUE obj,arg1,arg2,arg3;
3855
+ {
3856
+ GLfloat x;
3857
+ GLfloat y;
3858
+ GLfloat z;
3859
+ x = (GLfloat)NUM2DBL(arg1);
3860
+ y = (GLfloat)NUM2DBL(arg2);
3861
+ z = (GLfloat)NUM2DBL(arg3);
3862
+ glTranslatef(x,y,z);
3863
+ return Qnil;
3864
+ }
3865
+
3866
+ static VALUE
3867
+ gl_Viewport(obj,arg1,arg2,arg3,arg4)
3868
+ VALUE obj,arg1,arg2,arg3,arg4;
3869
+ {
3870
+ GLint x;
3871
+ GLint y;
3872
+ GLsizei width;
3873
+ GLsizei height;
3874
+ x = (GLint)NUM2INT(arg1);
3875
+ y = (GLint)NUM2INT(arg2);
3876
+ width = (GLsizei)NUM2INT(arg3);
3877
+ height = (GLsizei)NUM2INT(arg4);
3878
+ glViewport(x,y,width,height);
3879
+ return Qnil;
3880
+ }
3881
+
3882
+ static VALUE
3883
+ gl_ArrayElement(obj,arg1)
3884
+ VALUE obj,arg1;
3885
+ {
3886
+ GLint i;
3887
+ i = (GLint)NUM2INT(arg1);
3888
+ glArrayElement(i);
3889
+ return Qnil;
3890
+ }
3891
+
3892
+ static VALUE g_Vertex_ptr;
3893
+ 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 = 0;
3899
+ VALUE g_SecondaryColor_ptr = 0;
3900
+ #define POINTER_FUNC(_func_) \
3901
+ static VALUE \
3902
+ gl_##_func_##Pointer(obj, arg1, arg2, arg3, arg4) \
3903
+ VALUE obj, arg1, arg2, arg3, arg4; \
3904
+ { \
3905
+ GLint size; \
3906
+ GLenum type; \
3907
+ GLsizei stride; \
3908
+ size = (GLint)NUM2INT(arg1); \
3909
+ type = (GLenum)NUM2INT(arg2); \
3910
+ stride = (GLsizei)NUM2INT(arg3); \
3911
+ Check_Type(arg4, T_STRING); \
3912
+ rb_str_freeze(arg4); \
3913
+ g_##_func_##_ptr = arg4; \
3914
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING(arg4)->ptr); \
3915
+ return Qnil; \
3916
+ }
3917
+
3918
+ POINTER_FUNC(Vertex)
3919
+ POINTER_FUNC(Color)
3920
+ POINTER_FUNC(TexCoord)
3921
+
3922
+ #undef POINTER_FUNC
3923
+
3924
+ static VALUE
3925
+ gl_DisableClientState(obj,arg1)
3926
+ VALUE obj,arg1;
3927
+ {
3928
+ GLenum cap;
3929
+ cap = (GLenum)NUM2INT(arg1);
3930
+ glDisableClientState(cap);
3931
+ return Qnil;
3932
+ }
3933
+
3934
+ static VALUE
3935
+ gl_DrawArrays(obj,arg1,arg2,arg3)
3936
+ VALUE obj,arg1,arg2,arg3;
3937
+ {
3938
+ GLenum mode;
3939
+ GLint first;
3940
+ GLsizei count;
3941
+ mode = (GLenum)NUM2INT(arg1);
3942
+ first = (GLint)NUM2INT(arg2);
3943
+ count = (GLsizei)NUM2INT(arg3);
3944
+ glDrawArrays(mode,first,count);
3945
+ return Qnil;
3946
+ }
3947
+
3948
+ static VALUE
3949
+ gl_DrawElements(obj,arg1,arg2,arg3,arg4)
3950
+ VALUE obj,arg1,arg2,arg3,arg4;
3951
+ {
3952
+ GLenum mode;
3953
+ GLsizei count;
3954
+ GLenum type;
3955
+ mode = (GLenum)NUM2INT(arg1);
3956
+ count = (GLsizei)NUM2INT(arg2);
3957
+ type = (GLenum)NUM2INT(arg3);
3958
+ Check_Type(arg4, T_STRING);
3959
+ glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr);
3960
+ return Qnil;
3961
+ }
3962
+
3963
+ static VALUE
3964
+ gl_EdgeFlagPointer(obj,arg1,arg2)
3965
+ VALUE obj,arg1,arg2;
3966
+ {
3967
+ GLsizei stride;
3968
+ stride = (GLsizei)NUM2INT(arg1);
3969
+ Check_Type(arg2, T_STRING);
3970
+ rb_str_freeze(arg2);
3971
+ g_EdgeFlag_ptr = arg2;
3972
+ glEdgeFlagPointer(stride, (const GLboolean*)RSTRING(arg2)->ptr);
3973
+ return Qnil;
3974
+ }
3975
+
3976
+ static VALUE
3977
+ gl_EnableClientState(obj,arg1)
3978
+ VALUE obj,arg1;
3979
+ {
3980
+ GLenum cap;
3981
+ cap = (GLenum)NUM2INT(arg1);
3982
+ glEnableClientState(cap);
3983
+ return Qnil;
3984
+ }
3985
+
3986
+ static VALUE
3987
+ gl_GetPointerv(obj,arg1,arg2)
3988
+ VALUE obj,arg1,arg2;
3989
+ {
3990
+ GLenum pname;
3991
+ pname = (GLenum)NUM2INT(arg1);
3992
+ switch (pname) {
3993
+ case GL_VERTEX_ARRAY_POINTER:
3994
+ return g_Vertex_ptr;
3995
+ case GL_NORMAL_ARRAY_POINTER:
3996
+ return g_Normal_ptr;
3997
+ case GL_COLOR_ARRAY_POINTER:
3998
+ return g_Color_ptr;
3999
+ case GL_INDEX_ARRAY_POINTER:
4000
+ return g_Index_ptr;
4001
+ case GL_TEXTURE_COORD_ARRAY_POINTER:
4002
+ return g_TexCoord_ptr;
4003
+ case GL_EDGE_FLAG_ARRAY_POINTER:
4004
+ return g_EdgeFlag_ptr;
4005
+ case GL_FOG_COORD_ARRAY_POINTER:
4006
+ return g_FogCoord_ptr;
4007
+ case GL_SECONDARY_COLOR_ARRAY_POINTER:
4008
+ return g_SecondaryColor_ptr;
4009
+ default:
4010
+ rb_raise(rb_eArgError, "Invalid pname %d",pname);
4011
+ break; /* not reached */
4012
+ }
4013
+ return Qnil;
4014
+ }
4015
+
4016
+ static VALUE
4017
+ gl_IndexPointer(obj,arg1,arg2,arg3)
4018
+ VALUE obj,arg1,arg2,arg3;
4019
+ {
4020
+ GLenum type;
4021
+ GLsizei stride;
4022
+ type = (GLenum)NUM2INT(arg1);
4023
+ stride = (GLsizei)NUM2INT(arg2);
4024
+ Check_Type(arg3, T_STRING);
4025
+ rb_str_freeze(arg3);
4026
+ g_Index_ptr = arg3;
4027
+ glIndexPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4028
+ return Qnil;
4029
+ }
4030
+
4031
+ static VALUE
4032
+ gl_InterleavedArrays(obj,arg1,arg2,arg3)
4033
+ VALUE obj,arg1,arg2,arg3;
4034
+ {
4035
+ GLenum format;
4036
+ GLsizei stride;
4037
+ format = (GLenum)NUM2INT(arg1);
4038
+ stride = (GLsizei)NUM2INT(arg2);
4039
+ Check_Type(arg3, T_STRING);
4040
+ glInterleavedArrays(format, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4041
+ return Qnil;
4042
+ }
4043
+
4044
+ static VALUE
4045
+ gl_NormalPointer(obj,arg1,arg2,arg3)
4046
+ VALUE obj,arg1,arg2,arg3;
4047
+ {
4048
+ GLenum type;
4049
+ GLsizei stride;
4050
+ type = (GLenum)NUM2INT(arg1);
4051
+ stride = (GLsizei)NUM2INT(arg2);
4052
+ Check_Type(arg3, T_STRING);
4053
+ rb_str_freeze(arg3);
4054
+ g_Normal_ptr = arg3;
4055
+ glNormalPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4056
+ return Qnil;
4057
+ }
4058
+
4059
+ static VALUE
4060
+ gl_PolygonOffset(obj,arg1,arg2)
4061
+ VALUE obj,arg1,arg2;
4062
+ {
4063
+ GLfloat factor;
4064
+ GLfloat units;
4065
+ factor = (GLfloat)NUM2DBL(arg1);
4066
+ units = (GLfloat)NUM2DBL(arg2);
4067
+ glPolygonOffset(factor,units);
4068
+ return Qnil;
4069
+ }
4070
+
4071
+ static VALUE
4072
+ gl_CopyTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
4073
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
4074
+ {
4075
+ GLenum target;
4076
+ GLint level;
4077
+ GLenum internalformat;
4078
+ GLint x;
4079
+ GLint y;
4080
+ GLsizei width;
4081
+ GLint border;
4082
+ target = (GLenum)NUM2INT(arg1);
4083
+ level = (GLint)NUM2INT(arg2);
4084
+ internalformat = (GLenum)NUM2INT(arg3);
4085
+ x = (GLint)NUM2INT(arg4);
4086
+ y = (GLint)NUM2INT(arg5);
4087
+ width = (GLsizei)NUM2INT(arg6);
4088
+ border = (GLint)NUM2INT(arg7);
4089
+ glCopyTexImage1D(target,level,internalformat,x,y,width,border);
4090
+ return Qnil;
4091
+ }
4092
+
4093
+ static VALUE
4094
+ gl_CopyTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
4095
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
4096
+ {
4097
+ GLenum target;
4098
+ GLint level;
4099
+ GLenum internalformat;
4100
+ GLint x;
4101
+ GLint y;
4102
+ GLsizei width;
4103
+ GLsizei height;
4104
+ GLint border;
4105
+ target = (GLenum)NUM2INT(arg1);
4106
+ level = (GLint)NUM2INT(arg2);
4107
+ internalformat = (GLenum)NUM2INT(arg3);
4108
+ x = (GLint)NUM2INT(arg4);
4109
+ y = (GLint)NUM2INT(arg5);
4110
+ width = (GLsizei)NUM2INT(arg6);
4111
+ height = (GLsizei)NUM2INT(arg7);
4112
+ border = (GLint)NUM2INT(arg8);
4113
+ glCopyTexImage2D(target,level,internalformat,x,y,width,height,border);
4114
+ return Qnil;
4115
+ }
4116
+
4117
+ static VALUE
4118
+ gl_CopyTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
4119
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
4120
+ {
4121
+ GLenum target;
4122
+ GLint level;
4123
+ GLint xoffset;
4124
+ GLint x;
4125
+ GLint y;
4126
+ GLsizei width;
4127
+ target = (GLenum)NUM2INT(arg1);
4128
+ level = (GLint)NUM2INT(arg2);
4129
+ xoffset = (GLint)NUM2INT(arg3);
4130
+ x = (GLint)NUM2INT(arg4);
4131
+ y = (GLint)NUM2INT(arg5);
4132
+ width = (GLsizei)NUM2INT(arg6);
4133
+ glCopyTexSubImage1D(target,level,xoffset,x,y,width);
4134
+ return Qnil;
4135
+ }
4136
+
4137
+ static VALUE
4138
+ gl_CopyTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
4139
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
4140
+ {
4141
+ GLenum target;
4142
+ GLint level;
4143
+ GLint xoffset;
4144
+ GLint yoffset;
4145
+ GLint x;
4146
+ GLint y;
4147
+ GLsizei width;
4148
+ GLsizei height;
4149
+ target = (GLenum)NUM2INT(arg1);
4150
+ level = (GLint)NUM2INT(arg2);
4151
+ xoffset = (GLint)NUM2INT(arg3);
4152
+ yoffset = (GLint)NUM2INT(arg4);
4153
+ x = (GLint)NUM2INT(arg5);
4154
+ y = (GLint)NUM2INT(arg6);
4155
+ width = (GLsizei)NUM2INT(arg7);
4156
+ height = (GLsizei)NUM2INT(arg8);
4157
+ glCopyTexSubImage2D(target,level,xoffset,yoffset,x,y,width,height);
4158
+ return Qnil;
4159
+ }
4160
+
4161
+ static VALUE
4162
+ gl_TexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
4163
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
4164
+ {
4165
+ GLenum target;
4166
+ GLint level;
4167
+ GLint xoffset;
4168
+ GLsizei width;
4169
+ GLenum format;
4170
+ GLenum type;
4171
+ const char *pixels;
4172
+ int size;
4173
+ int type_size;
4174
+ int format_size;
4175
+ target = (GLenum)NUM2INT(arg1);
4176
+ level = (GLint)NUM2INT(arg2);
4177
+ xoffset = (GLint)NUM2INT(arg3);
4178
+ width = (GLsizei)NUM2INT(arg4);
4179
+ format = (GLenum)NUM2INT(arg5);
4180
+ type = (GLenum)NUM2INT(arg6);
4181
+ if (TYPE(arg7) == T_STRING) {
4182
+ type_size = gltype_size(type) / 8;
4183
+ format_size = glformat_size(format);
4184
+ if (type_size < 0 || format_size == -1)
4185
+ return Qnil;
4186
+ size = type_size*format_size*width;
4187
+ if (RSTRING(arg7)->len < size)
4188
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len);
4189
+ pixels = RSTRING(arg7)->ptr;
4190
+ } else
4191
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg7));
4192
+ glTexSubImage1D(target,level,xoffset,width,format,type,pixels);
4193
+ return Qnil;
4194
+ }
4195
+
4196
+ static VALUE
4197
+ gl_TexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
4198
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
4199
+ {
4200
+ GLenum target;
4201
+ GLint level;
4202
+ GLint xoffset;
4203
+ GLint yoffset;
4204
+ GLsizei width;
4205
+ GLsizei height;
4206
+ GLenum format;
4207
+ GLenum type;
4208
+ const char *pixels;
4209
+ int size;
4210
+ int type_size;
4211
+ int format_size;
4212
+ target = (GLenum)NUM2INT(arg1);
4213
+ level = (GLint)NUM2INT(arg2);
4214
+ xoffset = (GLint)NUM2INT(arg3);
4215
+ yoffset = (GLint)NUM2INT(arg4);
4216
+ width = (GLsizei)NUM2INT(arg5);
4217
+ height = (GLsizei)NUM2INT(arg6);
4218
+ format = (GLenum)NUM2INT(arg7);
4219
+ type = (GLenum)NUM2INT(arg8);
4220
+ if (TYPE(arg9) == T_STRING) {
4221
+ type_size = gltype_size(type) / 8;
4222
+ format_size = glformat_size(format);
4223
+ if (type_size < 0 || format_size == -1)
4224
+ return Qnil;
4225
+ size = type_size*format_size*height*width;
4226
+ if (RSTRING(arg9)->len < size)
4227
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
4228
+ pixels = RSTRING(arg9)->ptr;
4229
+ } else
4230
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg9));
4231
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
4232
+ return Qnil;
4233
+ }
4234
+
4235
+ static VALUE
4236
+ gl_AreTexturesResident(obj,arg1)
4237
+ VALUE obj,arg1;
4238
+ {
4239
+ GLuint *textures;
4240
+ GLboolean *residences;
4241
+ GLsizei size;
4242
+ GLboolean r;
4243
+ VALUE retary;
4244
+ int i;
4245
+ if (TYPE(arg1) != T_ARRAY)
4246
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
4247
+ size = RARRAY(arg1)->len;
4248
+ textures = ALLOC_N(GLuint,size);
4249
+ residences = ALLOC_N(GLboolean,size);
4250
+ ary2cuint(arg1,textures,size);
4251
+ r = glAreTexturesResident(size,textures,residences);
4252
+ retary = rb_ary_new2(size);
4253
+ if (r==GL_TRUE) { /* all are resident */
4254
+ for(i=0;i<size;i++)
4255
+ rb_ary_push(retary, INT2FIX(GL_TRUE));
4256
+ } else {
4257
+ for(i=0;i<size;i++)
4258
+ rb_ary_push(retary, INT2FIX(residences[i]));
4259
+ }
4260
+ xfree(textures);
4261
+ xfree(residences);
4262
+ return retary;
4263
+ }
4264
+
4265
+ static VALUE
4266
+ gl_BindTexture(obj,arg1,arg2)
4267
+ VALUE obj,arg1,arg2;
4268
+ {
4269
+ GLenum target;
4270
+ GLuint texture;
4271
+ target = (GLenum)NUM2INT(arg1);
4272
+ texture = (GLuint)NUM2INT(arg2);
4273
+ glBindTexture(target,texture);
4274
+ return Qnil;
4275
+ }
4276
+
4277
+ static VALUE
4278
+ gl_DeleteTextures(obj,arg1)
4279
+ VALUE obj,arg1;
4280
+ {
4281
+ GLsizei n;
4282
+ GLuint *textures;
4283
+ RArray *ary;
4284
+ if (TYPE(arg1) != T_ARRAY)
4285
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
4286
+ ary = RARRAY(arg1);
4287
+ n = ary->len;
4288
+ textures = ALLOC_N(GLuint,n);
4289
+ ary2cuint(arg1,textures,n);
4290
+ glDeleteTextures( n, textures);
4291
+ xfree(textures);
4292
+ return Qnil;
4293
+ }
4294
+
4295
+ static VALUE
4296
+ gl_GenTextures(obj,arg1)
4297
+ VALUE obj,arg1;
4298
+ {
4299
+ GLsizei n;
4300
+ GLuint *textures;
4301
+ RArray *ret;
4302
+ int i;
4303
+ n = (GLsizei)NUM2INT(arg1);
4304
+ textures = ALLOC_N(GLuint, n);
4305
+ glGenTextures(n, textures);
4306
+ ret = RARRAY(rb_ary_new2(n));
4307
+ for (i = 0; i < n; i++)
4308
+ rb_ary_push((VALUE)ret, INT2NUM(textures[i]));
4309
+ xfree(textures);
4310
+ return (VALUE)ret;
4311
+ }
4312
+
4313
+ static VALUE
4314
+ gl_IsTexture(obj,arg1)
4315
+ VALUE obj,arg1;
4316
+ {
4317
+ GLuint texture;
4318
+ GLboolean ret;
4319
+ texture = (GLuint)NUM2INT(arg1);
4320
+ ret = glIsTexture(texture);
4321
+ return INT2NUM(ret);
4322
+ }
4323
+
4324
+ static VALUE
4325
+ gl_PrioritizeTextures(obj,arg1,arg2)
4326
+ VALUE obj,arg1,arg2;
4327
+ {
4328
+ GLuint *textures;
4329
+ GLclampf *priorities;
4330
+ GLsizei size;
4331
+ if (TYPE(arg1) != T_ARRAY)
4332
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
4333
+ if (TYPE(arg2) != T_ARRAY)
4334
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
4335
+ if ((size = RARRAY(arg1)->len) != RARRAY(arg2)->len)
4336
+ rb_raise(rb_eArgError, "passed arrays must have the same length");
4337
+ textures = ALLOC_N(GLuint,size);
4338
+ priorities = ALLOC_N(GLclampf,size);
4339
+ ary2cuint(arg1,textures,size);
4340
+ ary2cflt(arg2,priorities,size);
4341
+ glPrioritizeTextures(size,textures,priorities);
4342
+ xfree(textures);
4343
+ xfree(priorities);
4344
+ return Qnil;
4345
+ }
4346
+
4347
+ static VALUE
4348
+ gl_Indexub(obj,arg1)
4349
+ VALUE obj,arg1;
4350
+ {
4351
+ GLubyte c;
4352
+ c = (GLubyte)NUM2INT(arg1);
4353
+ glIndexub(c);
4354
+ return Qnil;
4355
+ }
4356
+
4357
+ static VALUE
4358
+ gl_Indexubv(obj,arg1)
4359
+ VALUE obj,arg1;
4360
+ {
4361
+ GLubyte c[1] = {0};
4362
+ if (TYPE(arg1) != T_ARRAY)
4363
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
4364
+ ary2cubyte(arg1,c,1);
4365
+ glIndexubv(c);
4366
+ return Qnil;
4367
+ }
4368
+
4369
+ static VALUE
4370
+ gl_PopClientAttrib(obj)
4371
+ VALUE obj;
4372
+ {
4373
+ glPopClientAttrib();
4374
+ return Qnil;
4375
+ }
4376
+
4377
+ static VALUE
4378
+ gl_PushClientAttrib(obj,arg1)
4379
+ VALUE obj,arg1;
4380
+ {
4381
+ GLbitfield mask;
4382
+ mask = (GLbitfield)NUM2INT(arg1);
4383
+ glPushClientAttrib(mask);
4384
+ return Qnil;
4385
+ }
4386
+
4387
+ /* additional functions */
4388
+
4389
+ #define GLCOLOR_VFUNC(_type_) \
4390
+ static VALUE \
4391
+ gl_Color##_type_##v(argc,argv,obj) \
4392
+ int argc; \
4393
+ VALUE *argv; \
4394
+ VALUE obj; \
4395
+ { \
4396
+ int num; \
4397
+ VALUE args[4]; \
4398
+ RArray *ary; \
4399
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4400
+ case 1: \
4401
+ if (TYPE(args[0]) == T_ARRAY) { \
4402
+ ary = RARRAY(args[0]); \
4403
+ switch (ary->len) { \
4404
+ case 3: \
4405
+ gl_Color3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4406
+ break; \
4407
+ case 4: \
4408
+ gl_Color4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4409
+ break; \
4410
+ default: \
4411
+ rb_raise(rb_eArgError, "array length:%d", ary->len); \
4412
+ } \
4413
+ } \
4414
+ else \
4415
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4416
+ break; \
4417
+ case 3: \
4418
+ gl_Color3##_type_(obj,args[0], args[1], args[2]); \
4419
+ break; \
4420
+ case 4: \
4421
+ gl_Color4##_type_(obj,args[0], args[1], args[2], args[3]); \
4422
+ break; \
4423
+ default: \
4424
+ rb_raise(rb_eArgError, "arg length:%d", num); \
4425
+ } \
4426
+ return Qnil; \
4427
+ }
4428
+
4429
+ GLCOLOR_VFUNC(b)
4430
+ GLCOLOR_VFUNC(d)
4431
+ GLCOLOR_VFUNC(f)
4432
+ GLCOLOR_VFUNC(i)
4433
+ GLCOLOR_VFUNC(s)
4434
+ GLCOLOR_VFUNC(ub)
4435
+ GLCOLOR_VFUNC(ui)
4436
+ GLCOLOR_VFUNC(us)
4437
+ #undef GLCOLOR_VFUNC
4438
+
4439
+ #define GLNORMAL_VFUNC(_type_) \
4440
+ static VALUE \
4441
+ gl_Normal##_type_##v(argc,argv,obj) \
4442
+ int argc; \
4443
+ VALUE *argv; \
4444
+ VALUE obj; \
4445
+ { \
4446
+ int num; \
4447
+ VALUE args[3]; \
4448
+ RArray* ary; \
4449
+ switch (num = rb_scan_args(argc, argv, "12", &args[0], &args[1], &args[2])) { \
4450
+ case 1: \
4451
+ if (TYPE(args[0]) == T_ARRAY) { \
4452
+ ary = RARRAY(args[0]); \
4453
+ switch (ary->len) { \
4454
+ case 3: \
4455
+ gl_Normal3##_type_(obj,ary->ptr[0], ary->ptr[1],ary->ptr[2]); \
4456
+ break; \
4457
+ default: \
4458
+ rb_raise(rb_eArgError, "array length:%d", ary->len); \
4459
+ } \
4460
+ } \
4461
+ else \
4462
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4463
+ break; \
4464
+ case 3: \
4465
+ gl_Normal3##_type_(obj,args[0], args[1], args[2]); \
4466
+ break; \
4467
+ default: \
4468
+ rb_raise(rb_eArgError, "arg length:%d",num); \
4469
+ } \
4470
+ return Qnil; \
4471
+ }
4472
+
4473
+ GLNORMAL_VFUNC(b)
4474
+ GLNORMAL_VFUNC(d)
4475
+ GLNORMAL_VFUNC(f)
4476
+ GLNORMAL_VFUNC(i)
4477
+ GLNORMAL_VFUNC(s)
4478
+ #undef GLNORMAL_VFUNC
4479
+
4480
+ #define GLRASTERPOS_VFUNC(_type_) \
4481
+ static VALUE \
4482
+ gl_RasterPos##_type_##v(argc,argv,obj) \
4483
+ int argc; \
4484
+ VALUE *argv; \
4485
+ VALUE obj; \
4486
+ { \
4487
+ int num; \
4488
+ VALUE args[4]; \
4489
+ RArray *ary; \
4490
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4491
+ case 1: \
4492
+ if (TYPE(args[0]) == T_ARRAY) { \
4493
+ ary = RARRAY(args[0]); \
4494
+ switch (ary->len) { \
4495
+ case 2: \
4496
+ gl_RasterPos2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
4497
+ break; \
4498
+ case 3: \
4499
+ gl_RasterPos3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4500
+ break; \
4501
+ case 4: \
4502
+ gl_RasterPos4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4503
+ break; \
4504
+ default: \
4505
+ rb_raise(rb_eArgError, "array length:%d", num); \
4506
+ } \
4507
+ } \
4508
+ else \
4509
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4510
+ break; \
4511
+ case 2: \
4512
+ gl_RasterPos2##_type_(obj,args[0], args[1]); \
4513
+ break; \
4514
+ case 3: \
4515
+ gl_RasterPos3##_type_(obj,args[0], args[1], args[2]); \
4516
+ break; \
4517
+ case 4: \
4518
+ gl_RasterPos4##_type_(obj,args[0], args[1], args[2], args[3]); \
4519
+ break; \
4520
+ default: \
4521
+ rb_raise(rb_eArgError, "too many arguments"); \
4522
+ } \
4523
+ return Qnil; \
4524
+ }
4525
+
4526
+ GLRASTERPOS_VFUNC(d)
4527
+ GLRASTERPOS_VFUNC(f)
4528
+ GLRASTERPOS_VFUNC(i)
4529
+ GLRASTERPOS_VFUNC(s)
4530
+ #undef GLRASTERPOS_VFUNC
4531
+
4532
+ #define GLRECT_VFUNC(_type_) \
4533
+ static VALUE \
4534
+ gl_Rect##_type_##v(argc,argv,obj) \
4535
+ int argc; \
4536
+ VALUE *argv; \
4537
+ VALUE obj; \
4538
+ { \
4539
+ int num; \
4540
+ VALUE args[4]; \
4541
+ RArray *ary; \
4542
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4543
+ case 1: \
4544
+ if (TYPE(args[0]) == T_ARRAY) { \
4545
+ ary = RARRAY(args[0]); \
4546
+ switch (ary->len) { \
4547
+ case 4: \
4548
+ gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4549
+ break; \
4550
+ default: \
4551
+ rb_raise(rb_eArgError, "array length:%d", ary->len); \
4552
+ } \
4553
+ } \
4554
+ else \
4555
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4556
+ break; \
4557
+ case 4: \
4558
+ gl_Rect##_type_(obj,args[0], args[1], args[2], args[3]); \
4559
+ break; \
4560
+ default: \
4561
+ rb_raise(rb_eArgError, "arg length:%d", num); \
4562
+ } \
4563
+ return Qnil; \
4564
+ }
4565
+
4566
+ GLRECT_VFUNC(d)
4567
+ GLRECT_VFUNC(f)
4568
+ GLRECT_VFUNC(i)
4569
+ GLRECT_VFUNC(s)
4570
+ #undef GLRECT_VFUNC
4571
+
4572
+ #define GLTEXCOORD_VFUNC(_type_) \
4573
+ static VALUE \
4574
+ gl_TexCoord##_type_##v(argc,argv,obj) \
4575
+ int argc; \
4576
+ VALUE *argv; \
4577
+ VALUE obj; \
4578
+ { \
4579
+ int num; \
4580
+ VALUE args[4]; \
4581
+ RArray *ary; \
4582
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4583
+ case 1: \
4584
+ if (TYPE(args[0]) == T_ARRAY) { \
4585
+ ary = RARRAY(args[0]); \
4586
+ switch (ary->len) { \
4587
+ case 2: \
4588
+ gl_TexCoord2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
4589
+ break; \
4590
+ case 3: \
4591
+ gl_TexCoord3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4592
+ break; \
4593
+ case 4: \
4594
+ gl_TexCoord4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4595
+ break; \
4596
+ default: \
4597
+ rb_raise(rb_eArgError, "array length:%d", num); \
4598
+ } \
4599
+ } \
4600
+ else \
4601
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4602
+ break; \
4603
+ case 2: \
4604
+ gl_TexCoord2##_type_(obj,args[0], args[1]); \
4605
+ break; \
4606
+ case 3: \
4607
+ gl_TexCoord3##_type_(obj,args[0], args[1], args[2]); \
4608
+ break; \
4609
+ case 4: \
4610
+ gl_TexCoord4##_type_(obj,args[0], args[1], args[2], args[3]); \
4611
+ break; \
4612
+ default: \
4613
+ rb_raise(rb_eArgError, "too many arguments"); \
4614
+ break; \
4615
+ } \
4616
+ return Qnil; \
4617
+ }
4618
+
4619
+ GLTEXCOORD_VFUNC(d)
4620
+ GLTEXCOORD_VFUNC(f)
4621
+ GLTEXCOORD_VFUNC(i)
4622
+ GLTEXCOORD_VFUNC(s)
4623
+ #undef GLTEXCOORD_VFUNC
4624
+
4625
+ #define GLVERTEX_VFUNC(_type_) \
4626
+ static VALUE \
4627
+ gl_Vertex##_type_##v(argc,argv,obj) \
4628
+ int argc; \
4629
+ VALUE *argv; \
4630
+ VALUE obj; \
4631
+ { \
4632
+ VALUE args[4]; \
4633
+ RArray *ary; \
4634
+ switch (rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4635
+ case 1: \
4636
+ if (TYPE(args[0]) == T_ARRAY) { \
4637
+ ary = RARRAY(args[0]); \
4638
+ switch (ary->len) { \
4639
+ case 2: \
4640
+ gl_Vertex2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
4641
+ break; \
4642
+ case 3: \
4643
+ gl_Vertex3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4644
+ break; \
4645
+ case 4: \
4646
+ gl_Vertex4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4647
+ break; \
4648
+ default: \
4649
+ rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%d", ary->len); \
4650
+ } \
4651
+ } \
4652
+ else \
4653
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4654
+ break; \
4655
+ case 2: \
4656
+ gl_Vertex2##_type_(obj,args[0], args[1]); \
4657
+ break; \
4658
+ case 3: \
4659
+ gl_Vertex3##_type_(obj,args[0], args[1], args[2]); \
4660
+ break; \
4661
+ case 4: \
4662
+ gl_Vertex4##_type_(obj,args[0], args[1], args[2], args[3]); \
4663
+ break; \
4664
+ default: \
4665
+ rb_raise(rb_eArgError, "too many arguments"); \
4666
+ break; \
4667
+ } \
4668
+ return Qnil; \
4669
+ }
4670
+
4671
+ GLVERTEX_VFUNC(d)
4672
+ GLVERTEX_VFUNC(f)
4673
+ GLVERTEX_VFUNC(i)
4674
+ GLVERTEX_VFUNC(s)
4675
+ #undef GLVERTEX_VFUNC
4676
+
4677
+ /* */
4678
+
4679
+ static VALUE
4680
+ gl_LightModel(obj,arg1,arg2)
4681
+ VALUE obj,arg1,arg2;
4682
+ {
4683
+ if (TYPE(arg2) == T_ARRAY)
4684
+ gl_LightModelfv(obj,arg1,arg2);
4685
+ else
4686
+ gl_LightModelf(obj,arg1,arg2);
4687
+
4688
+ return Qnil;
4689
+ }
4690
+
4691
+ static VALUE
4692
+ gl_Material(obj,arg1,arg2,arg3)
4693
+ VALUE obj,arg1,arg2,arg3;
4694
+ {
4695
+ if (TYPE(arg3) == T_ARRAY)
4696
+ gl_Materialfv(obj,arg1,arg2,arg3);
4697
+ else
4698
+ gl_Materialf(obj,arg1,arg2,arg3);
4699
+
4700
+ return Qnil;
4701
+ }
4702
+
4703
+ static VALUE
4704
+ gl_Fog(obj,arg1,arg2)
4705
+ VALUE obj,arg1,arg2;
4706
+ {
4707
+ if (TYPE(arg2) == T_ARRAY)
4708
+ gl_Fogfv(obj,arg1,arg2);
4709
+ else
4710
+ gl_Fogf(obj,arg1,arg2);
4711
+
4712
+ return Qnil;
4713
+ }
4714
+
4715
+ static VALUE
4716
+ gl_Light(obj,arg1,arg2,arg3)
4717
+ VALUE obj,arg1,arg2,arg3;
4718
+ {
4719
+ if (TYPE(arg3) == T_ARRAY)
4720
+ gl_Lightfv(obj,arg1,arg2,arg3);
4721
+ else
4722
+ gl_Lightf(obj,arg1,arg2,arg3);
4723
+
4724
+ return Qnil;
4725
+ }
4726
+
4727
+ static VALUE
4728
+ gl_TexParameter(obj,arg1,arg2,arg3)
4729
+ VALUE obj,arg1,arg2,arg3;
4730
+ {
4731
+ if (TYPE(arg3) == T_ARRAY)
4732
+ gl_TexParameterfv(obj,arg1,arg2,arg3);
4733
+ else
4734
+ gl_TexParameterf(obj,arg1,arg2,arg3);
4735
+
4736
+ return Qnil;
4737
+ }
4738
+
4739
+ static VALUE
4740
+ gl_TexEnv(obj,arg1,arg2,arg3)
4741
+ VALUE obj,arg1,arg2,arg3;
4742
+ {
4743
+ if (TYPE(arg3) == T_ARRAY)
4744
+ gl_TexEnvfv(obj,arg1,arg2,arg3);
4745
+ else
4746
+ gl_TexEnvf(obj,arg1,arg2,arg3);
4747
+
4748
+ return Qnil;
4749
+ }
4750
+
4751
+ static VALUE
4752
+ gl_TexGen(obj,arg1,arg2,arg3)
4753
+ VALUE obj,arg1,arg2,arg3;
4754
+ {
4755
+ if (TYPE(arg3) == T_ARRAY)
4756
+ gl_TexGenfv(obj,arg1,arg2,arg3);
4757
+ else
4758
+ gl_TexGenf(obj,arg1,arg2,arg3);
4759
+
4760
+ return Qnil;
4761
+ }
4762
+
4763
+ /* init */
4764
+ void gl_init_functions_1_0__1_1(VALUE module)
4765
+ {
4766
+ /* OpenGL 1.0 functions */
4767
+ rb_define_module_function(module, "glNewList", gl_NewList, 2);
4768
+ rb_define_module_function(module, "glEndList", gl_EndList, 0);
4769
+ rb_define_module_function(module, "glCallList", gl_CallList, 1);
4770
+ rb_define_module_function(module, "glCallLists", gl_CallLists, 1);
4771
+ rb_define_module_function(module, "glDeleteLists", gl_DeleteLists, 2);
4772
+ rb_define_module_function(module, "glGenLists", gl_GenLists, 1);
4773
+ rb_define_module_function(module, "glListBase", gl_ListBase, 1);
4774
+ rb_define_module_function(module, "glBegin", gl_Begin, 1);
4775
+ rb_define_module_function(module, "glBitmap", gl_Bitmap, 7);
4776
+ rb_define_module_function(module, "glColor3b", gl_Color3b, 3);
4777
+ rb_define_module_function(module, "glColor3d", gl_Color3d, 3);
4778
+ rb_define_module_function(module, "glColor3f", gl_Color3f, 3);
4779
+ rb_define_module_function(module, "glColor3i", gl_Color3i, 3);
4780
+ rb_define_module_function(module, "glColor3s", gl_Color3s, 3);
4781
+ rb_define_module_function(module, "glColor3ub", gl_Color3ub, 3);
4782
+ rb_define_module_function(module, "glColor3ui", gl_Color3ui, 3);
4783
+ rb_define_module_function(module, "glColor3us", gl_Color3us, 3);
4784
+ rb_define_module_function(module, "glColor4b", gl_Color4b, 4);
4785
+ rb_define_module_function(module, "glColor4d", gl_Color4d, 4);
4786
+ rb_define_module_function(module, "glColor4f", gl_Color4f, 4);
4787
+ rb_define_module_function(module, "glColor4i", gl_Color4i, 4);
4788
+ rb_define_module_function(module, "glColor4s", gl_Color4s, 4);
4789
+ rb_define_module_function(module, "glColor4ub", gl_Color4ub, 4);
4790
+ rb_define_module_function(module, "glColor4ui", gl_Color4ui, 4);
4791
+ rb_define_module_function(module, "glColor4us", gl_Color4us, 4);
4792
+ rb_define_module_function(module, "glEdgeFlag", gl_EdgeFlag, 1);
4793
+ rb_define_module_function(module, "glEdgeFlagv", gl_EdgeFlagv, 1);
4794
+ rb_define_module_function(module, "glEnd", gl_End, 0);
4795
+ rb_define_module_function(module, "glIndexd", gl_Indexd, 1);
4796
+ rb_define_module_function(module, "glIndexdv", gl_Indexdv, 1);
4797
+ rb_define_module_function(module, "glIndexf", gl_Indexf, 1);
4798
+ rb_define_module_function(module, "glIndexfv", gl_Indexfv, 1);
4799
+ rb_define_module_function(module, "glIndexi", gl_Indexi, 1);
4800
+ rb_define_module_function(module, "glIndexiv", gl_Indexiv, 1);
4801
+ rb_define_module_function(module, "glIndexs", gl_Indexs, 1);
4802
+ rb_define_module_function(module, "glIndexsv", gl_Indexsv, 1);
4803
+ rb_define_module_function(module, "glNormal3b", gl_Normal3b, 3);
4804
+ rb_define_module_function(module, "glNormal3d", gl_Normal3d, 3);
4805
+ rb_define_module_function(module, "glNormal3f", gl_Normal3f, 3);
4806
+ rb_define_module_function(module, "glNormal3i", gl_Normal3i, 3);
4807
+ rb_define_module_function(module, "glNormal3s", gl_Normal3s, 3);
4808
+ rb_define_module_function(module, "glRasterPos2d", gl_RasterPos2d, 2);
4809
+ rb_define_module_function(module, "glRasterPos2f", gl_RasterPos2f, 2);
4810
+ rb_define_module_function(module, "glRasterPos2i", gl_RasterPos2i, 2);
4811
+ rb_define_module_function(module, "glRasterPos2s", gl_RasterPos2s, 2);
4812
+ rb_define_module_function(module, "glRasterPos3d", gl_RasterPos3d, 3);
4813
+ rb_define_module_function(module, "glRasterPos3f", gl_RasterPos3f, 3);
4814
+ rb_define_module_function(module, "glRasterPos3i", gl_RasterPos3i, 3);
4815
+ rb_define_module_function(module, "glRasterPos3s", gl_RasterPos3s, 3);
4816
+ rb_define_module_function(module, "glRasterPos4d", gl_RasterPos4d, 4);
4817
+ rb_define_module_function(module, "glRasterPos4f", gl_RasterPos4f, 4);
4818
+ rb_define_module_function(module, "glRasterPos4i", gl_RasterPos4i, 4);
4819
+ rb_define_module_function(module, "glRasterPos4s", gl_RasterPos4s, 4);
4820
+ rb_define_module_function(module, "glRectd", gl_Rectd, 4);
4821
+ rb_define_module_function(module, "glRectf", gl_Rectf, 4);
4822
+ rb_define_module_function(module, "glRecti", gl_Recti, 4);
4823
+ rb_define_module_function(module, "glRects", gl_Rects, 4);
4824
+ rb_define_module_function(module, "glTexCoord1d", gl_TexCoord1d, 1);
4825
+ rb_define_module_function(module, "glTexCoord1f", gl_TexCoord1f, 1);
4826
+ rb_define_module_function(module, "glTexCoord1i", gl_TexCoord1i, 1);
4827
+ rb_define_module_function(module, "glTexCoord1s", gl_TexCoord1s, 1);
4828
+ rb_define_module_function(module, "glTexCoord2d", gl_TexCoord2d, 2);
4829
+ rb_define_module_function(module, "glTexCoord2f", gl_TexCoord2f, 2);
4830
+ rb_define_module_function(module, "glTexCoord2i", gl_TexCoord2i, 2);
4831
+ rb_define_module_function(module, "glTexCoord2s", gl_TexCoord2s, 2);
4832
+ rb_define_module_function(module, "glTexCoord3d", gl_TexCoord3d, 3);
4833
+ rb_define_module_function(module, "glTexCoord3f", gl_TexCoord3f, 3);
4834
+ rb_define_module_function(module, "glTexCoord3i", gl_TexCoord3i, 3);
4835
+ rb_define_module_function(module, "glTexCoord3s", gl_TexCoord3s, 3);
4836
+ rb_define_module_function(module, "glTexCoord4d", gl_TexCoord4d, 4);
4837
+ rb_define_module_function(module, "glTexCoord4f", gl_TexCoord4f, 4);
4838
+ rb_define_module_function(module, "glTexCoord4i", gl_TexCoord4i, 4);
4839
+ rb_define_module_function(module, "glTexCoord4s", gl_TexCoord4s, 4);
4840
+ rb_define_module_function(module, "glVertex2d", gl_Vertex2d, 2);
4841
+ rb_define_module_function(module, "glVertex2f", gl_Vertex2f, 2);
4842
+ rb_define_module_function(module, "glVertex2i", gl_Vertex2i, 2);
4843
+ rb_define_module_function(module, "glVertex2s", gl_Vertex2s, 2);
4844
+ rb_define_module_function(module, "glVertex3d", gl_Vertex3d, 3);
4845
+ rb_define_module_function(module, "glVertex3f", gl_Vertex3f, 3);
4846
+ rb_define_module_function(module, "glVertex3i", gl_Vertex3i, 3);
4847
+ rb_define_module_function(module, "glVertex3s", gl_Vertex3s, 3);
4848
+ rb_define_module_function(module, "glVertex4d", gl_Vertex4d, 4);
4849
+ rb_define_module_function(module, "glVertex4f", gl_Vertex4f, 4);
4850
+ rb_define_module_function(module, "glVertex4i", gl_Vertex4i, 4);
4851
+ rb_define_module_function(module, "glVertex4s", gl_Vertex4s, 4);
4852
+ rb_define_module_function(module, "glClipPlane", gl_ClipPlane, 2);
4853
+ rb_define_module_function(module, "glColorMaterial", gl_ColorMaterial, 2);
4854
+ rb_define_module_function(module, "glCullFace", gl_CullFace, 1);
4855
+ rb_define_module_function(module, "glFogf", gl_Fogf, 2);
4856
+ rb_define_module_function(module, "glFogfv", gl_Fogfv, 2);
4857
+ rb_define_module_function(module, "glFogi", gl_Fogi, 2);
4858
+ rb_define_module_function(module, "glFogiv", gl_Fogiv, 2);
4859
+ rb_define_module_function(module, "glFrontFace", gl_FrontFace, 1);
4860
+ rb_define_module_function(module, "glHint", gl_Hint, 2);
4861
+ rb_define_module_function(module, "glLightf", gl_Lightf, 3);
4862
+ rb_define_module_function(module, "glLightfv", gl_Lightfv, 3);
4863
+ rb_define_module_function(module, "glLighti", gl_Lighti, 3);
4864
+ rb_define_module_function(module, "glLightiv", gl_Lightiv, 3);
4865
+ rb_define_module_function(module, "glLightModelf", gl_LightModelf, 2);
4866
+ rb_define_module_function(module, "glLightModelfv", gl_LightModelfv, 2);
4867
+ rb_define_module_function(module, "glLightModeli", gl_LightModeli, 2);
4868
+ rb_define_module_function(module, "glLightModeliv", gl_LightModeliv, 2);
4869
+ rb_define_module_function(module, "glLineStipple", gl_LineStipple, 2);
4870
+ rb_define_module_function(module, "glLineWidth", gl_LineWidth, 1);
4871
+ rb_define_module_function(module, "glMaterialf", gl_Materialf, 3);
4872
+ rb_define_module_function(module, "glMaterialfv", gl_Materialfv, 3);
4873
+ rb_define_module_function(module, "glMateriali", gl_Materiali, 3);
4874
+ rb_define_module_function(module, "glMaterialiv", gl_Materialiv, 3);
4875
+ rb_define_module_function(module, "glPointSize", gl_PointSize, 1);
4876
+ rb_define_module_function(module, "glPolygonMode", gl_PolygonMode, 2);
4877
+ rb_define_module_function(module, "glPolygonStipple", gl_PolygonStipple, 1);
4878
+ rb_define_module_function(module, "glScissor", gl_Scissor, 4);
4879
+ rb_define_module_function(module, "glShadeModel", gl_ShadeModel, 1);
4880
+ rb_define_module_function(module, "glTexParameterf", gl_TexParameterf, 3);
4881
+ rb_define_module_function(module, "glTexParameterfv", gl_TexParameterfv, 3);
4882
+ rb_define_module_function(module, "glTexParameteri", gl_TexParameteri, 3);
4883
+ rb_define_module_function(module, "glTexParameteriv", gl_TexParameteriv, 3);
4884
+ rb_define_module_function(module, "glTexImage1D", gl_TexImage1D, 8);
4885
+ rb_define_module_function(module, "glTexImage2D", gl_TexImage2D, 9);
4886
+ rb_define_module_function(module, "glTexEnvf", gl_TexEnvf, 3);
4887
+ rb_define_module_function(module, "glTexEnvfv", gl_TexEnvfv, 3);
4888
+ rb_define_module_function(module, "glTexEnvi", gl_TexEnvi, 3);
4889
+ rb_define_module_function(module, "glTexEnviv", gl_TexEnviv, 3);
4890
+ rb_define_module_function(module, "glTexGend", gl_TexGend, 3);
4891
+ rb_define_module_function(module, "glTexGendv", gl_TexGendv, 3);
4892
+ rb_define_module_function(module, "glTexGenf", gl_TexGenf, 3);
4893
+ rb_define_module_function(module, "glTexGenfv", gl_TexGenfv, 3);
4894
+ rb_define_module_function(module, "glTexGeni", gl_TexGeni, 3);
4895
+ rb_define_module_function(module, "glTexGeniv", gl_TexGeniv, 3);
4896
+ rb_define_module_function(module, "glFeedbackBuffer", gl_FeedbackBuffer, -1);
4897
+ rb_define_module_function(module, "glSelectBuffer", gl_SelectBuffer, -1);
4898
+ rb_define_module_function(module, "glRenderMode", gl_RenderMode, 1);
4899
+ rb_define_module_function(module, "glInitNames", gl_InitNames, 0);
4900
+ rb_define_module_function(module, "glLoadName", gl_LoadName, 1);
4901
+ rb_define_module_function(module, "glPassThrough", gl_PassThrough, 1);
4902
+ rb_define_module_function(module, "glPopName", gl_PopName, 0);
4903
+ rb_define_module_function(module, "glPushName", gl_PushName, 1);
4904
+ rb_define_module_function(module, "glDrawBuffer", gl_DrawBuffer, 1);
4905
+ rb_define_module_function(module, "glClear", gl_Clear, 1);
4906
+ rb_define_module_function(module, "glClearAccum", gl_ClearAccum, 4);
4907
+ rb_define_module_function(module, "glClearIndex", gl_ClearIndex, 1);
4908
+ rb_define_module_function(module, "glClearColor", gl_ClearColor, 4);
4909
+ rb_define_module_function(module, "glClearStencil", gl_ClearStencil, 1);
4910
+ rb_define_module_function(module, "glClearDepth", gl_ClearDepth, 1);
4911
+ rb_define_module_function(module, "glStencilMask", gl_StencilMask, 1);
4912
+ rb_define_module_function(module, "glColorMask", gl_ColorMask, 4);
4913
+ rb_define_module_function(module, "glDepthMask", gl_DepthMask, 1);
4914
+ rb_define_module_function(module, "glIndexMask", gl_IndexMask, 1);
4915
+ rb_define_module_function(module, "glAccum", gl_Accum, 2);
4916
+ rb_define_module_function(module, "glDisable", gl_Disable, 1);
4917
+ rb_define_module_function(module, "glEnable", gl_Enable, 1);
4918
+ rb_define_module_function(module, "glFinish", gl_Finish, 0);
4919
+ rb_define_module_function(module, "glFlush", gl_Flush, 0);
4920
+ rb_define_module_function(module, "glPopAttrib", gl_PopAttrib, 0);
4921
+ rb_define_module_function(module, "glPushAttrib", gl_PushAttrib, 1);
4922
+ rb_define_module_function(module, "glMap1d", gl_Map1d, 6);
4923
+ rb_define_module_function(module, "glMap1f", gl_Map1f, 6);
4924
+ rb_define_module_function(module, "glMap2d", gl_Map2d, 10);
4925
+ rb_define_module_function(module, "glMap2f", gl_Map2f, 10);
4926
+ rb_define_module_function(module, "glMapGrid1d", gl_MapGrid1d, 3);
4927
+ rb_define_module_function(module, "glMapGrid1f", gl_MapGrid1f, 3);
4928
+ rb_define_module_function(module, "glMapGrid2d", gl_MapGrid2d, 6);
4929
+ rb_define_module_function(module, "glMapGrid2f", gl_MapGrid2f, 6);
4930
+ rb_define_module_function(module, "glEvalCoord1d", gl_EvalCoord1d, 1);
4931
+ rb_define_module_function(module, "glEvalCoord1dv", gl_EvalCoord1dv, 1);
4932
+ rb_define_module_function(module, "glEvalCoord1f", gl_EvalCoord1f, 1);
4933
+ rb_define_module_function(module, "glEvalCoord1fv", gl_EvalCoord1fv, 1);
4934
+ rb_define_module_function(module, "glEvalCoord2d", gl_EvalCoord2d, 2);
4935
+ rb_define_module_function(module, "glEvalCoord2dv", gl_EvalCoord2dv, 1);
4936
+ rb_define_module_function(module, "glEvalCoord2f", gl_EvalCoord2f, 2);
4937
+ rb_define_module_function(module, "glEvalCoord2fv", gl_EvalCoord2fv, 1);
4938
+ rb_define_module_function(module, "glEvalMesh1", gl_EvalMesh1, 3);
4939
+ rb_define_module_function(module, "glEvalPoint1", gl_EvalPoint1, 1);
4940
+ rb_define_module_function(module, "glEvalMesh2", gl_EvalMesh2, 5);
4941
+ rb_define_module_function(module, "glEvalPoint2", gl_EvalPoint2, 2);
4942
+ rb_define_module_function(module, "glAlphaFunc", gl_AlphaFunc, 2);
4943
+ rb_define_module_function(module, "glBlendFunc", gl_BlendFunc, 2);
4944
+ rb_define_module_function(module, "glLogicOp", gl_LogicOp, 1);
4945
+ rb_define_module_function(module, "glStencilFunc", gl_StencilFunc, 3);
4946
+ rb_define_module_function(module, "glStencilOp", gl_StencilOp, 3);
4947
+ rb_define_module_function(module, "glDepthFunc", gl_DepthFunc, 1);
4948
+ rb_define_module_function(module, "glPixelZoom", gl_PixelZoom, 2);
4949
+ rb_define_module_function(module, "glPixelTransferf", gl_PixelTransferf, 2);
4950
+ rb_define_module_function(module, "glPixelTransferi", gl_PixelTransferi, 2);
4951
+ rb_define_module_function(module, "glPixelStoref", gl_PixelStoref, 2);
4952
+ rb_define_module_function(module, "glPixelStorei", gl_PixelStorei, 2);
4953
+ rb_define_module_function(module, "glPixelMapfv", gl_PixelMapfv, 2);
4954
+ rb_define_module_function(module, "glPixelMapuiv", gl_PixelMapuiv, 2);
4955
+ rb_define_module_function(module, "glPixelMapusv", gl_PixelMapusv, 2);
4956
+ rb_define_module_function(module, "glReadBuffer", gl_ReadBuffer, 1);
4957
+ rb_define_module_function(module, "glCopyPixels", gl_CopyPixels, 5);
4958
+ rb_define_module_function(module, "glReadPixels", gl_ReadPixels, 6);
4959
+ rb_define_module_function(module, "glDrawPixels", gl_DrawPixels, 5);
4960
+ rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv, 2);
4961
+ rb_define_module_function(module, "glGetClipPlane", gl_GetClipPlane, 1);
4962
+ rb_define_module_function(module, "glGetDoublev", gl_GetDoublev, 1);
4963
+ rb_define_module_function(module, "glGetError", gl_GetError, 0);
4964
+ rb_define_module_function(module, "glGetFloatv", gl_GetFloatv, 2);
4965
+ rb_define_module_function(module, "glGetIntegerv", gl_GetIntegerv, 2);
4966
+ rb_define_module_function(module, "glGetLightfv", gl_GetLightfv, 2);
4967
+ rb_define_module_function(module, "glGetLightiv", gl_GetLightiv, 2);
4968
+ rb_define_module_function(module, "glGetMapdv", gl_GetMapdv, 2);
4969
+ rb_define_module_function(module, "glGetMapfv", gl_GetMapfv, 2);
4970
+ rb_define_module_function(module, "glGetMapiv", gl_GetMapiv, 2);
4971
+ rb_define_module_function(module, "glGetMaterialfv", gl_GetMaterialfv, 2);
4972
+ rb_define_module_function(module, "glGetMaterialiv", gl_GetMaterialiv, 2);
4973
+ rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, 1);
4974
+ rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, 1);
4975
+ rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, 1);
4976
+ rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, 1);
4977
+ rb_define_module_function(module, "glGetString", gl_GetString, 1);
4978
+ rb_define_module_function(module, "glGetTexEnvfv", gl_GetTexEnvfv, 2);
4979
+ rb_define_module_function(module, "glGetTexEnviv", gl_GetTexEnviv, 2);
4980
+ rb_define_module_function(module, "glGetTexGendv", gl_GetTexGendv, 2);
4981
+ rb_define_module_function(module, "glGetTexGenfv", gl_GetTexGenfv, 2);
4982
+ rb_define_module_function(module, "glGetTexGeniv", gl_GetTexGeniv, 2);
4983
+ /* rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, 5); */
4984
+ rb_define_module_function(module, "glGetTexParameterfv", gl_GetTexParameterfv, 2);
4985
+ rb_define_module_function(module, "glGetTexParameteriv", gl_GetTexParameteriv, 2);
4986
+ rb_define_module_function(module, "glGetTexLevelParameterfv", gl_GetTexLevelParameterfv, 3);
4987
+ rb_define_module_function(module, "glGetTexLevelParameteriv", gl_GetTexLevelParameteriv, 3);
4988
+ rb_define_module_function(module, "glIsEnabled", gl_IsEnabled, 1);
4989
+ rb_define_module_function(module, "glIsList", gl_IsList, 1);
4990
+ rb_define_module_function(module, "glDepthRange", gl_DepthRange, 2);
4991
+ rb_define_module_function(module, "glFrustum", gl_Frustum, 6);
4992
+ rb_define_module_function(module, "glLoadIdentity", gl_LoadIdentity, 0);
4993
+ rb_define_module_function(module, "glLoadMatrixf", gl_LoadMatrixf, 1);
4994
+ rb_define_module_function(module, "glLoadMatrixd", gl_LoadMatrixd, 1);
4995
+ rb_define_module_function(module, "glMatrixMode", gl_MatrixMode, 1);
4996
+ rb_define_module_function(module, "glMultMatrixf", gl_MultMatrixf, 1);
4997
+ rb_define_module_function(module, "glMultMatrixd", gl_MultMatrixd, 1);
4998
+ rb_define_module_function(module, "glOrtho", gl_Ortho, 6);
4999
+ rb_define_module_function(module, "glPopMatrix", gl_PopMatrix, 0);
5000
+ rb_define_module_function(module, "glPushMatrix", gl_PushMatrix, 0);
5001
+ rb_define_module_function(module, "glRotated", gl_Rotated, 4);
5002
+ rb_define_module_function(module, "glRotatef", gl_Rotatef, 4);
5003
+ rb_define_module_function(module, "glScaled", gl_Scaled, 3);
5004
+ rb_define_module_function(module, "glScalef", gl_Scalef, 3);
5005
+ rb_define_module_function(module, "glTranslated", gl_Translated, 3);
5006
+ rb_define_module_function(module, "glTranslatef", gl_Translatef, 3);
5007
+ rb_define_module_function(module, "glViewport", gl_Viewport, 4);
5008
+
5009
+ /* OpenGL 1.1 functions */
5010
+ rb_define_module_function(module, "glArrayElement", gl_ArrayElement, 1);
5011
+ rb_define_module_function(module, "glColorPointer", gl_ColorPointer, 4);
5012
+ rb_define_module_function(module, "glDisableClientState", gl_DisableClientState, 1);
5013
+ rb_define_module_function(module, "glDrawArrays", gl_DrawArrays, 3);
5014
+ rb_define_module_function(module, "glDrawElements", gl_DrawElements, 4);
5015
+ rb_define_module_function(module, "glEdgeFlagPointer", gl_EdgeFlagPointer, 2);
5016
+ rb_define_module_function(module, "glEnableClientState", gl_EnableClientState, 1);
5017
+ rb_define_module_function(module, "glGetPointerv", gl_GetPointerv, 2);
5018
+ rb_define_module_function(module, "glIndexPointer", gl_IndexPointer, 3);
5019
+ rb_define_module_function(module, "glInterleavedArrays", gl_InterleavedArrays, 3);
5020
+ rb_define_module_function(module, "glNormalPointer", gl_NormalPointer, 3);
5021
+ rb_define_module_function(module, "glTexCoordPointer", gl_TexCoordPointer, 4);
5022
+ rb_define_module_function(module, "glVertexPointer", gl_VertexPointer, 4);
5023
+ rb_define_module_function(module, "glPolygonOffset", gl_PolygonOffset, 2);
5024
+ rb_define_module_function(module, "glCopyTexImage1D", gl_CopyTexImage1D, 7);
5025
+ rb_define_module_function(module, "glCopyTexImage2D", gl_CopyTexImage2D, 8);
5026
+ rb_define_module_function(module, "glCopyTexSubImage1D", gl_CopyTexSubImage1D, 6);
5027
+ rb_define_module_function(module, "glCopyTexSubImage2D", gl_CopyTexSubImage2D, 8);
5028
+ rb_define_module_function(module, "glTexSubImage1D", gl_TexSubImage1D, 7);
5029
+ rb_define_module_function(module, "glTexSubImage2D", gl_TexSubImage2D, 9);
5030
+ rb_define_module_function(module, "glAreTexturesResident", gl_AreTexturesResident, 1);
5031
+ rb_define_module_function(module, "glBindTexture", gl_BindTexture, 2);
5032
+ rb_define_module_function(module, "glDeleteTextures", gl_DeleteTextures, 1);
5033
+ rb_define_module_function(module, "glGenTextures", gl_GenTextures, 1);
5034
+ rb_define_module_function(module, "glIsTexture", gl_IsTexture, 1);
5035
+ rb_define_module_function(module, "glPrioritizeTextures", gl_PrioritizeTextures, 2);
5036
+ rb_define_module_function(module, "glIndexub", gl_Indexub, 1);
5037
+ rb_define_module_function(module, "glIndexubv", gl_Indexubv, 1);
5038
+ rb_define_module_function(module, "glPopClientAttrib", gl_PopClientAttrib, 0);
5039
+ rb_define_module_function(module, "glPushClientAttrib", gl_PushClientAttrib, 1);
5040
+
5041
+ /* additional functions */
5042
+ rb_define_module_function(module, "glColor", gl_Colordv, -1);
5043
+ rb_define_module_function(module, "glColor3bv", gl_Colorbv, -1);
5044
+ rb_define_module_function(module, "glColor3dv", gl_Colordv, -1);
5045
+ rb_define_module_function(module, "glColor3fv", gl_Colorfv, -1);
5046
+ rb_define_module_function(module, "glColor3iv", gl_Coloriv, -1);
5047
+ rb_define_module_function(module, "glColor3sv", gl_Colorsv, -1);
5048
+ rb_define_module_function(module, "glColor3ubv", gl_Colorubv, -1);
5049
+ rb_define_module_function(module, "glColor3uiv", gl_Coloruiv, -1);
5050
+ rb_define_module_function(module, "glColor3usv", gl_Colorusv, -1);
5051
+ rb_define_module_function(module, "glColor4bv", gl_Colorbv, -1);
5052
+ rb_define_module_function(module, "glColor4dv", gl_Colordv, -1);
5053
+ rb_define_module_function(module, "glColor4fv", gl_Colorfv, -1);
5054
+ rb_define_module_function(module, "glColor4iv", gl_Coloriv, -1);
5055
+ rb_define_module_function(module, "glColor4sv", gl_Colorsv, -1);
5056
+ rb_define_module_function(module, "glColor4ubv", gl_Colorubv, -1);
5057
+ rb_define_module_function(module, "glColor4uiv", gl_Coloruiv, -1);
5058
+ rb_define_module_function(module, "glColor4usv", gl_Colorusv, -1);
5059
+
5060
+ rb_define_module_function(module, "glNormal", gl_Normaldv, -1);
5061
+ rb_define_module_function(module, "glNormal3bv", gl_Normalbv, -1);
5062
+ rb_define_module_function(module, "glNormal3dv", gl_Normaldv, -1);
5063
+ rb_define_module_function(module, "glNormal3fv", gl_Normalfv, -1);
5064
+ rb_define_module_function(module, "glNormal3iv", gl_Normaliv, -1);
5065
+ rb_define_module_function(module, "glNormal3sv", gl_Normalsv, -1);
5066
+
5067
+ rb_define_module_function(module, "glRasterPos", gl_RasterPosdv, -1);
5068
+ rb_define_module_function(module, "glRasterPos2d", gl_RasterPosdv, -1);
5069
+ rb_define_module_function(module, "glRasterPos2f", gl_RasterPosfv, -1);
5070
+ rb_define_module_function(module, "glRasterPos2i", gl_RasterPosiv, -1);
5071
+ rb_define_module_function(module, "glRasterPos2s", gl_RasterPossv, -1);
5072
+ rb_define_module_function(module, "glRasterPos3d", gl_RasterPosdv, -1);
5073
+ rb_define_module_function(module, "glRasterPos3f", gl_RasterPosfv, -1);
5074
+ rb_define_module_function(module, "glRasterPos3i", gl_RasterPosiv, -1);
5075
+ rb_define_module_function(module, "glRasterPos3s", gl_RasterPossv, -1);
5076
+ rb_define_module_function(module, "glRasterPos4d", gl_RasterPosdv, -1);
5077
+ rb_define_module_function(module, "glRasterPos4f", gl_RasterPosfv, -1);
5078
+ rb_define_module_function(module, "glRasterPos4i", gl_RasterPosiv, -1);
5079
+ rb_define_module_function(module, "glRasterPos4s", gl_RasterPossv, -1);
5080
+
5081
+ rb_define_module_function(module, "glRect", gl_Rectdv, -1);
5082
+ rb_define_module_function(module, "glRectdv", gl_Rectdv, -1);
5083
+ rb_define_module_function(module, "glRectfv", gl_Rectfv, -1);
5084
+ rb_define_module_function(module, "glRectiv", gl_Rectiv, -1);
5085
+ rb_define_module_function(module, "glRectsv", gl_Rectsv, -1);
5086
+
5087
+ rb_define_module_function(module, "glTexCoord", gl_TexCoorddv, -1);
5088
+ rb_define_module_function(module, "glTexCoord1dv", gl_TexCoorddv, -1);
5089
+ rb_define_module_function(module, "glTexCoord1fv", gl_TexCoordfv, -1);
5090
+ rb_define_module_function(module, "glTexCoord1iv", gl_TexCoordiv, -1);
5091
+ rb_define_module_function(module, "glTexCoord1sv", gl_TexCoordsv, -1);
5092
+ rb_define_module_function(module, "glTexCoord2dv", gl_TexCoorddv, -1);
5093
+ rb_define_module_function(module, "glTexCoord2fv", gl_TexCoordfv, -1);
5094
+ rb_define_module_function(module, "glTexCoord2iv", gl_TexCoordiv, -1);
5095
+ rb_define_module_function(module, "glTexCoord2sv", gl_TexCoordsv, -1);
5096
+ rb_define_module_function(module, "glTexCoord3dv", gl_TexCoorddv, -1);
5097
+ rb_define_module_function(module, "glTexCoord3fv", gl_TexCoordfv, -1);
5098
+ rb_define_module_function(module, "glTexCoord3iv", gl_TexCoordiv, -1);
5099
+ rb_define_module_function(module, "glTexCoord3sv", gl_TexCoordsv, -1);
5100
+ rb_define_module_function(module, "glTexCoord4dv", gl_TexCoorddv, -1);
5101
+ rb_define_module_function(module, "glTexCoord4fv", gl_TexCoordfv, -1);
5102
+ rb_define_module_function(module, "glTexCoord4iv", gl_TexCoordiv, -1);
5103
+ rb_define_module_function(module, "glTexCoord4sv", gl_TexCoordsv, -1);
5104
+
5105
+ rb_define_module_function(module, "glVertex", gl_Vertexdv, -1);
5106
+ rb_define_module_function(module, "glVertex2dv", gl_Vertexdv, -1);
5107
+ rb_define_module_function(module, "glVertex2fv", gl_Vertexfv, -1);
5108
+ rb_define_module_function(module, "glVertex2iv", gl_Vertexiv, -1);
5109
+ rb_define_module_function(module, "glVertex2sv", gl_Vertexsv, -1);
5110
+ rb_define_module_function(module, "glVertex3dv", gl_Vertexdv, -1);
5111
+ rb_define_module_function(module, "glVertex3fv", gl_Vertexfv, -1);
5112
+ rb_define_module_function(module, "glVertex3iv", gl_Vertexiv, -1);
5113
+ rb_define_module_function(module, "glVertex3sv", gl_Vertexsv, -1);
5114
+ rb_define_module_function(module, "glVertex4dv", gl_Vertexdv, -1);
5115
+ rb_define_module_function(module, "glVertex4fv", gl_Vertexfv, -1);
5116
+ rb_define_module_function(module, "glVertex4iv", gl_Vertexiv, -1);
5117
+ rb_define_module_function(module, "glVertex4sv", gl_Vertexsv, -1);
5118
+
5119
+ /* these simply calls normal or vector (*v) function depending on
5120
+ if array or single value is passed to them */
5121
+ rb_define_module_function(module, "glLightModel", gl_LightModel, 2);
5122
+ rb_define_module_function(module, "glMaterial", gl_Material, 3);
5123
+ rb_define_module_function(module, "glFog", gl_Fog, 2);
5124
+ rb_define_module_function(module, "glLight", gl_Light, 3);
5125
+ rb_define_module_function(module, "glTexParameter", gl_TexParameter, 3);
5126
+ rb_define_module_function(module, "glTexEnv", gl_TexEnv, 3);
5127
+ rb_define_module_function(module, "glTexGen", gl_TexGen, 3);
5128
+
5129
+ /* aliases */
5130
+ rb_define_module_function(module, "glMultMatrix", gl_MultMatrixd, 1);
5131
+ rb_define_module_function(module, "glLoadMatrix", gl_LoadMatrixd, 1);
5132
+ rb_define_module_function(module, "glRotate", gl_Rotated, 4);
5133
+ rb_define_module_function(module, "glScale", gl_Scaled, 3);
5134
+ rb_define_module_function(module, "glTranslate", gl_Translated, 3);
5135
+
5136
+ rb_define_module_function(module, "glPixelStore", gl_PixelStoref, 2);
5137
+ rb_define_module_function(module, "glPixelTransfer", gl_PixelTransferf, 2);
5138
+ rb_define_module_function(module, "glIndex", gl_Indexi, 1);
5139
+ rb_define_module_function(module, "glGetMaterial", gl_GetMaterialfv, 2);
5140
+ rb_define_module_function(module, "glGetDouble", gl_GetDoublev, 1);
5141
+
5142
+ rb_global_variable(&g_current_sel_buffer);
5143
+ rb_global_variable(&g_current_feed_buffer);
5144
+ rb_global_variable(&g_Vertex_ptr);
5145
+ rb_global_variable(&g_Normal_ptr);
5146
+ rb_global_variable(&g_Color_ptr);
5147
+ rb_global_variable(&g_Index_ptr);
5148
+ rb_global_variable(&g_TexCoord_ptr);
5149
+ rb_global_variable(&g_EdgeFlag_ptr);
5150
+ rb_global_variable(&g_FogCoord_ptr);
5151
+ rb_global_variable(&g_SecondaryColor_ptr);
5152
+ }