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.192 by root, Fri Apr 27 21:27:51 2007 UTC vs.
Revision 1.204 by root, Thu Jul 19 14:54:50 2007 UTC

6# include <wininet.h> 6# include <wininet.h>
7# pragma warning(disable:4244) 7# pragma warning(disable:4244)
8# pragma warning(disable:4761) 8# pragma warning(disable:4761)
9#endif 9#endif
10 10
11//#define DEBUG 1
12#if DEBUG
13# include <valgrind/memcheck.h>
14#endif
15
11#include "EXTERN.h" 16#include "EXTERN.h"
12#include "perl.h" 17#include "perl.h"
13#include "XSUB.h" 18#include "XSUB.h"
14 19
15#ifdef _WIN32 20#ifdef _WIN32
21#include <string.h> 26#include <string.h>
22#include <stdio.h> 27#include <stdio.h>
23#include <stdlib.h> 28#include <stdlib.h>
24 29
25#include <SDL.h> 30#include <SDL.h>
31#include <SDL_thread.h>
26#include <SDL_endian.h> 32#include <SDL_endian.h>
27#include <SDL_image.h> 33#include <SDL_image.h>
28#include <SDL_mixer.h> 34#include <SDL_mixer.h>
29#include <SDL_opengl.h> 35#include <SDL_opengl.h>
30 36
582 opengl_fontmap = pango_opengl_font_map_new (); 588 opengl_fontmap = pango_opengl_font_map_new ();
583 pango_opengl_font_map_set_default_substitute ((PangoOpenGLFontMap *)opengl_fontmap, substitute_func, 0, 0); 589 pango_opengl_font_map_set_default_substitute ((PangoOpenGLFontMap *)opengl_fontmap, substitute_func, 0, 0);
584 opengl_context = pango_opengl_font_map_create_context ((PangoOpenGLFontMap *)opengl_fontmap); 590 opengl_context = pango_opengl_font_map_create_context ((PangoOpenGLFontMap *)opengl_fontmap);
585} 591}
586 592
593char *
594SDL_GetError ()
595
587int 596int
588SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE) 597SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE)
589 598
590void 599void
591SDL_Quit () 600SDL_Quit ()
592 601
593void 602void
594SDL_ListModes () 603SDL_ListModes (int rgb, int alpha)
595 PPCODE: 604 PPCODE:
596{ 605{
597 SDL_Rect **m; 606 SDL_Rect **m;
598 607
599 SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5); 608 SDL_GL_SetAttribute (SDL_GL_RED_SIZE , rgb);
600 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5); 609 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, rgb);
601 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5); 610 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE , rgb);
602 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1); 611 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, alpha);
603 612
604 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15); 613 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
605 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0); 614 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE , 0);
606 615
607 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0); 616 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE , 0);
608 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 617 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
609 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0); 618 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE , 0);
610 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 619 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
611 620
612 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 621 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
613#if SDL_VERSION_ATLEAST(1,2,10) 622#if SDL_VERSION_ATLEAST(1,2,10)
614 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1); 623 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1);
615 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1); 624 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1);
616#endif 625#endif
617 626
618 SDL_EnableUNICODE (1);
619 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
620
621 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 627 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
622 628
623 if (m && m != (SDL_Rect **)-1) 629 if (m && m != (SDL_Rect **)-1)
624 while (*m) 630 while (*m)
625 { 631 {
632 if ((*m)->w >= 640 && (*m)->h >= 480)
633 {
626 AV *av = newAV (); 634 AV *av = newAV ();
627 av_push (av, newSViv ((*m)->w)); 635 av_push (av, newSViv ((*m)->w));
628 av_push (av, newSViv ((*m)->h)); 636 av_push (av, newSViv ((*m)->h));
637 av_push (av, newSViv (rgb));
638 av_push (av, newSViv (alpha));
629 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av))); 639 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av)));
640 }
630 641
631 ++m; 642 ++m;
632 } 643 }
633} 644}
634 645
635char *
636SDL_GetError ()
637
638int 646int
639SDL_SetVideoMode (int w, int h, int fullscreen) 647SDL_SetVideoMode (int w, int h, int rgb, int alpha, int fullscreen)
640 CODE: 648 CODE:
649{
650 SDL_EnableUNICODE (1);
651 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
652
653 SDL_GL_SetAttribute (SDL_GL_RED_SIZE , rgb);
654 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, rgb);
655 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE , rgb);
656 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, alpha);
657
641 RETVAL = !!SDL_SetVideoMode ( 658 RETVAL = !!SDL_SetVideoMode (
642 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0) 659 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0)
643 ); 660 );
661
644 if (RETVAL) 662 if (RETVAL)
645 { 663 {
646 av_clear (texture_av); 664 av_clear (texture_av);
647 665
648 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 666 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
649# define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name); 667#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name);
650# include "glfunc.h" 668#include "glfunc.h"
651# undef GL_FUNC 669#undef GL_FUNC
652
653 } 670 }
671}
654 OUTPUT: 672 OUTPUT:
655 RETVAL 673 RETVAL
656 674
657void 675void
658SDL_GL_SwapBuffers () 676SDL_GL_SwapBuffers ()
659 677
660char * 678char *
661SDL_GetKeyName (int sym) 679SDL_GetKeyName (int sym)
662 680
681int
682SDL_GetAppState ()
683
663void 684void
664SDL_PollEvent () 685poll_events ()
665 PPCODE: 686 PPCODE:
666{ 687{
667 SDL_Event ev; 688 SDL_Event ev;
668 689
669 while (SDL_PollEvent (&ev)) 690 SDL_PumpEvents ();
691 while (SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_ALLEVENTS) > 0)
670 { 692 {
671 HV *hv = newHV (); 693 HV *hv = newHV ();
672 hv_store (hv, "type", 4, newSViv (ev.type), 0); 694 hv_store (hv, "type", 4, newSViv (ev.type), 0);
673 695
674 switch (ev.type) 696 switch (ev.type)
686 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0); 708 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
687 hv_store (hv, "state", 5, newSViv (ev.active.state), 0); 709 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
688 break; 710 break;
689 711
690 case SDL_MOUSEMOTION: 712 case SDL_MOUSEMOTION:
713 {
714 int state = ev.motion.state;
715 int x = ev.motion.x;
716 int y = ev.motion.y;
717 int xrel = ev.motion.xrel;
718 int yrel = ev.motion.yrel;
719
720 /* do simplistic event compression */
721 while (SDL_PeepEvents (&ev, 1, SDL_PEEKEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION)) > 0
722 && state == ev.motion.state)
723 {
724 xrel += ev.motion.xrel;
725 yrel += ev.motion.yrel;
726 x = ev.motion.x;
727 y = ev.motion.y;
728 SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION));
729 }
730
691 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 731 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
692
693 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0); 732 hv_store (hv, "state", 5, newSViv (state), 0);
694 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0); 733 hv_store (hv, "x", 1, newSViv (x), 0);
695 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0); 734 hv_store (hv, "y", 1, newSViv (y), 0);
696 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0); 735 hv_store (hv, "xrel", 4, newSViv (xrel), 0);
697 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0); 736 hv_store (hv, "yrel", 4, newSViv (yrel), 0);
737 }
698 break; 738 break;
699 739
700 case SDL_MOUSEBUTTONDOWN: 740 case SDL_MOUSEBUTTONDOWN:
701 case SDL_MOUSEBUTTONUP: 741 case SDL_MOUSEBUTTONUP:
702 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 742 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
882 ExitThread (retval); // unclean, please beam me up 922 ExitThread (retval); // unclean, please beam me up
883#else 923#else
884 _exit (retval); 924 _exit (retval);
885#endif 925#endif
886 926
927void
928debug ()
929 CODE:
930{
931#if DEBUG
932 VALGRIND_DO_LEAK_CHECK;
933#endif
934}
935
887MODULE = CFPlus PACKAGE = CFPlus::Font 936MODULE = CFPlus PACKAGE = CFPlus::Font
888 937
889CFPlus::Font 938CFPlus::Font
890new_from_file (SV *class, char *path, int id = 0) 939new_from_file (SV *class, char *path, int id = 0)
891 CODE: 940 CODE:
1206 flags 1255 flags
1207 ); 1256 );
1208 1257
1209MODULE = CFPlus PACKAGE = CFPlus::Texture 1258MODULE = CFPlus PACKAGE = CFPlus::Texture
1210 1259
1211void 1260int minpot (int n)
1212pad2pot (SV *data_, SV *w_, SV *h_)
1213 CODE:
1214{
1215 int ow = SvIV (w_);
1216 int oh = SvIV (h_);
1217 1261
1218 if (ow && oh) 1262void
1263pad (SV *data_, int ow, int oh, int nw, int nh)
1264 CODE:
1265{
1266 if ((nw != ow || nh != oh) && SvOK (data_))
1219 { 1267 {
1220 int nw = minpot (ow);
1221 int nh = minpot (oh);
1222
1223 if (nw != ow || nh != oh)
1224 {
1225 if (SvOK (data_))
1226 {
1227 STRLEN datalen; 1268 STRLEN datalen;
1228 char *data = SvPVbyte (data_, datalen); 1269 char *data = SvPVbyte (data_, datalen);
1229 int bpp = datalen / (ow * oh); 1270 int bpp = datalen / (ow * oh);
1230 SV *result_ = sv_2mortal (newSV (nw * nh * bpp)); 1271 SV *result_ = sv_2mortal (newSV (nw * nh * bpp));
1231 1272
1232 SvPOK_only (result_); 1273 SvPOK_only (result_);
1233 SvCUR_set (result_, nw * nh * bpp); 1274 SvCUR_set (result_, nw * nh * bpp);
1234 1275
1235 memset (SvPVX (result_), 0, nw * nh * bpp); 1276 memset (SvPVX (result_), 0, nw * nh * bpp);
1236 while (oh--) 1277 while (oh--)
1237 memcpy (SvPVX (result_) + oh * nw * bpp, data + oh * ow * bpp, ow * bpp); 1278 memcpy (SvPVX (result_) + oh * nw * bpp, data + oh * ow * bpp, ow * bpp);
1238 1279
1239 sv_setsv (data_, result_); 1280 sv_setsv (data_, result_);
1240 }
1241
1242 sv_setiv (w_, nw);
1243 sv_setiv (h_, nh);
1244 }
1245 } 1281 }
1246} 1282}
1247 1283
1248void 1284void
1249draw_quad (SV *self, float x, float y, float w = 0., float h = 0.) 1285draw_quad (SV *self, float x, float y, float w = 0., float h = 0.)
1291 { 1327 {
1292 glDisable (GL_ALPHA_TEST); 1328 glDisable (GL_ALPHA_TEST);
1293 glDisable (GL_BLEND); 1329 glDisable (GL_BLEND);
1294 } 1330 }
1295} 1331}
1332
1333IV texture_valid_2d (GLint internalformat, GLsizei w, GLsizei h, GLenum format, GLenum type)
1334 CODE:
1335{
1336 GLint width;
1337 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, internalformat, w, h, 0, format, type, 0);
1338 glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
1339 RETVAL = width > 0;
1340}
1341 OUTPUT:
1342 RETVAL
1296 1343
1297MODULE = CFPlus PACKAGE = CFPlus::Map 1344MODULE = CFPlus PACKAGE = CFPlus::Map
1298 1345
1299CFPlus::Map 1346CFPlus::Map
1300new (SV *class) 1347new (SV *class)
1917void 1964void
1918fow_texture (CFPlus::Map self, int mx, int my, int sw, int sh) 1965fow_texture (CFPlus::Map self, int mx, int my, int sw, int sh)
1919 PPCODE: 1966 PPCODE:
1920{ 1967{
1921 int x, y; 1968 int x, y;
1969 int sw1 = sw + 2;
1970 int sh1 = sh + 2;
1971 int sh3 = sh * 3;
1922 int sw4 = (sw + 3) & ~3; 1972 int sw34 = (sw * 3 + 3) & ~3;
1973 uint8_t *darkness1 = (uint8_t *)malloc (sw1 * sh1);
1923 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh)); 1974 SV *darkness3_sv = sv_2mortal (newSV (sw34 * sh3));
1924 uint8_t *darkness = (uint8_t *)SvPVX (darkness_sv); 1975 uint8_t *darkness3 = (uint8_t *)SvPVX (darkness3_sv);
1925 1976
1926 memset (darkness, 255, sw4 * sh);
1927 SvPOK_only (darkness_sv); 1977 SvPOK_only (darkness3_sv);
1928 SvCUR_set (darkness_sv, sw4 * sh); 1978 SvCUR_set (darkness3_sv, sw34 * sh3);
1929 1979
1930 mx += self->x; 1980 mx += self->x - 1;
1931 my += self->y; 1981 my += self->y - 1;
1932 1982
1983 memset (darkness1, 255, sw1 * sh1);
1984
1933 for (y = 0; y < sh; y++) 1985 for (y = 0; y < sh1; y++)
1934 if (0 <= y + my && y + my < self->rows) 1986 if (0 <= y + my && y + my < self->rows)
1935 { 1987 {
1936 maprow *row = self->row + (y + my); 1988 maprow *row = self->row + (y + my);
1937 1989
1938 for (x = 0; x < sw; x++) 1990 for (x = 0; x < sw1; x++)
1939 if (row->c0 <= x + mx && x + mx < row->c1) 1991 if (row->c0 <= x + mx && x + mx < row->c1)
1940 { 1992 {
1941 mapcell *cell = row->col + (x + mx - row->c0); 1993 mapcell *cell = row->col + (x + mx - row->c0);
1942 1994
1943 darkness[y * sw4 + x] = cell->darkness 1995 darkness1 [y * sw1 + x] = cell->darkness
1944 ? 255 - (cell->darkness - 1) 1996 ? 255 - (cell->darkness - 1)
1945 : 255 - FOW_DARKNESS; 1997 : 255 - FOW_DARKNESS;
1946 } 1998 }
1947 } 1999 }
1948 2000
2001 for (y = 0; y < sh; ++y)
2002 for (x = 0; x < sw; ++x)
2003 {
2004 uint8_t d11 = darkness1 [(y ) * sw1 + x ];
2005 uint8_t d21 = darkness1 [(y ) * sw1 + x + 1];
2006 uint8_t d31 = darkness1 [(y ) * sw1 + x + 2];
2007 uint8_t d12 = darkness1 [(y + 1) * sw1 + x ];
2008 uint8_t d22 = darkness1 [(y + 1) * sw1 + x + 1];
2009 uint8_t d32 = darkness1 [(y + 1) * sw1 + x + 2];
2010 uint8_t d13 = darkness1 [(y + 2) * sw1 + x ];
2011 uint8_t d23 = darkness1 [(y + 2) * sw1 + x + 1];
2012 uint8_t d33 = darkness1 [(y + 2) * sw1 + x + 2];
2013
2014 uint8_t r11 = (d11 + d21 + d12) / 3;
2015 uint8_t r21 = d21;
2016 uint8_t r31 = (d21 + d31 + d32) / 3;
2017
2018 uint8_t r12 = d12;
2019 uint8_t r22 = d22;
2020 uint8_t r32 = d32;
2021
2022 uint8_t r13 = (d13 + d23 + d12) / 3;
2023 uint8_t r23 = d23;
2024 uint8_t r33 = (d23 + d33 + d32) / 3;
2025
2026 darkness3 [(y * 3 ) * sw34 + (x * 3 )] = MAX (d22, r11);
2027 darkness3 [(y * 3 ) * sw34 + (x * 3 + 1)] = MAX (d22, r21);
2028 darkness3 [(y * 3 ) * sw34 + (x * 3 + 2)] = MAX (d22, r31);
2029 darkness3 [(y * 3 + 1) * sw34 + (x * 3 )] = MAX (d22, r12);
2030 darkness3 [(y * 3 + 1) * sw34 + (x * 3 + 1)] = MAX (d22, r22);
2031 darkness3 [(y * 3 + 1) * sw34 + (x * 3 + 2)] = MAX (d22, r32);
2032 darkness3 [(y * 3 + 2) * sw34 + (x * 3 )] = MAX (d22, r13);
2033 darkness3 [(y * 3 + 2) * sw34 + (x * 3 + 1)] = MAX (d22, r23);
2034 darkness3 [(y * 3 + 2) * sw34 + (x * 3 + 2)] = MAX (d22, r33);
2035 }
2036
2037 free (darkness1);
2038
1949 EXTEND (SP, 3); 2039 EXTEND (SP, 3);
1950 PUSHs (sv_2mortal (newSViv (sw4))); 2040 PUSHs (sv_2mortal (newSViv (sw34)));
1951 PUSHs (sv_2mortal (newSViv (sh))); 2041 PUSHs (sv_2mortal (newSViv (sh3)));
1952 PUSHs (darkness_sv); 2042 PUSHs (darkness3_sv);
1953} 2043}
1954 2044
1955SV * 2045SV *
1956get_rect (CFPlus::Map self, int x0, int y0, int w, int h) 2046get_rect (CFPlus::Map self, int x0, int y0, int w, int h)
1957 CODE: 2047 CODE:
2126 CODE: 2216 CODE:
2127 RETVAL = Mix_VolumeMusic (volume); 2217 RETVAL = Mix_VolumeMusic (volume);
2128 OUTPUT: 2218 OUTPUT:
2129 RETVAL 2219 RETVAL
2130 2220
2221int
2222fade_out (int ms)
2223 CODE:
2224 RETVAL = Mix_FadeOutMusic (ms);
2225 OUTPUT:
2226 RETVAL
2227
2131CFPlus::MixMusic 2228CFPlus::MixMusic
2132new_from_file (SV *class, char *path) 2229new_from_file (SV *class, char *path)
2133 CODE: 2230 CODE:
2134 RETVAL = Mix_LoadMUS (path); 2231 RETVAL = Mix_LoadMUS (path);
2135 OUTPUT: 2232 OUTPUT:
2142 2239
2143int 2240int
2144play (CFPlus::MixMusic self, int loops = -1) 2241play (CFPlus::MixMusic self, int loops = -1)
2145 CODE: 2242 CODE:
2146 RETVAL = Mix_PlayMusic (self, loops); 2243 RETVAL = Mix_PlayMusic (self, loops);
2244 OUTPUT:
2245 RETVAL
2246
2247int
2248fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position)
2249 CODE:
2250 RETVAL = Mix_FadeInMusicPos (self, loops, ms, position);
2147 OUTPUT: 2251 OUTPUT:
2148 RETVAL 2252 RETVAL
2149 2253
2150MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2254MODULE = CFPlus PACKAGE = CFPlus::OpenGL
2151 2255
2155 static const struct { 2259 static const struct {
2156 const char *name; 2260 const char *name;
2157 IV iv; 2261 IV iv;
2158 } *civ, const_iv[] = { 2262 } *civ, const_iv[] = {
2159# define const_iv(name) { # name, (IV)name } 2263# define const_iv(name) { # name, (IV)name }
2264 const_iv (GL_VENDOR),
2265 const_iv (GL_VERSION),
2266 const_iv (GL_EXTENSIONS),
2160 const_iv (GL_COLOR_MATERIAL), 2267 const_iv (GL_COLOR_MATERIAL),
2161 const_iv (GL_SMOOTH), 2268 const_iv (GL_SMOOTH),
2162 const_iv (GL_FLAT), 2269 const_iv (GL_FLAT),
2163 const_iv (GL_DITHER), 2270 const_iv (GL_DITHER),
2164 const_iv (GL_BLEND), 2271 const_iv (GL_BLEND),
2191 const_iv (GL_LUMINANCE), 2298 const_iv (GL_LUMINANCE),
2192 const_iv (GL_LUMINANCE_ALPHA), 2299 const_iv (GL_LUMINANCE_ALPHA),
2193 const_iv (GL_FLOAT), 2300 const_iv (GL_FLOAT),
2194 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 2301 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
2195 const_iv (GL_COMPILE), 2302 const_iv (GL_COMPILE),
2303 const_iv (GL_PROXY_TEXTURE_1D),
2304 const_iv (GL_PROXY_TEXTURE_2D),
2196 const_iv (GL_TEXTURE_1D), 2305 const_iv (GL_TEXTURE_1D),
2197 const_iv (GL_TEXTURE_2D), 2306 const_iv (GL_TEXTURE_2D),
2198 const_iv (GL_TEXTURE_ENV), 2307 const_iv (GL_TEXTURE_ENV),
2199 const_iv (GL_TEXTURE_MAG_FILTER), 2308 const_iv (GL_TEXTURE_MAG_FILTER),
2200 const_iv (GL_TEXTURE_MIN_FILTER), 2309 const_iv (GL_TEXTURE_MIN_FILTER),
2266 CODE: 2375 CODE:
2267 RETVAL = (char *)glGetString (GL_EXTENSIONS); 2376 RETVAL = (char *)glGetString (GL_EXTENSIONS);
2268 OUTPUT: 2377 OUTPUT:
2269 RETVAL 2378 RETVAL
2270 2379
2380const char *glGetString (GLenum pname)
2381
2382GLint glGetInteger (GLenum pname)
2383 CODE:
2384 glGetIntegerv (pname, &RETVAL);
2385 OUTPUT:
2386 RETVAL
2387
2388GLdouble glGetDouble (GLenum pname)
2389 CODE:
2390 glGetDoublev (pname, &RETVAL);
2391 OUTPUT:
2392 RETVAL
2393
2271int glGetError () 2394int glGetError ()
2272 2395
2273void glFinish () 2396void glFinish ()
2274 2397
2275void glClear (int mask) 2398void glClear (int mask)
2397 2520
2398void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 2521void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
2399 2522
2400void glDrawPixels (int width, int height, int format, int type, char *pixels) 2523void glDrawPixels (int width, int height, int format, int type, char *pixels)
2401 2524
2525void glPixelZoom (float x, float y)
2526
2402void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR) 2527void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
2403 2528
2404int glGenTexture () 2529int glGenTexture ()
2405 CODE: 2530 CODE:
2406 RETVAL = gen_texture (); 2531 RETVAL = gen_texture ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines