ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/Client.xs
(Generate patch)

Comparing deliantra/Deliantra-Client/Client.xs (file contents):
Revision 1.52 by root, Wed Apr 19 21:17:15 2006 UTC vs.
Revision 1.73 by root, Fri May 5 19:30:14 2006 UTC

33 typedef signed char int8_t; 33 typedef signed char int8_t;
34 typedef signed short int16_t; 34 typedef signed short int16_t;
35 typedef signed int int32_t; 35 typedef signed int int32_t;
36#endif 36#endif
37 37
38#include "glext.h"
39
38#define FOW_DARKNESS 32 40#define FOW_DARKNESS 32
39 41
40#define MAP_EXTEND_X 32 42#define MAP_EXTEND_X 32
41#define MAP_EXTEND_Y 512 43#define MAP_EXTEND_Y 512
42 44
45#define MIN_FONT_HEIGHT 10
46
47#define GL_CALL(type,func,args) \
48 { \
49 static int init_; \
50 static type fptr_; \
51 \
52 if (!init_) \
53 { \
54 init_ = 1; \
55 fptr_ = (type)SDL_GL_GetProcAddress (# func); \
56 } \
57 \
58 if (fptr_) \
59 fptr_ args; \
60 }
61
43typedef Mix_Chunk *CFClient__MixChunk; 62typedef Mix_Chunk *CFClient__MixChunk;
44typedef Mix_Music *CFClient__MixMusic; 63typedef Mix_Music *CFClient__MixMusic;
45 64
46static PangoContext *context; 65typedef PangoFontDescription *CFClient__Font;
47static PangoFontMap *fontmap;
48 66
49typedef struct cf_layout { 67typedef struct cf_layout {
50 PangoLayout *pl; 68 PangoLayout *pl;
51 int base_height; 69 int base_height;
70 CFClient__Font font;
52} *CFClient__Layout; 71} *CFClient__Layout;
72
73static CFClient__Font default_font;
74static PangoContext *context;
75static PangoFontMap *fontmap;
53 76
54static void 77static void
55substitute_func (FcPattern *pattern, gpointer data) 78substitute_func (FcPattern *pattern, gpointer data)
56{ 79{
57 FcPatternAddBool (pattern, FC_HINTING , 1); 80 FcPatternAddBool (pattern, FC_HINTING , 1);
58 FcPatternAddBool (pattern, FC_AUTOHINT, 0); 81 FcPatternAddBool (pattern, FC_AUTOHINT, 0);
59} 82}
60 83
61static void 84static void
62layout_update (CFClient__Layout self) 85layout_update_font (CFClient__Layout self)
63{ 86{
64 /* use a random scale factor to account for unknown descenders, 0.8 works 87 /* use a random scale factor to account for unknown descenders, 0.8 works
65 * reasonably well with bitstream vera 88 * reasonably well with bitstream vera
66 */ 89 */
67 PangoFontDescription *font = pango_context_get_font_description (context); 90 PangoFontDescription *font = self->font ? self->font : default_font;
68 91
69 int height = self->base_height * (PANGO_SCALE * 8 / 10);
70
71 if (pango_font_description_get_size (font) != height)
72 {
73 pango_font_description_set_absolute_size (font, height); 92 pango_font_description_set_absolute_size (font,
74 pango_layout_context_changed (self->pl); 93 MAX (MIN_FONT_HEIGHT, self->base_height) * (PANGO_SCALE * 8 / 10));
75 } 94
95 pango_layout_set_font_description (self->pl, font);
76} 96}
77 97
78static void 98static void
79layout_get_pixel_size (CFClient__Layout self, int *w, int *h) 99layout_get_pixel_size (CFClient__Layout self, int *w, int *h)
80{ 100{
81 layout_update (self);
82
83 pango_layout_get_pixel_size (self->pl, w, h); 101 pango_layout_get_pixel_size (self->pl, w, h);
84 102
85 *w = (*w + 3) & ~3; 103 *w = (*w + 3) & ~3;
86 if (!*w) *w = 1; 104 if (!*w) *w = 1;
87 if (!*h) *h = 1; 105 if (!*h) *h = 1;
237 break; 255 break;
238 256
239 row->col[x - row->c0].darkness = -1; 257 row->col[x - row->c0].darkness = -1;
240 } 258 }
241 } 259 }
260}
261
262static void
263music_finished ()
264{
265 SDL_UserEvent ev;
266
267 ev.type = SDL_USEREVENT;
268 ev.code = 0;
269 ev.data1 = 0;
270 ev.data2 = 0;
271
272 SDL_PushEvent ((SDL_Event *)&ev);
273}
274
275static void
276channel_finished (int channel)
277{
278 SDL_UserEvent ev;
279
280 ev.type = SDL_USEREVENT;
281 ev.code = 1;
282 ev.data1 = (void *)channel;
283 ev.data2 = 0;
284
285 SDL_PushEvent ((SDL_Event *)&ev);
242} 286}
243 287
244MODULE = CFClient PACKAGE = CFClient 288MODULE = CFClient PACKAGE = CFClient
245 289
246PROTOTYPES: ENABLE 290PROTOTYPES: ENABLE
386 430
387 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 431 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
388 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15); 432 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
389 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0); 433 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0);
390 434
435 SDL_EnableUNICODE (1);
436 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
437
391 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 438 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
392 439
393 if (m && m != (SDL_Rect **)-1) 440 if (m && m != (SDL_Rect **)-1)
394 while (*m) 441 while (*m)
395 { 442 {
410 ); 457 );
411 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 458 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
412 OUTPUT: 459 OUTPUT:
413 RETVAL 460 RETVAL
414 461
462void
463SDL_GL_SwapBuffers ()
464
465void
466SDL_PollEvent ()
467 PPCODE:
468{
469 SDL_Event ev;
470
471 while (SDL_PollEvent (&ev))
472 {
473 HV *hv = newHV ();
474 hv_store (hv, "type", 4, newSViv (ev.type), 0);
475
476 switch (ev.type)
477 {
478 case SDL_KEYDOWN:
479 case SDL_KEYUP:
480 hv_store (hv, "state", 5, newSViv (ev.key.state), 0);
481 hv_store (hv, "sym", 3, newSViv (ev.key.keysym.sym), 0);
482 hv_store (hv, "mod", 3, newSViv (ev.key.keysym.mod), 0);
483 hv_store (hv, "unicode", 7, newSViv (ev.key.keysym.unicode), 0);
484 break;
485
486 case SDL_ACTIVEEVENT:
487 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
488 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
489 break;
490
491 case SDL_MOUSEMOTION:
492 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0);
493 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0);
494 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0);
495 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0);
496 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0);
497 break;
498
499 case SDL_MOUSEBUTTONDOWN:
500 case SDL_MOUSEBUTTONUP:
501 hv_store (hv, "button", 6, newSViv (ev.button.button), 0);
502 hv_store (hv, "state", 5, newSViv (ev.button.state), 0);
503 hv_store (hv, "x", 1, newSViv (ev.button.x), 0);
504 hv_store (hv, "y", 1, newSViv (ev.button.y), 0);
505 break;
506
507 case SDL_USEREVENT:
508 hv_store (hv, "code", 4, newSViv (ev.user.code), 0);
509 hv_store (hv, "data1", 5, newSViv ((IV)ev.user.data1), 0);
510 hv_store (hv, "data2", 5, newSViv ((IV)ev.user.data2), 0);
511 break;
512 }
513
514 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv)));
515 }
516}
517
415int 518int
416Mix_VolumeMusic (int newvol = -1)
417
418int
419Mix_OpenAudio (int frequency = 22050, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 512) 519Mix_OpenAudio (int frequency = 48000, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 2048)
520 POSTCALL:
521 Mix_HookMusicFinished (music_finished);
522 Mix_ChannelFinished (channel_finished);
420 523
421void 524void
422Mix_CloseAudio () 525Mix_CloseAudio ()
423 526
424int 527int
447 550
448void 551void
449add_font (char *file) 552add_font (char *file)
450 CODE: 553 CODE:
451 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */ 554 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */
452
453void
454set_font (char *file)
455 CODE:
456{
457 int count;
458 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)file, 0, 0, &count);
459 PangoFontDescription *font = pango_fc_font_description_from_pattern (pattern, 0);
460 FcPatternDestroy (pattern);
461 pango_context_set_font_description (context, font);
462}
463 555
464void 556void
465load_image_inline (SV *image_) 557load_image_inline (SV *image_)
466 ALIAS: 558 ALIAS:
467 load_image_file = 1 559 load_image_file = 1
549 PUSHs (sv_2mortal (newSViv (b / y))); 641 PUSHs (sv_2mortal (newSViv (b / y)));
550 PUSHs (sv_2mortal (newSViv (a / y))); 642 PUSHs (sv_2mortal (newSViv (a / y)));
551} 643}
552 644
553void 645void
646error (char *message)
647 CODE:
648#ifdef _WIN32
649 MessageBox (0, message, "Crossfire+ Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
650#else
651 fprintf (stderr, "ERROR: %s\n", message);
652#endif
653
654void
554fatal (char *message) 655fatal (char *message)
555 CODE: 656 CODE:
556#ifdef _WIN32 657#ifdef _WIN32
557 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); 658 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
558#else 659#else
559 fprintf (stderr, "FATAL: %s\n", message); 660 fprintf (stderr, "FATAL: %s\n", message);
560#endif 661#endif
561 exit (1); 662 exit (1);
562 663
664MODULE = CFClient PACKAGE = CFClient::Font
665
666CFClient::Font
667new_from_file (SV *class, char *path, int id = 0)
668 CODE:
669{
670 int count;
671 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, id, 0, &count);
672 RETVAL = pango_fc_font_description_from_pattern (pattern, 0);
673 FcPatternDestroy (pattern);
674}
675 OUTPUT:
676 RETVAL
677
678void
679DESTROY (CFClient::Font self)
680 CODE:
681 pango_font_description_free (self);
682
683void
684make_default (CFClient::Font self)
685 CODE:
686 default_font = self;
687
563MODULE = CFClient PACKAGE = CFClient::Layout 688MODULE = CFClient PACKAGE = CFClient::Layout
564 689
565CFClient::Layout 690CFClient::Layout
566new (SV *class, int base_height = 10) 691new (SV *class, int base_height = MIN_FONT_HEIGHT)
567 CODE: 692 CODE:
568 New (0, RETVAL, 1, struct cf_layout); 693 New (0, RETVAL, 1, struct cf_layout);
694 RETVAL->pl = pango_layout_new (context);
569 RETVAL->base_height = base_height; 695 RETVAL->base_height = base_height;
570 RETVAL->pl = pango_layout_new (context); 696 RETVAL->font = 0;
571 pango_layout_set_wrap (RETVAL->pl, PANGO_WRAP_WORD_CHAR); 697 pango_layout_set_wrap (RETVAL->pl, PANGO_WRAP_WORD_CHAR);
698 pango_layout_set_font_description (RETVAL->pl, default_font);
572 OUTPUT: 699 OUTPUT:
573 RETVAL 700 RETVAL
574 701
575void 702void
576DESTROY (CFClient::Layout self) 703DESTROY (CFClient::Layout self)
605 SvUTF8_on (RETVAL); 732 SvUTF8_on (RETVAL);
606 OUTPUT: 733 OUTPUT:
607 RETVAL 734 RETVAL
608 735
609void 736void
737set_font (CFClient::Layout self, CFClient::Font font = 0)
738 CODE:
739 if (self->font != font)
740 {
741 self->font = font;
742 layout_update_font (self);
743 }
744
745void
610set_height (CFClient::Layout self, int base_height) 746set_height (CFClient::Layout self, int base_height)
611 CODE: 747 CODE:
748 if (self->base_height != base_height)
749 {
612 self->base_height = base_height; 750 self->base_height = base_height;
751 layout_update_font (self);
752 }
613 753
614void 754void
615set_width (CFClient::Layout self, int max_width = -1) 755set_width (CFClient::Layout self, int max_width = -1)
616 CODE: 756 CODE:
617 pango_layout_set_width (self->pl, max_width < 0 ? max_width : max_width * PANGO_SCALE); 757 pango_layout_set_width (self->pl, max_width < 0 ? max_width : max_width * PANGO_SCALE);
620size (CFClient::Layout self) 760size (CFClient::Layout self)
621 PPCODE: 761 PPCODE:
622{ 762{
623 int w, h; 763 int w, h;
624 764
625 layout_update (self);
626 layout_get_pixel_size (self, &w, &h); 765 layout_get_pixel_size (self, &w, &h);
627 766
628 EXTEND (SP, 2); 767 EXTEND (SP, 2);
629 PUSHs (sv_2mortal (newSViv (w))); 768 PUSHs (sv_2mortal (newSViv (w)));
630 PUSHs (sv_2mortal (newSViv (h))); 769 PUSHs (sv_2mortal (newSViv (h)));
633int 772int
634xy_to_index (CFClient::Layout self, int x, int y) 773xy_to_index (CFClient::Layout self, int x, int y)
635 CODE: 774 CODE:
636{ 775{
637 int index, trailing; 776 int index, trailing;
638
639 layout_update (self);
640 pango_layout_xy_to_index (self->pl, x * PANGO_SCALE, y * PANGO_SCALE, &index, &trailing); 777 pango_layout_xy_to_index (self->pl, x * PANGO_SCALE, y * PANGO_SCALE, &index, &trailing);
641
642 RETVAL = index; 778 RETVAL = index;
643} 779}
644 OUTPUT: 780 OUTPUT:
645 RETVAL 781 RETVAL
646 782
647void 783void
648cursor_pos (CFClient::Layout self, int index) 784cursor_pos (CFClient::Layout self, int index)
649 PPCODE: 785 PPCODE:
650{ 786{
651 PangoRectangle strong_pos; 787 PangoRectangle strong_pos;
652 layout_update (self);
653 pango_layout_get_cursor_pos (self->pl, index, &strong_pos, 0); 788 pango_layout_get_cursor_pos (self->pl, index, &strong_pos, 0);
654 789
655 EXTEND (SP, 3); 790 EXTEND (SP, 3);
656 PUSHs (sv_2mortal (newSViv (strong_pos.x / PANGO_SCALE))); 791 PUSHs (sv_2mortal (newSViv (strong_pos.x / PANGO_SCALE)));
657 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE))); 792 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE)));
664{ 799{
665 SV *retval; 800 SV *retval;
666 int w, h; 801 int w, h;
667 FT_Bitmap bitmap; 802 FT_Bitmap bitmap;
668 803
669 layout_update (self);
670 layout_get_pixel_size (self, &w, &h); 804 layout_get_pixel_size (self, &w, &h);
671 805
672 retval = newSV (w * h); 806 retval = newSV (w * h);
673 SvPOK_only (retval); 807 SvPOK_only (retval);
674 SvCUR_set (retval, w * h); 808 SvCUR_set (retval, w * h);
885 cell->darkness = -1; 1019 cell->darkness = -1;
886 } 1020 }
887} 1021}
888 1022
889SV * 1023SV *
890mapmap (CFClient::Map self, int w, int h) 1024mapmap (CFClient::Map self, int x0, int y0, int w, int h)
891 CODE: 1025 CODE:
892{ 1026{
893 int x0, x1, x; 1027 int x1, x;
894 int y0, y1, y; 1028 int y1, y;
895 int z; 1029 int z;
896 SV *map_sv = newSV (w * h * sizeof (uint32_t)); 1030 SV *map_sv = newSV (w * h * sizeof (uint32_t));
897 uint32_t *map = (uint32_t *)SvPVX (map_sv); 1031 uint32_t *map = (uint32_t *)SvPVX (map_sv);
898 1032
899 SvPOK_only (map_sv); 1033 SvPOK_only (map_sv);
900 SvCUR_set (map_sv, w * h * sizeof (uint32_t)); 1034 SvCUR_set (map_sv, w * h * sizeof (uint32_t));
901 1035
902 x0 = self->x - w / 2; x1 = x0 + w; 1036 x0 += self->x; x1 = x0 + w;
903 y0 = self->y - h / 2; y1 = y0 + h; 1037 y0 += self->y; y1 = y0 + h;
904 1038
905 for (y = y0; y < y1; y++) 1039 for (y = y0; y < y1; y++)
906 { 1040 {
907 maprow *row = 0 <= y && y < self->rows 1041 maprow *row = 0 <= y && y < self->rows
908 ? self->row + y 1042 ? self->row + y
1048 *data++ = 0; /* version 0 format */ 1182 *data++ = 0; /* version 0 format */
1049 *data++ = w >> 8; *data++ = w; 1183 *data++ = w >> 8; *data++ = w;
1050 *data++ = h >> 8; *data++ = h; 1184 *data++ = h >> 8; *data++ = h;
1051 1185
1052 // we need to do this 'cause we don't keep an absolute coord system for rows 1186 // we need to do this 'cause we don't keep an absolute coord system for rows
1053 // TODO: treat rows as we treat 1187 // TODO: treat rows as we treat columns
1054 map_get_row (self, y0 + self->y - self->oy);//D 1188 map_get_row (self, y0 + self->y - self->oy);//D
1055 map_get_row (self, y0 + self->y - self->oy + h - 1);//D 1189 map_get_row (self, y0 + self->y - self->oy + h - 1);//D
1056 1190
1057 x0 += self->x - self->ox; 1191 x0 += self->x - self->ox;
1058 y0 += self->y - self->oy; 1192 y0 += self->y - self->oy;
1122 1256
1123 w = *data++ << 8; w |= *data++; 1257 w = *data++ << 8; w |= *data++;
1124 h = *data++ << 8; h |= *data++; 1258 h = *data++ << 8; h |= *data++;
1125 1259
1126 // we need to do this 'cause we don't keep an absolute coord system for rows 1260 // we need to do this 'cause we don't keep an absolute coord system for rows
1127 // TODO: treat rows as we treat 1261 // TODO: treat rows as we treat columns
1128 map_get_row (self, y0 + self->y - self->oy);//D 1262 map_get_row (self, y0 + self->y - self->oy);//D
1129 map_get_row (self, y0 + self->y - self->oy + h - 1);//D 1263 map_get_row (self, y0 + self->y - self->oy + h - 1);//D
1130 1264
1131 x0 += self->x - self->ox; 1265 x0 += self->x - self->ox;
1132 y0 += self->y - self->oy; 1266 y0 += self->y - self->oy;
1223 CODE: 1357 CODE:
1224 RETVAL = Mix_PlayMusic (self, loops); 1358 RETVAL = Mix_PlayMusic (self, loops);
1225 OUTPUT: 1359 OUTPUT:
1226 RETVAL 1360 RETVAL
1227 1361
1362MODULE = CFClient PACKAGE = CFClient::OpenGL
1363
1364BOOT:
1365{
1366 HV *stash = gv_stashpv ("CFClient::OpenGL", 1);
1367 static const struct {
1368 const char *name;
1369 IV iv;
1370 } *civ, const_iv[] = {
1371# define const_iv(name) { # name, (IV)name }
1372 const_iv (GL_COLOR_MATERIAL),
1373 const_iv (GL_SMOOTH),
1374 const_iv (GL_FLAT),
1375 const_iv (GL_DITHER),
1376 const_iv (GL_BLEND),
1377 const_iv (GL_SCISSOR_TEST),
1378 const_iv (GL_AND),
1379 const_iv (GL_ONE),
1380 const_iv (GL_ZERO),
1381 const_iv (GL_SRC_ALPHA),
1382 const_iv (GL_SRC_ALPHA_SATURATE),
1383 const_iv (GL_ONE_MINUS_SRC_ALPHA),
1384 const_iv (GL_ONE_MINUS_DST_ALPHA),
1385 const_iv (GL_RGB),
1386 const_iv (GL_RGBA),
1387 const_iv (GL_UNSIGNED_BYTE),
1388 const_iv (GL_ALPHA),
1389 const_iv (GL_FLOAT),
1390 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
1391 const_iv (GL_COMPILE),
1392 const_iv (GL_TEXTURE_1D),
1393 const_iv (GL_TEXTURE_2D),
1394 const_iv (GL_TEXTURE_ENV),
1395 const_iv (GL_TEXTURE_MAG_FILTER),
1396 const_iv (GL_TEXTURE_MIN_FILTER),
1397 const_iv (GL_TEXTURE_ENV_MODE),
1398 const_iv (GL_TEXTURE_WRAP_S),
1399 const_iv (GL_TEXTURE_WRAP_T),
1400 const_iv (GL_CLAMP),
1401 const_iv (GL_REPEAT),
1402 const_iv (GL_NEAREST),
1403 const_iv (GL_LINEAR),
1404 const_iv (GL_NEAREST_MIPMAP_NEAREST),
1405 const_iv (GL_LINEAR_MIPMAP_NEAREST),
1406 const_iv (GL_NEAREST_MIPMAP_LINEAR),
1407 const_iv (GL_LINEAR_MIPMAP_LINEAR),
1408 const_iv (GL_GENERATE_MIPMAP),
1409 const_iv (GL_MODULATE),
1410 const_iv (GL_DECAL),
1411 const_iv (GL_REPLACE),
1412 const_iv (GL_COLOR_BUFFER_BIT),
1413 const_iv (GL_PROJECTION),
1414 const_iv (GL_MODELVIEW),
1415 const_iv (GL_COLOR_LOGIC_OP),
1416 const_iv (GL_SEPARABLE_2D),
1417 const_iv (GL_CONVOLUTION_2D),
1418 const_iv (GL_CONVOLUTION_BORDER_MODE),
1419 const_iv (GL_CONSTANT_BORDER),
1420 const_iv (GL_LINES),
1421 const_iv (GL_QUADS),
1422 const_iv (GL_LINE_LOOP),
1423 const_iv (GL_PERSPECTIVE_CORRECTION_HINT),
1424 const_iv (GL_FASTEST),
1425# undef const_iv
1426 };
1427
1428 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
1429 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
1430}
1431
1432int glGetError ()
1433
1434void glClear (int mask)
1435
1436void glClearColor (float r, float g, float b, float a = 1.0)
1437 PROTOTYPE: @
1438
1439void glEnable (int cap)
1440
1441void glDisable (int cap)
1442
1443void glShadeModel (int mode)
1444
1445void glHint (int target, int mode)
1446
1447void glBlendFunc (int sfactor, int dfactor)
1448
1449void glLogicOp (int opcode)
1450
1451void glColorMask (int red, int green, int blue, int alpha)
1452
1453void glMatrixMode (int mode)
1454
1455void glPushMatrix ()
1456
1457void glPopMatrix ()
1458
1459void glLoadIdentity ()
1460
1461# near and far are due to microsofts buggy c compiler
1462void glOrtho (double left, double right, double bottom, double top, double near_, double far_)
1463
1464void glViewport (int x, int y, int width, int height)
1465
1466void glScissor (int x, int y, int width, int height)
1467
1468void glTranslate (float x, float y, float z = 0.)
1469 CODE:
1470 glTranslatef (x, y, z);
1471
1472void glScale (float x, float y, float z = 1.)
1473 CODE:
1474 glScalef (x, y, z);
1475
1476void glRotate (float angle, float x, float y, float z)
1477 CODE:
1478 glRotatef (angle, x, y, z);
1479
1480void glBegin (int mode)
1481
1482void glEnd ()
1483
1484void glColor (float r, float g, float b, float a = 1.0)
1485 PROTOTYPE: @
1486 CODE:
1487 glColor4ub (r * 255., g * 255., b * 255., a * 255.);
1488
1489void glVertex (float x, float y, float z = 0.)
1490 CODE:
1491 glVertex3f (x, y, z);
1492
1493void glTexCoord (float s, float t)
1494 CODE:
1495 glTexCoord2f (s, t);
1496
1497void glTexEnv (int target, int pname, float param)
1498 CODE:
1499 glTexEnvf (target, pname, param);
1500
1501void glTexParameter (int target, int pname, float param)
1502 CODE:
1503 glTexParameterf (target, pname, param);
1504
1505void glBindTexture (int target, int name)
1506
1507void glConvolutionParameter (int target, int pname, float params)
1508 CODE:
1509 GL_CALL (PFNGLCONVOLUTIONPARAMETERFEXTPROC, glConvolutionParameterf, (target, pname, params));
1510
1511void glConvolutionFilter2D (int target, int internalformat, int width, int height, int format, int type, char *data)
1512 CODE:
1513 GL_CALL (PFNGLCONVOLUTIONFILTER2DEXTPROC, glConvolutionFilter2D,
1514 (target, internalformat, width, height, format, type, data));
1515
1516void glSeparableFilter2D (int target, int internalformat, int width, int height, int format, int type, char *row, char *column)
1517 CODE:
1518 GL_CALL (PFNGLSEPARABLEFILTER2DEXTPROC, glSeparableFilter2D,
1519 (target, internalformat, width, height, format, type, row, column));
1520
1521void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data)
1522
1523void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
1524
1525void glRasterPos (int x, int y)
1526 CODE:
1527 glRasterPos2i (x, y);
1528
1529void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
1530
1531int glGenTexture ()
1532 CODE:
1533{
1534 GLuint name;
1535 glGenTextures (1, &name);
1536 RETVAL = name;
1537}
1538 OUTPUT:
1539 RETVAL
1540
1541void glDeleteTexture (int name)
1542 CODE:
1543{
1544 GLuint name_ = name;
1545 glDeleteTextures (1, &name_);
1546}
1547
1548int glGenList ()
1549 CODE:
1550 RETVAL = glGenLists (1);
1551 OUTPUT:
1552 RETVAL
1553
1554void glDeleteList (int list)
1555 CODE:
1556 glDeleteLists (list, 1);
1557
1558void glNewList (int list, int mode = GL_COMPILE)
1559
1560void glEndList ()
1561
1562void glCallList (int list)
1563

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines