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.53 by root, Wed Apr 19 21:38:04 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
414 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 458 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
415 OUTPUT: 459 OUTPUT:
416 RETVAL 460 RETVAL
417 461
418void 462void
463SDL_GL_SwapBuffers ()
464
465void
419SDL_PollEvent () 466SDL_PollEvent ()
420 PPCODE: 467 PPCODE:
421{ 468{
422 SDL_Event ev; 469 SDL_Event ev;
423 470
424 while (SDL_PollEvent (&ev)) 471 while (SDL_PollEvent (&ev))
425 { 472 {
426 HV *hv = newHV (); 473 HV *hv = newHV ();
427 hv_store (hv, "type", 4, newSViv (ev.type), 0); 474 hv_store (hv, "type", 4, newSViv (ev.type), 0);
475
428 switch (ev.type) 476 switch (ev.type)
429 { 477 {
430 case SDL_KEYDOWN: 478 case SDL_KEYDOWN:
431 case SDL_KEYUP: 479 case SDL_KEYUP:
432 hv_store (hv, "state", 5, newSViv (ev.key.state), 0); 480 hv_store (hv, "state", 5, newSViv (ev.key.state), 0);
452 case SDL_MOUSEBUTTONUP: 500 case SDL_MOUSEBUTTONUP:
453 hv_store (hv, "button", 6, newSViv (ev.button.button), 0); 501 hv_store (hv, "button", 6, newSViv (ev.button.button), 0);
454 hv_store (hv, "state", 5, newSViv (ev.button.state), 0); 502 hv_store (hv, "state", 5, newSViv (ev.button.state), 0);
455 hv_store (hv, "x", 1, newSViv (ev.button.x), 0); 503 hv_store (hv, "x", 1, newSViv (ev.button.x), 0);
456 hv_store (hv, "y", 1, newSViv (ev.button.y), 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;
457 } 512 }
458 513
459 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv))); 514 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv)));
460 } 515 }
461} 516}
462 517
463int 518int
464Mix_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);
465 523
466void 524void
467Mix_CloseAudio () 525Mix_CloseAudio ()
468 526
469int 527int
492 550
493void 551void
494add_font (char *file) 552add_font (char *file)
495 CODE: 553 CODE:
496 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */ 554 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */
497
498void
499set_font (char *file)
500 CODE:
501{
502 int count;
503 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)file, 0, 0, &count);
504 PangoFontDescription *font = pango_fc_font_description_from_pattern (pattern, 0);
505 FcPatternDestroy (pattern);
506 pango_context_set_font_description (context, font);
507}
508 555
509void 556void
510load_image_inline (SV *image_) 557load_image_inline (SV *image_)
511 ALIAS: 558 ALIAS:
512 load_image_file = 1 559 load_image_file = 1
594 PUSHs (sv_2mortal (newSViv (b / y))); 641 PUSHs (sv_2mortal (newSViv (b / y)));
595 PUSHs (sv_2mortal (newSViv (a / y))); 642 PUSHs (sv_2mortal (newSViv (a / y)));
596} 643}
597 644
598void 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
599fatal (char *message) 655fatal (char *message)
600 CODE: 656 CODE:
601#ifdef _WIN32 657#ifdef _WIN32
602 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);
603#else 659#else
604 fprintf (stderr, "FATAL: %s\n", message); 660 fprintf (stderr, "FATAL: %s\n", message);
605#endif 661#endif
606 exit (1); 662 exit (1);
607 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
608MODULE = CFClient PACKAGE = CFClient::Layout 688MODULE = CFClient PACKAGE = CFClient::Layout
609 689
610CFClient::Layout 690CFClient::Layout
611new (SV *class, int base_height = 10) 691new (SV *class, int base_height = MIN_FONT_HEIGHT)
612 CODE: 692 CODE:
613 New (0, RETVAL, 1, struct cf_layout); 693 New (0, RETVAL, 1, struct cf_layout);
694 RETVAL->pl = pango_layout_new (context);
614 RETVAL->base_height = base_height; 695 RETVAL->base_height = base_height;
615 RETVAL->pl = pango_layout_new (context); 696 RETVAL->font = 0;
616 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);
617 OUTPUT: 699 OUTPUT:
618 RETVAL 700 RETVAL
619 701
620void 702void
621DESTROY (CFClient::Layout self) 703DESTROY (CFClient::Layout self)
650 SvUTF8_on (RETVAL); 732 SvUTF8_on (RETVAL);
651 OUTPUT: 733 OUTPUT:
652 RETVAL 734 RETVAL
653 735
654void 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
655set_height (CFClient::Layout self, int base_height) 746set_height (CFClient::Layout self, int base_height)
656 CODE: 747 CODE:
748 if (self->base_height != base_height)
749 {
657 self->base_height = base_height; 750 self->base_height = base_height;
751 layout_update_font (self);
752 }
658 753
659void 754void
660set_width (CFClient::Layout self, int max_width = -1) 755set_width (CFClient::Layout self, int max_width = -1)
661 CODE: 756 CODE:
662 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);
665size (CFClient::Layout self) 760size (CFClient::Layout self)
666 PPCODE: 761 PPCODE:
667{ 762{
668 int w, h; 763 int w, h;
669 764
670 layout_update (self);
671 layout_get_pixel_size (self, &w, &h); 765 layout_get_pixel_size (self, &w, &h);
672 766
673 EXTEND (SP, 2); 767 EXTEND (SP, 2);
674 PUSHs (sv_2mortal (newSViv (w))); 768 PUSHs (sv_2mortal (newSViv (w)));
675 PUSHs (sv_2mortal (newSViv (h))); 769 PUSHs (sv_2mortal (newSViv (h)));
678int 772int
679xy_to_index (CFClient::Layout self, int x, int y) 773xy_to_index (CFClient::Layout self, int x, int y)
680 CODE: 774 CODE:
681{ 775{
682 int index, trailing; 776 int index, trailing;
683
684 layout_update (self);
685 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);
686
687 RETVAL = index; 778 RETVAL = index;
688} 779}
689 OUTPUT: 780 OUTPUT:
690 RETVAL 781 RETVAL
691 782
692void 783void
693cursor_pos (CFClient::Layout self, int index) 784cursor_pos (CFClient::Layout self, int index)
694 PPCODE: 785 PPCODE:
695{ 786{
696 PangoRectangle strong_pos; 787 PangoRectangle strong_pos;
697 layout_update (self);
698 pango_layout_get_cursor_pos (self->pl, index, &strong_pos, 0); 788 pango_layout_get_cursor_pos (self->pl, index, &strong_pos, 0);
699 789
700 EXTEND (SP, 3); 790 EXTEND (SP, 3);
701 PUSHs (sv_2mortal (newSViv (strong_pos.x / PANGO_SCALE))); 791 PUSHs (sv_2mortal (newSViv (strong_pos.x / PANGO_SCALE)));
702 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE))); 792 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE)));
709{ 799{
710 SV *retval; 800 SV *retval;
711 int w, h; 801 int w, h;
712 FT_Bitmap bitmap; 802 FT_Bitmap bitmap;
713 803
714 layout_update (self);
715 layout_get_pixel_size (self, &w, &h); 804 layout_get_pixel_size (self, &w, &h);
716 805
717 retval = newSV (w * h); 806 retval = newSV (w * h);
718 SvPOK_only (retval); 807 SvPOK_only (retval);
719 SvCUR_set (retval, w * h); 808 SvCUR_set (retval, w * h);
930 cell->darkness = -1; 1019 cell->darkness = -1;
931 } 1020 }
932} 1021}
933 1022
934SV * 1023SV *
935mapmap (CFClient::Map self, int w, int h) 1024mapmap (CFClient::Map self, int x0, int y0, int w, int h)
936 CODE: 1025 CODE:
937{ 1026{
938 int x0, x1, x; 1027 int x1, x;
939 int y0, y1, y; 1028 int y1, y;
940 int z; 1029 int z;
941 SV *map_sv = newSV (w * h * sizeof (uint32_t)); 1030 SV *map_sv = newSV (w * h * sizeof (uint32_t));
942 uint32_t *map = (uint32_t *)SvPVX (map_sv); 1031 uint32_t *map = (uint32_t *)SvPVX (map_sv);
943 1032
944 SvPOK_only (map_sv); 1033 SvPOK_only (map_sv);
945 SvCUR_set (map_sv, w * h * sizeof (uint32_t)); 1034 SvCUR_set (map_sv, w * h * sizeof (uint32_t));
946 1035
947 x0 = self->x - w / 2; x1 = x0 + w; 1036 x0 += self->x; x1 = x0 + w;
948 y0 = self->y - h / 2; y1 = y0 + h; 1037 y0 += self->y; y1 = y0 + h;
949 1038
950 for (y = y0; y < y1; y++) 1039 for (y = y0; y < y1; y++)
951 { 1040 {
952 maprow *row = 0 <= y && y < self->rows 1041 maprow *row = 0 <= y && y < self->rows
953 ? self->row + y 1042 ? self->row + y
1093 *data++ = 0; /* version 0 format */ 1182 *data++ = 0; /* version 0 format */
1094 *data++ = w >> 8; *data++ = w; 1183 *data++ = w >> 8; *data++ = w;
1095 *data++ = h >> 8; *data++ = h; 1184 *data++ = h >> 8; *data++ = h;
1096 1185
1097 // 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
1098 // TODO: treat rows as we treat 1187 // TODO: treat rows as we treat columns
1099 map_get_row (self, y0 + self->y - self->oy);//D 1188 map_get_row (self, y0 + self->y - self->oy);//D
1100 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
1101 1190
1102 x0 += self->x - self->ox; 1191 x0 += self->x - self->ox;
1103 y0 += self->y - self->oy; 1192 y0 += self->y - self->oy;
1167 1256
1168 w = *data++ << 8; w |= *data++; 1257 w = *data++ << 8; w |= *data++;
1169 h = *data++ << 8; h |= *data++; 1258 h = *data++ << 8; h |= *data++;
1170 1259
1171 // 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
1172 // TODO: treat rows as we treat 1261 // TODO: treat rows as we treat columns
1173 map_get_row (self, y0 + self->y - self->oy);//D 1262 map_get_row (self, y0 + self->y - self->oy);//D
1174 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
1175 1264
1176 x0 += self->x - self->ox; 1265 x0 += self->x - self->ox;
1177 y0 += self->y - self->oy; 1266 y0 += self->y - self->oy;
1268 CODE: 1357 CODE:
1269 RETVAL = Mix_PlayMusic (self, loops); 1358 RETVAL = Mix_PlayMusic (self, loops);
1270 OUTPUT: 1359 OUTPUT:
1271 RETVAL 1360 RETVAL
1272 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