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.176 by root, Tue Apr 10 09:39:48 2007 UTC vs.
Revision 1.199 by root, Tue Jul 17 13:53:02 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
56# define PARACHUTE SDL_INIT_NOPARACHUTE 61# define PARACHUTE SDL_INIT_NOPARACHUTE
57#else 62#else
58# define PARACHUTE 0 63# define PARACHUTE 0
59#endif 64#endif
60 65
66static AV *texture_av;
67
61static struct 68static struct
62{ 69{
63#define GL_FUNC(ptr,name) ptr name; 70#define GL_FUNC(ptr,name) ptr name;
64#include "glfunc.h" 71#include "glfunc.h"
65#undef GL_FUNC 72#undef GL_FUNC
66} gl; 73} gl;
67 74
75static void
68static void gl_BlendFuncSeparate (GLenum sa, GLenum da, GLenum saa, GLenum daa) 76gl_BlendFuncSeparate (GLenum sa, GLenum da, GLenum saa, GLenum daa)
69{ 77{
70 if (gl.BlendFuncSeparate) 78 if (gl.BlendFuncSeparate)
71 gl.BlendFuncSeparate (sa, da, saa, daa); 79 gl.BlendFuncSeparate (sa, da, saa, daa);
72 else if (gl.BlendFuncSeparateEXT) 80 else if (gl.BlendFuncSeparateEXT)
73 gl.BlendFuncSeparateEXT (sa, da, saa, daa); 81 gl.BlendFuncSeparateEXT (sa, da, saa, daa);
74 else 82 else
75 glBlendFunc (sa, da); 83 glBlendFunc (sa, da);
84}
85
86static GLuint
87gen_texture ()
88{
89 GLuint name;
90
91 if (AvFILL (texture_av) >= 0)
92 name = (GLuint)(size_t)av_pop (texture_av);
93 else
94 glGenTextures (1, &name);
95
96 return name;
97}
98
99static void
100del_texture (GLuint name)
101{
102 /* make a half-assed attempt at returning the memory used by the texture */
103 /* textures are frequently being reused by cfplus anyway */
104 /*glBindTexture (GL_TEXTURE_2D, name);*/
105 /*glTexImage2D (GL_TEXTURE_2D, 0, GL_ALPHA, 0, 0, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 0);*/
106 av_push (texture_av, (SV *)(size_t)name);
107 glDeleteTextures (1, &name);
76} 108}
77 109
78#include "texcache.c" 110#include "texcache.c"
79 111
80#include "pango-font.c" 112#include "pango-font.c"
345} smooth_key; 377} smooth_key;
346 378
347static void 379static void
348smooth_or_bits (HV *hv, smooth_key *key, IV bits) 380smooth_or_bits (HV *hv, smooth_key *key, IV bits)
349{ 381{
350 SV **sv = hv_fetch (hv, (char *)key, sizeof (key), 1); 382 SV **sv = hv_fetch (hv, (char *)key, sizeof (*key), 1);
351 383
352 if (SvIOK (*sv)) 384 if (SvIOK (*sv))
353 SvIV_set (*sv, SvIVX (*sv) | bits); 385 SvIV_set (*sv, SvIVX (*sv) | bits);
354 else 386 else
355 sv_setiv (*sv, bits); 387 sv_setiv (*sv, bits);
614 RETVAL = !!SDL_SetVideoMode ( 646 RETVAL = !!SDL_SetVideoMode (
615 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0) 647 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0)
616 ); 648 );
617 if (RETVAL) 649 if (RETVAL)
618 { 650 {
651 av_clear (texture_av);
652
619 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 653 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
620# define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name); 654# define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name);
621# include "glfunc.h" 655# include "glfunc.h"
622# undef GL_FUNC 656# undef GL_FUNC
657
623 } 658 }
624 OUTPUT: 659 OUTPUT:
625 RETVAL 660 RETVAL
626 661
627void 662void
628SDL_GL_SwapBuffers () 663SDL_GL_SwapBuffers ()
629 664
630char * 665char *
631SDL_GetKeyName (int sym) 666SDL_GetKeyName (int sym)
632 667
668int
669SDL_GetAppState ()
670
633void 671void
634SDL_PollEvent () 672poll_events ()
635 PPCODE: 673 PPCODE:
636{ 674{
637 SDL_Event ev; 675 SDL_Event ev;
638 676
639 while (SDL_PollEvent (&ev)) 677 SDL_PumpEvents ();
678 while (SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_ALLEVENTS) > 0)
640 { 679 {
641 HV *hv = newHV (); 680 HV *hv = newHV ();
642 hv_store (hv, "type", 4, newSViv (ev.type), 0); 681 hv_store (hv, "type", 4, newSViv (ev.type), 0);
643 682
644 switch (ev.type) 683 switch (ev.type)
656 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0); 695 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
657 hv_store (hv, "state", 5, newSViv (ev.active.state), 0); 696 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
658 break; 697 break;
659 698
660 case SDL_MOUSEMOTION: 699 case SDL_MOUSEMOTION:
700 {
701 int state = ev.motion.state;
702 int x = ev.motion.x;
703 int y = ev.motion.y;
704 int xrel = ev.motion.xrel;
705 int yrel = ev.motion.yrel;
706
707 /* do simplistic event compression */
708 while (SDL_PeepEvents (&ev, 1, SDL_PEEKEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION)) > 0
709 && state == ev.motion.state)
710 {
711 xrel += ev.motion.xrel;
712 yrel += ev.motion.yrel;
713 x = ev.motion.x;
714 y = ev.motion.y;
715 SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION));
716 }
717
661 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 718 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
662
663 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0); 719 hv_store (hv, "state", 5, newSViv (state), 0);
664 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0); 720 hv_store (hv, "x", 1, newSViv (x), 0);
665 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0); 721 hv_store (hv, "y", 1, newSViv (y), 0);
666 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0); 722 hv_store (hv, "xrel", 4, newSViv (xrel), 0);
667 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0); 723 hv_store (hv, "yrel", 4, newSViv (yrel), 0);
724 }
668 break; 725 break;
669 726
670 case SDL_MOUSEBUTTONDOWN: 727 case SDL_MOUSEBUTTONDOWN:
671 case SDL_MOUSEBUTTONUP: 728 case SDL_MOUSEBUTTONUP:
672 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 729 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
701Mix_AllocateChannels (int numchans = -1) 758Mix_AllocateChannels (int numchans = -1)
702 759
703void 760void
704lowdelay (int fd, int val = 1) 761lowdelay (int fd, int val = 1)
705 CODE: 762 CODE:
706#ifndef _WIN32
707 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof (val)); 763 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (void *)&val, sizeof (val));
708#endif
709 764
710void 765void
711win32_proxy_info () 766win32_proxy_info ()
712 PPCODE: 767 PPCODE:
713{ 768{
854 ExitThread (retval); // unclean, please beam me up 909 ExitThread (retval); // unclean, please beam me up
855#else 910#else
856 _exit (retval); 911 _exit (retval);
857#endif 912#endif
858 913
914void
915debug ()
916 CODE:
917{
918#if DEBUG
919 VALGRIND_DO_LEAK_CHECK;
920#endif
921}
922
859MODULE = CFPlus PACKAGE = CFPlus::Font 923MODULE = CFPlus PACKAGE = CFPlus::Font
860 924
861CFPlus::Font 925CFPlus::Font
862new_from_file (SV *class, char *path, int id = 0) 926new_from_file (SV *class, char *path, int id = 0)
863 CODE: 927 CODE:
1178 flags 1242 flags
1179 ); 1243 );
1180 1244
1181MODULE = CFPlus PACKAGE = CFPlus::Texture 1245MODULE = CFPlus PACKAGE = CFPlus::Texture
1182 1246
1247int minpot (int n)
1248
1183void 1249void
1184pad2pot (SV *data_, SV *w_, SV *h_) 1250pad2pot (SV *data_, SV *w_, SV *h_)
1185 CODE: 1251 CODE:
1186{ 1252{
1187 int ow = SvIV (w_); 1253 int ow = SvIV (w_);
1263 { 1329 {
1264 glDisable (GL_ALPHA_TEST); 1330 glDisable (GL_ALPHA_TEST);
1265 glDisable (GL_BLEND); 1331 glDisable (GL_BLEND);
1266 } 1332 }
1267} 1333}
1334
1335IV texture_valid_2d (GLint internalformat, GLsizei w, GLsizei h, GLenum format, GLenum type)
1336 CODE:
1337{
1338 GLint width;
1339 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, internalformat, w, h, 0, format, type, 0);
1340 glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
1341 RETVAL = width > 0;
1342}
1343 OUTPUT:
1344 RETVAL
1268 1345
1269MODULE = CFPlus PACKAGE = CFPlus::Map 1346MODULE = CFPlus PACKAGE = CFPlus::Map
1270 1347
1271CFPlus::Map 1348CFPlus::Map
1272new (SV *class) 1349new (SV *class)
1393 CODE: 1470 CODE:
1394{ 1471{
1395 if (dx > 0) 1472 if (dx > 0)
1396 map_blank (self, self->x, self->y, dx, self->h); 1473 map_blank (self, self->x, self->y, dx, self->h);
1397 else if (dx < 0) 1474 else if (dx < 0)
1398 map_blank (self, self->x + self->w + dx + 1, self->y, -dx, self->h); 1475 map_blank (self, self->x + self->w + dx, self->y, -dx, self->h);
1399 1476
1400 if (dy > 0) 1477 if (dy > 0)
1401 map_blank (self, self->x, self->y, self->w, dy); 1478 map_blank (self, self->x, self->y, self->w, dy);
1402 else if (dy < 0) 1479 else if (dy < 0)
1403 map_blank (self, self->x, self->y + self->h + dy + 1, self->w, -dy); 1480 map_blank (self, self->x, self->y + self->h + dy, self->w, -dy);
1404 1481
1405 self->ox += dx; self->x += dx; 1482 self->ox += dx; self->x += dx;
1406 self->oy += dy; self->y += dy; 1483 self->oy += dy; self->y += dy;
1407 1484
1408 while (self->y < 0) 1485 while (self->y < 0)
1462 } 1539 }
1463 else if (cmd == 6) // monster width 1540 else if (cmd == 6) // monster width
1464 cell->stat_width = *data++ + 1; 1541 cell->stat_width = *data++ + 1;
1465 else if (cmd == 0x47) 1542 else if (cmd == 0x47)
1466 { 1543 {
1467 if (*data == 8) 1544 if (*data == 4)
1468 ; // decode player uuid 1545 ; // decode player count
1469 1546
1470 data += *data + 1; 1547 data += *data + 1;
1471 } 1548 }
1472 else if (cmd == 8) // cell flags 1549 else if (cmd == 8) // cell flags
1473 cell->flags = *data++; 1550 cell->flags = *data++;
1567draw (CFPlus::Map self, int mx, int my, int sw, int sh, int T) 1644draw (CFPlus::Map self, int mx, int my, int sw, int sh, int T)
1568 CODE: 1645 CODE:
1569{ 1646{
1570 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); 1647 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ());
1571 uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level 1648 uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level
1572 uint8_t smooth_max[256][256]; 1649 static uint8_t smooth_max[256][256]; // egad, fats and wasteful on memory (64k)
1573 smooth_key skey; 1650 smooth_key skey;
1574 int x, y, z; 1651 int x, y, z;
1575 int last_name; 1652 int last_name;
1576 1653
1577 // thats current max. sorry. 1654 // thats current max. sorry.
1608 for (x = 0; x < sw; x++) 1685 for (x = 0; x < sw; x++)
1609 if (row->c0 <= x + mx && x + mx < row->c1) 1686 if (row->c0 <= x + mx && x + mx < row->c1)
1610 { 1687 {
1611 mapcell *cell = row->col + (x + mx - row->c0); 1688 mapcell *cell = row->col + (x + mx - row->c0);
1612 1689
1613 for (z = 0; z <= 2; z++)
1614 {
1615 uint8_t level = self->tex [cell->tile [z]].smoothlevel;
1616 if (level > smooth_max [x + 1][y + 1])
1617 smooth_max [x + 1][y + 1] = level; 1690 smooth_max[x + 1][y + 1] =
1618 } 1691 MAX (self->tex [cell->tile [0]].smoothlevel,
1692 MAX (self->tex [cell->tile [1]].smoothlevel,
1693 self->tex [cell->tile [2]].smoothlevel));
1619 } 1694 }
1620 } 1695 }
1621 1696
1622 for (z = 0; z <= 2; z++) 1697 for (z = 0; z <= 2; z++)
1623 { 1698 {
1685 smooth_level [tex.smoothlevel >> 5] |= ((uint32_t)1) << (tex.smoothlevel & 31); 1760 smooth_level [tex.smoothlevel >> 5] |= ((uint32_t)1) << (tex.smoothlevel & 31);
1686 1761
1687 // add bits to current tile and all neighbours. skey.x|y is 1762 // add bits to current tile and all neighbours. skey.x|y is
1688 // shifted +1|+1 so we always stay positive. 1763 // shifted +1|+1 so we always stay positive.
1689 1764
1765 // bits is ___n cccc CCCC bbbb
1766 // n do not draw borders&corners
1767 // c draw these corners, but...
1768 // C ... not these
1769 // b draw these borders
1770
1771 // borders: 1 ┃· 2 ━━ 4 ·┃ 8 ··
1772 // ┃· ·· ·┃ ━━
1773
1774 // corners: 1 ┛· 2 ·┗ 4 ·· 8 ··
1775 // ·· ·· ·┏ ┓·
1776
1690 // full tile 1777 // full tile
1691 skey.x = x + 1; skey.y = y + 1; smooth_or_bits (smooth, &skey, 0x1000); 1778 skey.x = x + 1; skey.y = y + 1; smooth_or_bits (smooth, &skey, 0x1000);
1692 1779
1693 // borders 1780 // borders
1694 skey.x = x + 2; skey.y = y + 1; smooth_or_bits (smooth, &skey, 0x0031); 1781 skey.x = x + 2; skey.y = y + 1; smooth_or_bits (smooth, &skey, 0x0091);
1695 skey.x = x + 1; skey.y = y + 2; smooth_or_bits (smooth, &skey, 0x0092); 1782 skey.x = x + 1; skey.y = y + 2; smooth_or_bits (smooth, &skey, 0x0032);
1696 skey.x = x ; skey.y = y + 1; smooth_or_bits (smooth, &skey, 0x0064); 1783 skey.x = x ; skey.y = y + 1; smooth_or_bits (smooth, &skey, 0x0064);
1697 skey.x = x + 1; skey.y = y ; smooth_or_bits (smooth, &skey, 0x00c8); 1784 skey.x = x + 1; skey.y = y ; smooth_or_bits (smooth, &skey, 0x00c8);
1698 1785
1699 // corners 1786 // corners
1700 skey.x = x + 2; skey.y = y + 2; smooth_or_bits (smooth, &skey, 0x0100); 1787 skey.x = x + 2; skey.y = y + 2; smooth_or_bits (smooth, &skey, 0x0100);
1704 } 1791 }
1705 } 1792 }
1706 } 1793 }
1707 } 1794 }
1708 1795
1709 // go through all smoothlevels, lowest to highest, then draw 1796 // go through all smoothlevels, lowest to highest, then draw.
1710 // this is basically counting sort 1797 // this is basically counting sort
1711 { 1798 {
1712 int w, b; 1799 int w, b;
1713 1800
1714 for (w = 0; w < 256 / 32; ++w) 1801 for (w = 0; w < 256 / 32; ++w)
1725 while ((he = hv_iternext (smooth))) 1812 while ((he = hv_iternext (smooth)))
1726 { 1813 {
1727 smooth_key *skey = (smooth_key *)HeKEY (he); 1814 smooth_key *skey = (smooth_key *)HeKEY (he);
1728 IV bits = SvIVX (HeVAL (he)); 1815 IV bits = SvIVX (HeVAL (he));
1729 1816
1730 // bits is ___n cccc CCCC bbbb
1731 // n do not draw borders&corners
1732 // c draw these corners, but...
1733 // C ... not these
1734 // b draw these borders
1735
1736 if (!(bits & 0x1000) 1817 if (!(bits & 0x1000)
1737 && skey->level == level 1818 && skey->level == level
1738 && level >= smooth_max [skey->x][skey->y]) 1819 && level > smooth_max [skey->x][skey->y])
1739 { 1820 {
1740 maptex tex = self->tex [skey->tile]; 1821 maptex tex = self->tex [skey->tile];
1741 int px = (((int)skey->x) - 1) * T; 1822 int px = (((int)skey->x) - 1) * T;
1742 int py = (((int)skey->y) - 1) * T; 1823 int py = (((int)skey->y) - 1) * T;
1743 int border = bits & 15; 1824 int border = bits & 15;
2094 CODE: 2175 CODE:
2095 RETVAL = Mix_VolumeMusic (volume); 2176 RETVAL = Mix_VolumeMusic (volume);
2096 OUTPUT: 2177 OUTPUT:
2097 RETVAL 2178 RETVAL
2098 2179
2180int
2181fade_out (int ms)
2182 CODE:
2183 RETVAL = Mix_FadeOutMusic (ms);
2184 OUTPUT:
2185 RETVAL
2186
2099CFPlus::MixMusic 2187CFPlus::MixMusic
2100new_from_file (SV *class, char *path) 2188new_from_file (SV *class, char *path)
2101 CODE: 2189 CODE:
2102 RETVAL = Mix_LoadMUS (path); 2190 RETVAL = Mix_LoadMUS (path);
2103 OUTPUT: 2191 OUTPUT:
2110 2198
2111int 2199int
2112play (CFPlus::MixMusic self, int loops = -1) 2200play (CFPlus::MixMusic self, int loops = -1)
2113 CODE: 2201 CODE:
2114 RETVAL = Mix_PlayMusic (self, loops); 2202 RETVAL = Mix_PlayMusic (self, loops);
2203 OUTPUT:
2204 RETVAL
2205
2206int
2207fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position)
2208 CODE:
2209 RETVAL = Mix_FadeInMusicPos (self, loops, ms, position);
2115 OUTPUT: 2210 OUTPUT:
2116 RETVAL 2211 RETVAL
2117 2212
2118MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2213MODULE = CFPlus PACKAGE = CFPlus::OpenGL
2119 2214
2123 static const struct { 2218 static const struct {
2124 const char *name; 2219 const char *name;
2125 IV iv; 2220 IV iv;
2126 } *civ, const_iv[] = { 2221 } *civ, const_iv[] = {
2127# define const_iv(name) { # name, (IV)name } 2222# define const_iv(name) { # name, (IV)name }
2223 const_iv (GL_VENDOR),
2224 const_iv (GL_VERSION),
2225 const_iv (GL_EXTENSIONS),
2128 const_iv (GL_COLOR_MATERIAL), 2226 const_iv (GL_COLOR_MATERIAL),
2129 const_iv (GL_SMOOTH), 2227 const_iv (GL_SMOOTH),
2130 const_iv (GL_FLAT), 2228 const_iv (GL_FLAT),
2131 const_iv (GL_DITHER), 2229 const_iv (GL_DITHER),
2132 const_iv (GL_BLEND), 2230 const_iv (GL_BLEND),
2159 const_iv (GL_LUMINANCE), 2257 const_iv (GL_LUMINANCE),
2160 const_iv (GL_LUMINANCE_ALPHA), 2258 const_iv (GL_LUMINANCE_ALPHA),
2161 const_iv (GL_FLOAT), 2259 const_iv (GL_FLOAT),
2162 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 2260 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
2163 const_iv (GL_COMPILE), 2261 const_iv (GL_COMPILE),
2262 const_iv (GL_PROXY_TEXTURE_1D),
2263 const_iv (GL_PROXY_TEXTURE_2D),
2164 const_iv (GL_TEXTURE_1D), 2264 const_iv (GL_TEXTURE_1D),
2165 const_iv (GL_TEXTURE_2D), 2265 const_iv (GL_TEXTURE_2D),
2166 const_iv (GL_TEXTURE_ENV), 2266 const_iv (GL_TEXTURE_ENV),
2167 const_iv (GL_TEXTURE_MAG_FILTER), 2267 const_iv (GL_TEXTURE_MAG_FILTER),
2168 const_iv (GL_TEXTURE_MIN_FILTER), 2268 const_iv (GL_TEXTURE_MIN_FILTER),
2208# undef const_iv 2308# undef const_iv
2209 }; 2309 };
2210 2310
2211 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 2311 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
2212 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 2312 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
2313
2314 texture_av = newAV ();
2315 AvREAL_off (texture_av);
2213} 2316}
2214 2317
2215char * 2318char *
2216gl_vendor () 2319gl_vendor ()
2217 CODE: 2320 CODE:
2228 2331
2229char * 2332char *
2230gl_extensions () 2333gl_extensions ()
2231 CODE: 2334 CODE:
2232 RETVAL = (char *)glGetString (GL_EXTENSIONS); 2335 RETVAL = (char *)glGetString (GL_EXTENSIONS);
2336 OUTPUT:
2337 RETVAL
2338
2339char *glGetString (GLenum pname)
2340
2341GLint glGetInteger (GLenum pname)
2342 CODE:
2343 glGetIntegerv (pname, &RETVAL);
2344 OUTPUT:
2345 RETVAL
2346
2347GLdouble glGetDouble (GLenum pname)
2348 CODE:
2349 glGetDoublev (pname, &RETVAL);
2233 OUTPUT: 2350 OUTPUT:
2234 RETVAL 2351 RETVAL
2235 2352
2236int glGetError () 2353int glGetError ()
2237 2354
2362 2479
2363void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 2480void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
2364 2481
2365void glDrawPixels (int width, int height, int format, int type, char *pixels) 2482void glDrawPixels (int width, int height, int format, int type, char *pixels)
2366 2483
2484void glPixelZoom (float x, float y)
2485
2367void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR) 2486void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
2368 2487
2369int glGenTexture () 2488int glGenTexture ()
2370 CODE: 2489 CODE:
2371{ 2490 RETVAL = gen_texture ();
2372 GLuint name;
2373 glGenTextures (1, &name);
2374 RETVAL = name;
2375}
2376 OUTPUT: 2491 OUTPUT:
2377 RETVAL 2492 RETVAL
2378 2493
2379void glDeleteTexture (int name) 2494void glDeleteTexture (int name)
2380 CODE: 2495 CODE:
2381{
2382 GLuint name_ = name;
2383 glDeleteTextures (1, &name_); 2496 del_texture (name);
2384} 2497
2385
2386int glGenList () 2498int glGenList ()
2387 CODE: 2499 CODE:
2388 RETVAL = glGenLists (1); 2500 RETVAL = glGenLists (1);
2389 OUTPUT: 2501 OUTPUT:
2390 RETVAL 2502 RETVAL

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines