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.200 by root, Tue Jul 17 16:02:13 2007 UTC

4# include <malloc.h> 4# include <malloc.h>
5# include <windows.h> 5# include <windows.h>
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
10
11//#define DEBUG 1
12#if DEBUG
13# include <valgrind/memcheck.h>
9#endif 14#endif
10 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"
582 opengl_fontmap = pango_opengl_font_map_new (); 587 opengl_fontmap = pango_opengl_font_map_new ();
583 pango_opengl_font_map_set_default_substitute ((PangoOpenGLFontMap *)opengl_fontmap, substitute_func, 0, 0); 588 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); 589 opengl_context = pango_opengl_font_map_create_context ((PangoOpenGLFontMap *)opengl_fontmap);
585} 590}
586 591
592char *
593SDL_GetError ()
594
587int 595int
588SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE) 596SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE)
589 597
590void 598void
591SDL_Quit () 599SDL_Quit ()
592 600
593void 601void
594SDL_ListModes () 602SDL_ListModes (int rgb, int alpha)
595 PPCODE: 603 PPCODE:
596{ 604{
597 SDL_Rect **m; 605 SDL_Rect **m;
598 606
599 SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5); 607 SDL_GL_SetAttribute (SDL_GL_RED_SIZE , rgb);
600 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5); 608 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, rgb);
601 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5); 609 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE , rgb);
602 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1); 610 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, alpha);
603 611
604 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15); 612 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
605 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0); 613 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE , 0);
606 614
607 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0); 615 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE , 0);
608 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 616 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
609 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0); 617 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE , 0);
610 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 618 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
611 619
612 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 620 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
613#if SDL_VERSION_ATLEAST(1,2,10) 621#if SDL_VERSION_ATLEAST(1,2,10)
614 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1); 622 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1);
615 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1); 623 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1);
616#endif 624#endif
617 625
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); 626 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
622 627
623 if (m && m != (SDL_Rect **)-1) 628 if (m && m != (SDL_Rect **)-1)
624 while (*m) 629 while (*m)
625 { 630 {
631 if ((*m)->w >= 640 && (*m)->h >= 480)
632 {
626 AV *av = newAV (); 633 AV *av = newAV ();
627 av_push (av, newSViv ((*m)->w)); 634 av_push (av, newSViv ((*m)->w));
628 av_push (av, newSViv ((*m)->h)); 635 av_push (av, newSViv ((*m)->h));
636 av_push (av, newSViv (rgb));
637 av_push (av, newSViv (alpha));
629 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av))); 638 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av)));
639 }
630 640
631 ++m; 641 ++m;
632 } 642 }
633} 643}
634 644
635char *
636SDL_GetError ()
637
638int 645int
639SDL_SetVideoMode (int w, int h, int fullscreen) 646SDL_SetVideoMode (int w, int h, int rgb, int alpha, int fullscreen)
640 CODE: 647 CODE:
648{
649 SDL_EnableUNICODE (1);
650 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
651
652 SDL_GL_SetAttribute (SDL_GL_RED_SIZE , rgb);
653 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, rgb);
654 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE , rgb);
655 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, alpha);
656
641 RETVAL = !!SDL_SetVideoMode ( 657 RETVAL = !!SDL_SetVideoMode (
642 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0) 658 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0)
643 ); 659 );
660
644 if (RETVAL) 661 if (RETVAL)
645 { 662 {
646 av_clear (texture_av); 663 av_clear (texture_av);
647 664
648 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 665 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
649# define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name); 666#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name);
650# include "glfunc.h" 667#include "glfunc.h"
651# undef GL_FUNC 668#undef GL_FUNC
652
653 } 669 }
670}
654 OUTPUT: 671 OUTPUT:
655 RETVAL 672 RETVAL
656 673
657void 674void
658SDL_GL_SwapBuffers () 675SDL_GL_SwapBuffers ()
659 676
660char * 677char *
661SDL_GetKeyName (int sym) 678SDL_GetKeyName (int sym)
662 679
680int
681SDL_GetAppState ()
682
663void 683void
664SDL_PollEvent () 684poll_events ()
665 PPCODE: 685 PPCODE:
666{ 686{
667 SDL_Event ev; 687 SDL_Event ev;
668 688
669 while (SDL_PollEvent (&ev)) 689 SDL_PumpEvents ();
690 while (SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_ALLEVENTS) > 0)
670 { 691 {
671 HV *hv = newHV (); 692 HV *hv = newHV ();
672 hv_store (hv, "type", 4, newSViv (ev.type), 0); 693 hv_store (hv, "type", 4, newSViv (ev.type), 0);
673 694
674 switch (ev.type) 695 switch (ev.type)
686 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0); 707 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
687 hv_store (hv, "state", 5, newSViv (ev.active.state), 0); 708 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
688 break; 709 break;
689 710
690 case SDL_MOUSEMOTION: 711 case SDL_MOUSEMOTION:
712 {
713 int state = ev.motion.state;
714 int x = ev.motion.x;
715 int y = ev.motion.y;
716 int xrel = ev.motion.xrel;
717 int yrel = ev.motion.yrel;
718
719 /* do simplistic event compression */
720 while (SDL_PeepEvents (&ev, 1, SDL_PEEKEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION)) > 0
721 && state == ev.motion.state)
722 {
723 xrel += ev.motion.xrel;
724 yrel += ev.motion.yrel;
725 x = ev.motion.x;
726 y = ev.motion.y;
727 SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION));
728 }
729
691 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 730 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
692
693 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0); 731 hv_store (hv, "state", 5, newSViv (state), 0);
694 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0); 732 hv_store (hv, "x", 1, newSViv (x), 0);
695 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0); 733 hv_store (hv, "y", 1, newSViv (y), 0);
696 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0); 734 hv_store (hv, "xrel", 4, newSViv (xrel), 0);
697 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0); 735 hv_store (hv, "yrel", 4, newSViv (yrel), 0);
736 }
698 break; 737 break;
699 738
700 case SDL_MOUSEBUTTONDOWN: 739 case SDL_MOUSEBUTTONDOWN:
701 case SDL_MOUSEBUTTONUP: 740 case SDL_MOUSEBUTTONUP:
702 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 741 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
882 ExitThread (retval); // unclean, please beam me up 921 ExitThread (retval); // unclean, please beam me up
883#else 922#else
884 _exit (retval); 923 _exit (retval);
885#endif 924#endif
886 925
926void
927debug ()
928 CODE:
929{
930#if DEBUG
931 VALGRIND_DO_LEAK_CHECK;
932#endif
933}
934
887MODULE = CFPlus PACKAGE = CFPlus::Font 935MODULE = CFPlus PACKAGE = CFPlus::Font
888 936
889CFPlus::Font 937CFPlus::Font
890new_from_file (SV *class, char *path, int id = 0) 938new_from_file (SV *class, char *path, int id = 0)
891 CODE: 939 CODE:
1206 flags 1254 flags
1207 ); 1255 );
1208 1256
1209MODULE = CFPlus PACKAGE = CFPlus::Texture 1257MODULE = CFPlus PACKAGE = CFPlus::Texture
1210 1258
1259int minpot (int n)
1260
1211void 1261void
1212pad2pot (SV *data_, SV *w_, SV *h_) 1262pad2pot (SV *data_, SV *w_, SV *h_)
1213 CODE: 1263 CODE:
1214{ 1264{
1215 int ow = SvIV (w_); 1265 int ow = SvIV (w_);
1291 { 1341 {
1292 glDisable (GL_ALPHA_TEST); 1342 glDisable (GL_ALPHA_TEST);
1293 glDisable (GL_BLEND); 1343 glDisable (GL_BLEND);
1294 } 1344 }
1295} 1345}
1346
1347IV texture_valid_2d (GLint internalformat, GLsizei w, GLsizei h, GLenum format, GLenum type)
1348 CODE:
1349{
1350 GLint width;
1351 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, internalformat, w, h, 0, format, type, 0);
1352 glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
1353 RETVAL = width > 0;
1354}
1355 OUTPUT:
1356 RETVAL
1296 1357
1297MODULE = CFPlus PACKAGE = CFPlus::Map 1358MODULE = CFPlus PACKAGE = CFPlus::Map
1298 1359
1299CFPlus::Map 1360CFPlus::Map
1300new (SV *class) 1361new (SV *class)
2126 CODE: 2187 CODE:
2127 RETVAL = Mix_VolumeMusic (volume); 2188 RETVAL = Mix_VolumeMusic (volume);
2128 OUTPUT: 2189 OUTPUT:
2129 RETVAL 2190 RETVAL
2130 2191
2192int
2193fade_out (int ms)
2194 CODE:
2195 RETVAL = Mix_FadeOutMusic (ms);
2196 OUTPUT:
2197 RETVAL
2198
2131CFPlus::MixMusic 2199CFPlus::MixMusic
2132new_from_file (SV *class, char *path) 2200new_from_file (SV *class, char *path)
2133 CODE: 2201 CODE:
2134 RETVAL = Mix_LoadMUS (path); 2202 RETVAL = Mix_LoadMUS (path);
2135 OUTPUT: 2203 OUTPUT:
2142 2210
2143int 2211int
2144play (CFPlus::MixMusic self, int loops = -1) 2212play (CFPlus::MixMusic self, int loops = -1)
2145 CODE: 2213 CODE:
2146 RETVAL = Mix_PlayMusic (self, loops); 2214 RETVAL = Mix_PlayMusic (self, loops);
2215 OUTPUT:
2216 RETVAL
2217
2218int
2219fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position)
2220 CODE:
2221 RETVAL = Mix_FadeInMusicPos (self, loops, ms, position);
2147 OUTPUT: 2222 OUTPUT:
2148 RETVAL 2223 RETVAL
2149 2224
2150MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2225MODULE = CFPlus PACKAGE = CFPlus::OpenGL
2151 2226
2155 static const struct { 2230 static const struct {
2156 const char *name; 2231 const char *name;
2157 IV iv; 2232 IV iv;
2158 } *civ, const_iv[] = { 2233 } *civ, const_iv[] = {
2159# define const_iv(name) { # name, (IV)name } 2234# define const_iv(name) { # name, (IV)name }
2235 const_iv (GL_VENDOR),
2236 const_iv (GL_VERSION),
2237 const_iv (GL_EXTENSIONS),
2160 const_iv (GL_COLOR_MATERIAL), 2238 const_iv (GL_COLOR_MATERIAL),
2161 const_iv (GL_SMOOTH), 2239 const_iv (GL_SMOOTH),
2162 const_iv (GL_FLAT), 2240 const_iv (GL_FLAT),
2163 const_iv (GL_DITHER), 2241 const_iv (GL_DITHER),
2164 const_iv (GL_BLEND), 2242 const_iv (GL_BLEND),
2191 const_iv (GL_LUMINANCE), 2269 const_iv (GL_LUMINANCE),
2192 const_iv (GL_LUMINANCE_ALPHA), 2270 const_iv (GL_LUMINANCE_ALPHA),
2193 const_iv (GL_FLOAT), 2271 const_iv (GL_FLOAT),
2194 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 2272 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
2195 const_iv (GL_COMPILE), 2273 const_iv (GL_COMPILE),
2274 const_iv (GL_PROXY_TEXTURE_1D),
2275 const_iv (GL_PROXY_TEXTURE_2D),
2196 const_iv (GL_TEXTURE_1D), 2276 const_iv (GL_TEXTURE_1D),
2197 const_iv (GL_TEXTURE_2D), 2277 const_iv (GL_TEXTURE_2D),
2198 const_iv (GL_TEXTURE_ENV), 2278 const_iv (GL_TEXTURE_ENV),
2199 const_iv (GL_TEXTURE_MAG_FILTER), 2279 const_iv (GL_TEXTURE_MAG_FILTER),
2200 const_iv (GL_TEXTURE_MIN_FILTER), 2280 const_iv (GL_TEXTURE_MIN_FILTER),
2266 CODE: 2346 CODE:
2267 RETVAL = (char *)glGetString (GL_EXTENSIONS); 2347 RETVAL = (char *)glGetString (GL_EXTENSIONS);
2268 OUTPUT: 2348 OUTPUT:
2269 RETVAL 2349 RETVAL
2270 2350
2351char *glGetString (GLenum pname)
2352
2353GLint glGetInteger (GLenum pname)
2354 CODE:
2355 glGetIntegerv (pname, &RETVAL);
2356 OUTPUT:
2357 RETVAL
2358
2359GLdouble glGetDouble (GLenum pname)
2360 CODE:
2361 glGetDoublev (pname, &RETVAL);
2362 OUTPUT:
2363 RETVAL
2364
2271int glGetError () 2365int glGetError ()
2272 2366
2273void glFinish () 2367void glFinish ()
2274 2368
2275void glClear (int mask) 2369void glClear (int mask)
2397 2491
2398void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 2492void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
2399 2493
2400void glDrawPixels (int width, int height, int format, int type, char *pixels) 2494void glDrawPixels (int width, int height, int format, int type, char *pixels)
2401 2495
2496void glPixelZoom (float x, float y)
2497
2402void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR) 2498void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
2403 2499
2404int glGenTexture () 2500int glGenTexture ()
2405 CODE: 2501 CODE:
2406 RETVAL = gen_texture (); 2502 RETVAL = gen_texture ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines