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.65 by root, Mon Apr 24 08:22:21 2006 UTC vs.
Revision 1.81 by root, Sun May 14 23:19:14 2006 UTC

1#ifdef _WIN32 1#ifdef _WIN32
2# define _WIN32_WINNT 0x0500 // needed to get win2000 api calls
2# include <malloc.h> 3# include <malloc.h>
4# include <windows.h>
5# pragma warning(disable:4244)
3#endif 6#endif
4 7
5#include "EXTERN.h" 8#include "EXTERN.h"
6#include "perl.h" 9#include "perl.h"
7#include "XSUB.h" 10#include "XSUB.h"
8 11
12#include <math.h>
9#include <string.h> 13#include <string.h>
10#include <stdio.h> 14#include <stdio.h>
11 15
12#include <SDL.h> 16#include <SDL.h>
17#include <SDL_endian.h>
13#include <SDL_image.h> 18#include <SDL_image.h>
14#include <SDL_mixer.h> 19#include <SDL_mixer.h>
15#include <SDL_opengl.h> 20#include <SDL_opengl.h>
16 21
17#include <glib/gmacros.h> 22#include <glib/gmacros.h>
18 23
19#include <pango/pango.h> 24#include <pango/pango.h>
20#include <pango/pangofc-fontmap.h> 25#include <pango/pangofc-fontmap.h>
21#include <pango/pangoft2.h> 26#include <pango/pangoft2.h>
27#include <pango/pangocairo.h>
22 28
23#ifndef _WIN32 29#ifndef _WIN32
24# include <sys/types.h> 30# include <sys/types.h>
25# include <sys/socket.h> 31# include <sys/socket.h>
26# include <netinet/in.h> 32# include <netinet/in.h>
63typedef Mix_Music *CFClient__MixMusic; 69typedef Mix_Music *CFClient__MixMusic;
64 70
65typedef PangoFontDescription *CFClient__Font; 71typedef PangoFontDescription *CFClient__Font;
66 72
67typedef struct cf_layout { 73typedef struct cf_layout {
68 PangoLayout *pl; 74 PangoLayout *pl; // either derived from a cairo or ft2 context
75 int rgba; // wether we use rgba (cairo) or grayscale (ft2)
76 float r, g, b, a; // default color for rgba mode
69 int base_height; 77 int base_height;
70 CFClient__Font font; 78 CFClient__Font font;
71} *CFClient__Layout; 79} *CFClient__Layout;
72 80
73static CFClient__Font default_font; 81static CFClient__Font default_font;
74static PangoContext *context; 82static PangoContext *ft2_context, *cairo_context;
75static PangoFontMap *fontmap; 83static PangoFontMap *ft2_fontmap, *cairo_fontmap;
76 84
77static void 85static void
78substitute_func (FcPattern *pattern, gpointer data) 86substitute_func (FcPattern *pattern, gpointer data)
79{ 87{
80 FcPatternAddBool (pattern, FC_HINTING , 1); 88 FcPatternAddBool (pattern, FC_HINTING , 1);
81 FcPatternAddBool (pattern, FC_AUTOHINT, 0); 89 FcPatternAddBool (pattern, FC_AUTOHINT, 1);
82} 90}
83 91
84static void 92static void
85layout_update_font (CFClient__Layout self) 93layout_update_font (CFClient__Layout self)
86{ 94{
98static void 106static void
99layout_get_pixel_size (CFClient__Layout self, int *w, int *h) 107layout_get_pixel_size (CFClient__Layout self, int *w, int *h)
100{ 108{
101 pango_layout_get_pixel_size (self->pl, w, h); 109 pango_layout_get_pixel_size (self->pl, w, h);
102 110
103 *w = (*w + 3) & ~3;
104 if (!*w) *w = 1; 111 if (!*w) *w = 1;
105 if (!*h) *h = 1; 112 if (!*h) *h = 1;
113
114 *w = (*w + 3) & ~3;
106} 115}
107 116
108typedef uint16_t mapface; 117typedef uint16_t mapface;
109 118
110typedef struct { 119typedef struct {
258 } 267 }
259 } 268 }
260} 269}
261 270
262static void 271static void
263music_finished () 272music_finished (void)
264{ 273{
265 SDL_UserEvent ev; 274 SDL_UserEvent ev;
266 275
267 ev.type = SDL_USEREVENT; 276 ev.type = SDL_USEREVENT;
268 ev.code = 0; 277 ev.code = 0;
269 ev.data1 = 0; 278 ev.data1 = 0;
279 ev.data2 = 0;
280
281 SDL_PushEvent ((SDL_Event *)&ev);
282}
283
284static void
285channel_finished (int channel)
286{
287 SDL_UserEvent ev;
288
289 ev.type = SDL_USEREVENT;
290 ev.code = 1;
291 ev.data1 = (void *)(long)channel;
270 ev.data2 = 0; 292 ev.data2 = 0;
271 293
272 SDL_PushEvent ((SDL_Event *)&ev); 294 SDL_PushEvent ((SDL_Event *)&ev);
273} 295}
274 296
385# undef const_iv 407# undef const_iv
386 }; 408 };
387 409
388 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 410 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
389 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 411 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
412}
390 413
414void
415pango_init ()
416 CODE:
417{
418 // delayed, so it can pick up new fonts added by AddFontResourceEx
391 fontmap = pango_ft2_font_map_new (); 419 ft2_fontmap = pango_ft2_font_map_new ();
392 pango_ft2_font_map_set_default_substitute ((PangoFT2FontMap *)fontmap, substitute_func, 0, 0); 420 pango_ft2_font_map_set_default_substitute ((PangoFT2FontMap *)ft2_fontmap, substitute_func, 0, 0);
393 context = pango_ft2_font_map_create_context ((PangoFT2FontMap *)fontmap); 421 ft2_context = pango_ft2_font_map_create_context ((PangoFT2FontMap *)ft2_fontmap);
422
423 cairo_fontmap = pango_cairo_font_map_get_default ();
424 cairo_context = pango_cairo_font_map_create_context ((PangoCairoFontMap *)cairo_fontmap);
394} 425}
395 426
396int 427int
397SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO) 428SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO)
398 429
457 488
458 while (SDL_PollEvent (&ev)) 489 while (SDL_PollEvent (&ev))
459 { 490 {
460 HV *hv = newHV (); 491 HV *hv = newHV ();
461 hv_store (hv, "type", 4, newSViv (ev.type), 0); 492 hv_store (hv, "type", 4, newSViv (ev.type), 0);
493
462 switch (ev.type) 494 switch (ev.type)
463 { 495 {
464 case SDL_KEYDOWN: 496 case SDL_KEYDOWN:
465 case SDL_KEYUP: 497 case SDL_KEYUP:
466 hv_store (hv, "state", 5, newSViv (ev.key.state), 0); 498 hv_store (hv, "state", 5, newSViv (ev.key.state), 0);
486 case SDL_MOUSEBUTTONUP: 518 case SDL_MOUSEBUTTONUP:
487 hv_store (hv, "button", 6, newSViv (ev.button.button), 0); 519 hv_store (hv, "button", 6, newSViv (ev.button.button), 0);
488 hv_store (hv, "state", 5, newSViv (ev.button.state), 0); 520 hv_store (hv, "state", 5, newSViv (ev.button.state), 0);
489 hv_store (hv, "x", 1, newSViv (ev.button.x), 0); 521 hv_store (hv, "x", 1, newSViv (ev.button.x), 0);
490 hv_store (hv, "y", 1, newSViv (ev.button.y), 0); 522 hv_store (hv, "y", 1, newSViv (ev.button.y), 0);
523 break;
524
525 case SDL_USEREVENT:
526 hv_store (hv, "code", 4, newSViv (ev.user.code), 0);
527 hv_store (hv, "data1", 5, newSViv ((IV)ev.user.data1), 0);
528 hv_store (hv, "data2", 5, newSViv ((IV)ev.user.data2), 0);
529 break;
491 } 530 }
492 531
493 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv))); 532 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv)));
494 } 533 }
495} 534}
496 535
497int 536int
498Mix_OpenAudio (int frequency = 22050, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 512) 537Mix_OpenAudio (int frequency = 48000, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 2048)
499 POSTCALL: 538 POSTCALL:
500 Mix_HookMusicFinished (music_finished); 539 Mix_HookMusicFinished (music_finished);
540 Mix_ChannelFinished (channel_finished);
501 541
502void 542void
503Mix_CloseAudio () 543Mix_CloseAudio ()
504 544
505int 545int
528 568
529void 569void
530add_font (char *file) 570add_font (char *file)
531 CODE: 571 CODE:
532 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */ 572 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */
573#ifdef _WIN32
574 // cairo... sigh... requires win2000
575 AddFontResourceEx (file, FR_PRIVATE, 0);
576#endif
533 577
534void 578void
535load_image_inline (SV *image_) 579load_image_inline (SV *image_)
536 ALIAS: 580 ALIAS:
537 load_image_file = 1 581 load_image_file = 1
619 PUSHs (sv_2mortal (newSViv (b / y))); 663 PUSHs (sv_2mortal (newSViv (b / y)));
620 PUSHs (sv_2mortal (newSViv (a / y))); 664 PUSHs (sv_2mortal (newSViv (a / y)));
621} 665}
622 666
623void 667void
668error (char *message)
669 CODE:
670#ifdef _WIN32
671 MessageBox (0, message, "Crossfire+ Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
672#else
673 fprintf (stderr, "ERROR: %s\n", message);
674#endif
675
676void
624fatal (char *message) 677fatal (char *message)
625 CODE: 678 CODE:
626#ifdef _WIN32 679#ifdef _WIN32
627 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); 680 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
628#else 681#else
631 exit (1); 684 exit (1);
632 685
633MODULE = CFClient PACKAGE = CFClient::Font 686MODULE = CFClient PACKAGE = CFClient::Font
634 687
635CFClient::Font 688CFClient::Font
636new_from_file (SV *class, char *path) 689new_from_file (SV *class, char *path, int id = 0)
637 CODE: 690 CODE:
638{ 691{
639 int count; 692 int count;
640 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, 0, 0, &count); 693 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, id, 0, &count);
641 RETVAL = pango_fc_font_description_from_pattern (pattern, 0); 694 RETVAL = pango_fc_font_description_from_pattern (pattern, 0);
642 FcPatternDestroy (pattern); 695 FcPatternDestroy (pattern);
643} 696}
644 OUTPUT: 697 OUTPUT:
645 RETVAL 698 RETVAL
655 default_font = self; 708 default_font = self;
656 709
657MODULE = CFClient PACKAGE = CFClient::Layout 710MODULE = CFClient PACKAGE = CFClient::Layout
658 711
659CFClient::Layout 712CFClient::Layout
660new (SV *class, int base_height = MIN_FONT_HEIGHT) 713new (SV *class, int rgba = 0)
661 CODE: 714 CODE:
662 New (0, RETVAL, 1, struct cf_layout); 715 New (0, RETVAL, 1, struct cf_layout);
663 RETVAL->pl = pango_layout_new (context); 716
664 RETVAL->base_height = base_height; 717 RETVAL->pl = pango_layout_new (rgba ? cairo_context : ft2_context);
718 RETVAL->rgba = rgba;
719 RETVAL->r = 1.;
720 RETVAL->g = 1.;
721 RETVAL->b = 1.;
722 RETVAL->a = 1.;
723 RETVAL->base_height = MIN_FONT_HEIGHT;
665 RETVAL->font = 0; 724 RETVAL->font = 0;
725
666 pango_layout_set_wrap (RETVAL->pl, PANGO_WRAP_WORD_CHAR); 726 pango_layout_set_wrap (RETVAL->pl, PANGO_WRAP_WORD_CHAR);
667 pango_layout_set_font_description (RETVAL->pl, default_font); 727 layout_update_font (RETVAL);
668 OUTPUT: 728 OUTPUT:
669 RETVAL 729 RETVAL
670 730
671void 731void
672DESTROY (CFClient::Layout self) 732DESTROY (CFClient::Layout self)
673 CODE: 733 CODE:
674 g_object_unref (self->pl); 734 g_object_unref (self->pl);
675 Safefree (self); 735 Safefree (self);
676 736
737int
738is_rgba (CFClient::Layout self)
739 CODE:
740 RETVAL = self->rgba;
741 OUTPUT:
742 RETVAL
743
677void 744void
678set_text (CFClient::Layout self, SV *text_) 745set_text (CFClient::Layout self, SV *text_)
679 CODE: 746 CODE:
680{ 747{
681 STRLEN textlen; 748 STRLEN textlen;
699 CODE: 766 CODE:
700 RETVAL = newSVpv (pango_layout_get_text (self->pl), 0); 767 RETVAL = newSVpv (pango_layout_get_text (self->pl), 0);
701 SvUTF8_on (RETVAL); 768 SvUTF8_on (RETVAL);
702 OUTPUT: 769 OUTPUT:
703 RETVAL 770 RETVAL
771
772void
773set_foreground (CFClient::Layout self, float r, float g, float b, float a = 1.)
774 CODE:
775 self->r = r;
776 self->g = g;
777 self->b = b;
778 self->a = a;
704 779
705void 780void
706set_font (CFClient::Layout self, CFClient::Font font = 0) 781set_font (CFClient::Layout self, CFClient::Font font = 0)
707 CODE: 782 CODE:
708 if (self->font != font) 783 if (self->font != font)
766render (CFClient::Layout self) 841render (CFClient::Layout self)
767 PPCODE: 842 PPCODE:
768{ 843{
769 SV *retval; 844 SV *retval;
770 int w, h; 845 int w, h;
771 FT_Bitmap bitmap;
772 846
773 layout_get_pixel_size (self, &w, &h); 847 layout_get_pixel_size (self, &w, &h);
774 848
849 if (self->rgba)
850 {
851 cairo_surface_t *surface;
852 cairo_t *cairo;
853
854 retval = newSV (w * h * 4);
855 SvPOK_only (retval);
856 SvCUR_set (retval, w * h * 4);
857
858 memset (SvPVX (retval), 0, w * h * 4);
859
860 surface = cairo_image_surface_create_for_data (
861 (void*)SvPVX (retval), CAIRO_FORMAT_ARGB32, w, h, w * 4);
862 cairo = cairo_create (surface);
863 cairo_set_source_rgba (cairo, self->r, self->g, self->b, self->a);
864
865 pango_cairo_show_layout (cairo, self->pl);
866
867 cairo_destroy (cairo);
868 cairo_surface_destroy (surface);
869
870 // what a mess, and its premultiplied, too :(
871 {
872 uint32_t *p = (uint32_t *)SvPVX (retval);
873 uint32_t *e = p + w * h;
874
875 while (p < e)
876 {
877 uint32_t rgba = *p;
878 rgba = (rgba >> 24) | (rgba << 8);
879 rgba = SDL_SwapBE32 (rgba);
880 *p++ = rgba;
881 }
882 }
883
884 EXTEND (SP, 5);
885 PUSHs (sv_2mortal (newSViv (w)));
886 PUSHs (sv_2mortal (newSViv (h)));
887 PUSHs (sv_2mortal (retval));
888 PUSHs (sv_2mortal (newSViv (GL_RGBA)));
889 PUSHs (sv_2mortal (newSViv (GL_RGBA)));
890 }
891 else
892 {
893 FT_Bitmap bitmap;
894
775 retval = newSV (w * h); 895 retval = newSV (w * h);
776 SvPOK_only (retval); 896 SvPOK_only (retval);
777 SvCUR_set (retval, w * h); 897 SvCUR_set (retval, w * h);
778 898
779 bitmap.rows = h; 899 bitmap.rows = h;
780 bitmap.width = w; 900 bitmap.width = w;
781 bitmap.pitch = w; 901 bitmap.pitch = w;
782 bitmap.buffer = (unsigned char*)SvPVX (retval); 902 bitmap.buffer = (unsigned char*)SvPVX (retval);
783 bitmap.num_grays = 256; 903 bitmap.num_grays = 256;
784 bitmap.pixel_mode = FT_PIXEL_MODE_GRAY; 904 bitmap.pixel_mode = FT_PIXEL_MODE_GRAY;
785 905
786 memset (bitmap.buffer, 0, w * h); 906 memset (bitmap.buffer, 0, w * h);
787 907
788 pango_ft2_render_layout (&bitmap, self->pl, 0 * PANGO_SCALE, 0 * PANGO_SCALE); 908 pango_ft2_render_layout (&bitmap, self->pl, 0 * PANGO_SCALE, 0 * PANGO_SCALE);
789 909
790 EXTEND (SP, 3); 910 EXTEND (SP, 5);
791 PUSHs (sv_2mortal (newSViv (w))); 911 PUSHs (sv_2mortal (newSViv (w)));
792 PUSHs (sv_2mortal (newSViv (h))); 912 PUSHs (sv_2mortal (newSViv (h)));
793 PUSHs (sv_2mortal (retval)); 913 PUSHs (sv_2mortal (retval));
914 PUSHs (sv_2mortal (newSViv (GL_ALPHA)));
915 PUSHs (sv_2mortal (newSViv (GL_ALPHA)));
916 }
794} 917}
795 918
796MODULE = CFClient PACKAGE = CFClient::Texture 919MODULE = CFClient PACKAGE = CFClient::Texture
797 920
798void 921void
799draw_quad (SV *self, float x, float y, float w = 0, float h = 0) 922draw_quad (SV *self, float x, float y, float w = 0, float h = 0)
800 PROTOTYPE: $$$;$$ 923 PROTOTYPE: $$$;$$
924 ALIAS:
925 draw_quad_alpha = 1
926 draw_quad_alpha_premultiplied = 2
801 CODE: 927 CODE:
802{ 928{
803 HV *hv = (HV *)SvRV (self); 929 HV *hv = (HV *)SvRV (self);
804 float s = SvNV (*hv_fetch (hv, "s", 1, 1)); 930 float s = SvNV (*hv_fetch (hv, "s", 1, 1));
805 float t = SvNV (*hv_fetch (hv, "t", 1, 1)); 931 float t = SvNV (*hv_fetch (hv, "t", 1, 1));
810 { 936 {
811 w = SvNV (*hv_fetch (hv, "w", 1, 1)); 937 w = SvNV (*hv_fetch (hv, "w", 1, 1));
812 h = SvNV (*hv_fetch (hv, "h", 1, 1)); 938 h = SvNV (*hv_fetch (hv, "h", 1, 1));
813 } 939 }
814 940
941 if (ix)
942 {
943 glEnable (GL_BLEND);
944 glBlendFunc (ix == 1 ? GL_SRC_ALPHA : GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
945 }
946
815 glBindTexture (GL_TEXTURE_2D, name); 947 glBindTexture (GL_TEXTURE_2D, name);
948
816 if (wrap_mode) { 949 if (wrap_mode)
950 {
817 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 951 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
818 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 952 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
819 } 953 }
954
820 glBegin (GL_QUADS); 955 glBegin (GL_QUADS);
821 glTexCoord2f (0, 0); glVertex2f (x , y ); 956 glTexCoord2f (0, 0); glVertex2f (x , y );
822 glTexCoord2f (0, t); glVertex2f (x , y + h); 957 glTexCoord2f (0, t); glVertex2f (x , y + h);
823 glTexCoord2f (s, t); glVertex2f (x + w, y + h); 958 glTexCoord2f (s, t); glVertex2f (x + w, y + h);
824 glTexCoord2f (s, 0); glVertex2f (x + w, y ); 959 glTexCoord2f (s, 0); glVertex2f (x + w, y );
825 glEnd (); 960 glEnd ();
961
962 if (ix)
963 glDisable (GL_BLEND);
826} 964}
827 965
828MODULE = CFClient PACKAGE = CFClient::Map 966MODULE = CFClient PACKAGE = CFClient::Map
829 967
830CFClient::Map 968CFClient::Map
1339 } *civ, const_iv[] = { 1477 } *civ, const_iv[] = {
1340# define const_iv(name) { # name, (IV)name } 1478# define const_iv(name) { # name, (IV)name }
1341 const_iv (GL_COLOR_MATERIAL), 1479 const_iv (GL_COLOR_MATERIAL),
1342 const_iv (GL_SMOOTH), 1480 const_iv (GL_SMOOTH),
1343 const_iv (GL_FLAT), 1481 const_iv (GL_FLAT),
1482 const_iv (GL_DITHER),
1344 const_iv (GL_BLEND), 1483 const_iv (GL_BLEND),
1484 const_iv (GL_SCISSOR_TEST),
1345 const_iv (GL_AND), 1485 const_iv (GL_AND),
1486 const_iv (GL_ONE),
1487 const_iv (GL_ZERO),
1346 const_iv (GL_SRC_ALPHA), 1488 const_iv (GL_SRC_ALPHA),
1489 const_iv (GL_SRC_ALPHA_SATURATE),
1347 const_iv (GL_ONE_MINUS_SRC_ALPHA), 1490 const_iv (GL_ONE_MINUS_SRC_ALPHA),
1491 const_iv (GL_ONE_MINUS_DST_ALPHA),
1348 const_iv (GL_RGB), 1492 const_iv (GL_RGB),
1349 const_iv (GL_RGBA), 1493 const_iv (GL_RGBA),
1350 const_iv (GL_UNSIGNED_BYTE), 1494 const_iv (GL_UNSIGNED_BYTE),
1351 const_iv (GL_ALPHA), 1495 const_iv (GL_ALPHA),
1496 const_iv (GL_LUMINANCE),
1352 const_iv (GL_FLOAT), 1497 const_iv (GL_FLOAT),
1353 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 1498 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
1354 const_iv (GL_COMPILE), 1499 const_iv (GL_COMPILE),
1355 const_iv (GL_TEXTURE_1D), 1500 const_iv (GL_TEXTURE_1D),
1356 const_iv (GL_TEXTURE_2D), 1501 const_iv (GL_TEXTURE_2D),
1367 const_iv (GL_NEAREST_MIPMAP_NEAREST), 1512 const_iv (GL_NEAREST_MIPMAP_NEAREST),
1368 const_iv (GL_LINEAR_MIPMAP_NEAREST), 1513 const_iv (GL_LINEAR_MIPMAP_NEAREST),
1369 const_iv (GL_NEAREST_MIPMAP_LINEAR), 1514 const_iv (GL_NEAREST_MIPMAP_LINEAR),
1370 const_iv (GL_LINEAR_MIPMAP_LINEAR), 1515 const_iv (GL_LINEAR_MIPMAP_LINEAR),
1371 const_iv (GL_GENERATE_MIPMAP), 1516 const_iv (GL_GENERATE_MIPMAP),
1372 const_iv (GL_LINEAR),
1373 const_iv (GL_MODULATE), 1517 const_iv (GL_MODULATE),
1518 const_iv (GL_DECAL),
1374 const_iv (GL_REPLACE), 1519 const_iv (GL_REPLACE),
1375 const_iv (GL_COLOR_BUFFER_BIT), 1520 const_iv (GL_COLOR_BUFFER_BIT),
1376 const_iv (GL_PROJECTION), 1521 const_iv (GL_PROJECTION),
1377 const_iv (GL_MODELVIEW), 1522 const_iv (GL_MODELVIEW),
1378 const_iv (GL_COLOR_LOGIC_OP), 1523 const_iv (GL_COLOR_LOGIC_OP),
1524 const_iv (GL_SEPARABLE_2D),
1379 const_iv (GL_CONVOLUTION_2D), 1525 const_iv (GL_CONVOLUTION_2D),
1380 const_iv (GL_CONVOLUTION_BORDER_MODE), 1526 const_iv (GL_CONVOLUTION_BORDER_MODE),
1381 const_iv (GL_CONSTANT_BORDER), 1527 const_iv (GL_CONSTANT_BORDER),
1382 const_iv (GL_LINES), 1528 const_iv (GL_LINES),
1383 const_iv (GL_QUADS), 1529 const_iv (GL_QUADS),
1408 1554
1409void glBlendFunc (int sfactor, int dfactor) 1555void glBlendFunc (int sfactor, int dfactor)
1410 1556
1411void glLogicOp (int opcode) 1557void glLogicOp (int opcode)
1412 1558
1559void glColorMask (int red, int green, int blue, int alpha)
1560
1413void glMatrixMode (int mode) 1561void glMatrixMode (int mode)
1414 1562
1415void glPushMatrix () 1563void glPushMatrix ()
1416 1564
1417void glPopMatrix () 1565void glPopMatrix ()
1420 1568
1421# near and far are due to microsofts buggy c compiler 1569# near and far are due to microsofts buggy c compiler
1422void glOrtho (double left, double right, double bottom, double top, double near_, double far_) 1570void glOrtho (double left, double right, double bottom, double top, double near_, double far_)
1423 1571
1424void glViewport (int x, int y, int width, int height) 1572void glViewport (int x, int y, int width, int height)
1573
1574void glScissor (int x, int y, int width, int height)
1425 1575
1426void glTranslate (float x, float y, float z = 0.) 1576void glTranslate (float x, float y, float z = 0.)
1427 CODE: 1577 CODE:
1428 glTranslatef (x, y, z); 1578 glTranslatef (x, y, z);
1429 1579
1440void glEnd () 1590void glEnd ()
1441 1591
1442void glColor (float r, float g, float b, float a = 1.0) 1592void glColor (float r, float g, float b, float a = 1.0)
1443 PROTOTYPE: @ 1593 PROTOTYPE: @
1444 CODE: 1594 CODE:
1445 glColor4f (r, g, b, a); 1595 glColor4ub (MIN ((int)(r * 255.f), 255),
1596 MIN ((int)(g * 255.f), 255),
1597 MIN ((int)(b * 255.f), 255),
1598 MIN ((int)(a * 255.f), 255));
1446 1599
1447void glVertex (float x, float y, float z = 0.) 1600void glVertex (float x, float y, float z = 0.)
1448 CODE: 1601 CODE:
1449 glVertex3f (x, y, z); 1602 glVertex3f (x, y, z);
1450 1603
1469void glConvolutionFilter2D (int target, int internalformat, int width, int height, int format, int type, char *data) 1622void glConvolutionFilter2D (int target, int internalformat, int width, int height, int format, int type, char *data)
1470 CODE: 1623 CODE:
1471 GL_CALL (PFNGLCONVOLUTIONFILTER2DEXTPROC, glConvolutionFilter2D, 1624 GL_CALL (PFNGLCONVOLUTIONFILTER2DEXTPROC, glConvolutionFilter2D,
1472 (target, internalformat, width, height, format, type, data)); 1625 (target, internalformat, width, height, format, type, data));
1473 1626
1627void glSeparableFilter2D (int target, int internalformat, int width, int height, int format, int type, char *row, char *column)
1628 CODE:
1629 GL_CALL (PFNGLSEPARABLEFILTER2DEXTPROC, glSeparableFilter2D,
1630 (target, internalformat, width, height, format, type, row, column));
1631
1474void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data) 1632void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data)
1475 1633
1476void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 1634void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
1635
1636void glRasterPos (int x, int y)
1637 CODE:
1638 glRasterPos2i (x, y);
1639
1640void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
1477 1641
1478int glGenTexture () 1642int glGenTexture ()
1479 CODE: 1643 CODE:
1480{ 1644{
1481 GLuint name; 1645 GLuint name;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines