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.194 by root, Thu Jul 12 17:56:50 2007 UTC vs.
Revision 1.201 by root, Tue Jul 17 17:39:06 2007 UTC

587 opengl_fontmap = pango_opengl_font_map_new (); 587 opengl_fontmap = pango_opengl_font_map_new ();
588 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);
589 opengl_context = pango_opengl_font_map_create_context ((PangoOpenGLFontMap *)opengl_fontmap); 589 opengl_context = pango_opengl_font_map_create_context ((PangoOpenGLFontMap *)opengl_fontmap);
590} 590}
591 591
592char *
593SDL_GetError ()
594
592int 595int
593SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE) 596SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | PARACHUTE)
594 597
595void 598void
596SDL_Quit () 599SDL_Quit ()
597 600
598void 601void
599SDL_ListModes () 602SDL_ListModes (int rgb, int alpha)
600 PPCODE: 603 PPCODE:
601{ 604{
602 SDL_Rect **m; 605 SDL_Rect **m;
603 606
604 SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5); 607 SDL_GL_SetAttribute (SDL_GL_RED_SIZE , rgb);
605 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5); 608 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, rgb);
606 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5); 609 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE , rgb);
607 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1); 610 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, alpha);
608 611
609 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15); 612 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
610 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0); 613 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE , 0);
611 614
612 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0); 615 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE , 0);
613 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 616 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
614 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0); 617 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE , 0);
615 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 618 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
616 619
617 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 620 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
618#if SDL_VERSION_ATLEAST(1,2,10) 621#if SDL_VERSION_ATLEAST(1,2,10)
619 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1); 622 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1);
620 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1); 623 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1);
621#endif 624#endif
622 625
623 SDL_EnableUNICODE (1);
624 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
625
626 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 626 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
627 627
628 if (m && m != (SDL_Rect **)-1) 628 if (m && m != (SDL_Rect **)-1)
629 while (*m) 629 while (*m)
630 { 630 {
631 if ((*m)->w >= 640 && (*m)->h >= 480)
632 {
631 AV *av = newAV (); 633 AV *av = newAV ();
632 av_push (av, newSViv ((*m)->w)); 634 av_push (av, newSViv ((*m)->w));
633 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));
634 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av))); 638 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av)));
639 }
635 640
636 ++m; 641 ++m;
637 } 642 }
638} 643}
639 644
640char *
641SDL_GetError ()
642
643int 645int
644SDL_SetVideoMode (int w, int h, int fullscreen) 646SDL_SetVideoMode (int w, int h, int rgb, int alpha, int fullscreen)
645 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
646 RETVAL = !!SDL_SetVideoMode ( 657 RETVAL = !!SDL_SetVideoMode (
647 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0) 658 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0)
648 ); 659 );
660
649 if (RETVAL) 661 if (RETVAL)
650 { 662 {
651 av_clear (texture_av); 663 av_clear (texture_av);
652 664
653 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 665 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
654# 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);
655# include "glfunc.h" 667#include "glfunc.h"
656# undef GL_FUNC 668#undef GL_FUNC
657
658 } 669 }
670}
659 OUTPUT: 671 OUTPUT:
660 RETVAL 672 RETVAL
661 673
662void 674void
663SDL_GL_SwapBuffers () 675SDL_GL_SwapBuffers ()
664 676
665char * 677char *
666SDL_GetKeyName (int sym) 678SDL_GetKeyName (int sym)
667 679
680int
681SDL_GetAppState ()
682
668void 683void
669SDL_PollEvent () 684poll_events ()
670 PPCODE: 685 PPCODE:
671{ 686{
672 SDL_Event ev; 687 SDL_Event ev;
673 688
674 while (SDL_PollEvent (&ev)) 689 SDL_PumpEvents ();
690 while (SDL_PeepEvents (&ev, 1, SDL_GETEVENT, SDL_ALLEVENTS) > 0)
675 { 691 {
676 HV *hv = newHV (); 692 HV *hv = newHV ();
677 hv_store (hv, "type", 4, newSViv (ev.type), 0); 693 hv_store (hv, "type", 4, newSViv (ev.type), 0);
678 694
679 switch (ev.type) 695 switch (ev.type)
691 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0); 707 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
692 hv_store (hv, "state", 5, newSViv (ev.active.state), 0); 708 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
693 break; 709 break;
694 710
695 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
696 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 730 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
697
698 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0); 731 hv_store (hv, "state", 5, newSViv (state), 0);
699 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0); 732 hv_store (hv, "x", 1, newSViv (x), 0);
700 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0); 733 hv_store (hv, "y", 1, newSViv (y), 0);
701 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0); 734 hv_store (hv, "xrel", 4, newSViv (xrel), 0);
702 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0); 735 hv_store (hv, "yrel", 4, newSViv (yrel), 0);
736 }
703 break; 737 break;
704 738
705 case SDL_MOUSEBUTTONDOWN: 739 case SDL_MOUSEBUTTONDOWN:
706 case SDL_MOUSEBUTTONUP: 740 case SDL_MOUSEBUTTONUP:
707 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0); 741 hv_store (hv, "mod", 3, newSViv (SDL_GetModState ()), 0);
1220 flags 1254 flags
1221 ); 1255 );
1222 1256
1223MODULE = CFPlus PACKAGE = CFPlus::Texture 1257MODULE = CFPlus PACKAGE = CFPlus::Texture
1224 1258
1259int minpot (int n)
1260
1225void 1261void
1226pad2pot (SV *data_, SV *w_, SV *h_) 1262pad2pot (SV *data_, SV *w_, SV *h_)
1227 CODE: 1263 CODE:
1228{ 1264{
1229 int ow = SvIV (w_); 1265 int ow = SvIV (w_);
1305 { 1341 {
1306 glDisable (GL_ALPHA_TEST); 1342 glDisable (GL_ALPHA_TEST);
1307 glDisable (GL_BLEND); 1343 glDisable (GL_BLEND);
1308 } 1344 }
1309} 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
1310 1357
1311MODULE = CFPlus PACKAGE = CFPlus::Map 1358MODULE = CFPlus PACKAGE = CFPlus::Map
1312 1359
1313CFPlus::Map 1360CFPlus::Map
1314new (SV *class) 1361new (SV *class)
1927 glDisable (GL_BLEND); 1974 glDisable (GL_BLEND);
1928 glDisable (GL_TEXTURE_2D); 1975 glDisable (GL_TEXTURE_2D);
1929} 1976}
1930 1977
1931void 1978void
1932fow_texture (CFPlus::Map self, int mx, int my, int sw, int sh) 1979fow_texture (CFPlus::Map self, int mx, int my, int sw, int sh, int smoothing, const char *matrix)
1933 PPCODE: 1980 PPCODE:
1934{ 1981{
1935 int x, y; 1982 int x, y;
1936 int sw4 = (sw + 3) & ~3; 1983 int sw4 = (sw + 3) & ~3;
1937 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh)); 1984 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh));
1957 darkness[y * sw4 + x] = cell->darkness 2004 darkness[y * sw4 + x] = cell->darkness
1958 ? 255 - (cell->darkness - 1) 2005 ? 255 - (cell->darkness - 1)
1959 : 255 - FOW_DARKNESS; 2006 : 255 - FOW_DARKNESS;
1960 } 2007 }
1961 } 2008 }
2009
2010 if (smoothing)
2011 {
2012 SV *darkness2_sv = sv_2mortal (newSV (sw4 * sh));
2013 uint8_t *darkness2 = (uint8_t *)SvPVX (darkness2_sv);
2014
2015 SvPOK_only (darkness2_sv);
2016 SvCUR_set (darkness2_sv, sw4 * sh);
2017
2018 for (y = 0; y < sh; ++y)
2019 for (x = 0; x < sw4; ++x)
2020 {
2021 float *f = (float *)matrix;
2022 int dx, dy;
2023 float sum = 0.f;
2024
2025 for (dy = -1; dy <= 1; ++dy)
2026 for (dx = -1; dx <= 1; ++dx)
2027 {
2028 unsigned int x2 = x + dx;
2029 unsigned int y2 = y + dy;
2030
2031 sum += (x2 < sw && y2 < sh ? darkness [y2 * sw4 + x2] : 255) * *f++;
2032 }
2033
2034 darkness2 [y * sw4 + x] = sum > 255. ? 255. : sum;
2035 }
2036
2037 darkness_sv = darkness2_sv;
2038 }
1962 2039
1963 EXTEND (SP, 3); 2040 EXTEND (SP, 3);
1964 PUSHs (sv_2mortal (newSViv (sw4))); 2041 PUSHs (sv_2mortal (newSViv (sw4)));
1965 PUSHs (sv_2mortal (newSViv (sh))); 2042 PUSHs (sv_2mortal (newSViv (sh)));
1966 PUSHs (darkness_sv); 2043 PUSHs (darkness_sv);
2166 CODE: 2243 CODE:
2167 RETVAL = Mix_PlayMusic (self, loops); 2244 RETVAL = Mix_PlayMusic (self, loops);
2168 OUTPUT: 2245 OUTPUT:
2169 RETVAL 2246 RETVAL
2170 2247
2248int
2249fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position)
2250 CODE:
2251 RETVAL = Mix_FadeInMusicPos (self, loops, ms, position);
2252 OUTPUT:
2253 RETVAL
2254
2171MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2255MODULE = CFPlus PACKAGE = CFPlus::OpenGL
2172 2256
2173BOOT: 2257BOOT:
2174{ 2258{
2175 HV *stash = gv_stashpv ("CFPlus::OpenGL", 1); 2259 HV *stash = gv_stashpv ("CFPlus::OpenGL", 1);
2176 static const struct { 2260 static const struct {
2177 const char *name; 2261 const char *name;
2178 IV iv; 2262 IV iv;
2179 } *civ, const_iv[] = { 2263 } *civ, const_iv[] = {
2180# define const_iv(name) { # name, (IV)name } 2264# define const_iv(name) { # name, (IV)name }
2265 const_iv (GL_VENDOR),
2266 const_iv (GL_VERSION),
2267 const_iv (GL_EXTENSIONS),
2181 const_iv (GL_COLOR_MATERIAL), 2268 const_iv (GL_COLOR_MATERIAL),
2182 const_iv (GL_SMOOTH), 2269 const_iv (GL_SMOOTH),
2183 const_iv (GL_FLAT), 2270 const_iv (GL_FLAT),
2184 const_iv (GL_DITHER), 2271 const_iv (GL_DITHER),
2185 const_iv (GL_BLEND), 2272 const_iv (GL_BLEND),
2212 const_iv (GL_LUMINANCE), 2299 const_iv (GL_LUMINANCE),
2213 const_iv (GL_LUMINANCE_ALPHA), 2300 const_iv (GL_LUMINANCE_ALPHA),
2214 const_iv (GL_FLOAT), 2301 const_iv (GL_FLOAT),
2215 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 2302 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
2216 const_iv (GL_COMPILE), 2303 const_iv (GL_COMPILE),
2304 const_iv (GL_PROXY_TEXTURE_1D),
2305 const_iv (GL_PROXY_TEXTURE_2D),
2217 const_iv (GL_TEXTURE_1D), 2306 const_iv (GL_TEXTURE_1D),
2218 const_iv (GL_TEXTURE_2D), 2307 const_iv (GL_TEXTURE_2D),
2219 const_iv (GL_TEXTURE_ENV), 2308 const_iv (GL_TEXTURE_ENV),
2220 const_iv (GL_TEXTURE_MAG_FILTER), 2309 const_iv (GL_TEXTURE_MAG_FILTER),
2221 const_iv (GL_TEXTURE_MIN_FILTER), 2310 const_iv (GL_TEXTURE_MIN_FILTER),
2287 CODE: 2376 CODE:
2288 RETVAL = (char *)glGetString (GL_EXTENSIONS); 2377 RETVAL = (char *)glGetString (GL_EXTENSIONS);
2289 OUTPUT: 2378 OUTPUT:
2290 RETVAL 2379 RETVAL
2291 2380
2381const char *glGetString (GLenum pname)
2382
2383GLint glGetInteger (GLenum pname)
2384 CODE:
2385 glGetIntegerv (pname, &RETVAL);
2386 OUTPUT:
2387 RETVAL
2388
2389GLdouble glGetDouble (GLenum pname)
2390 CODE:
2391 glGetDoublev (pname, &RETVAL);
2392 OUTPUT:
2393 RETVAL
2394
2292int glGetError () 2395int glGetError ()
2293 2396
2294void glFinish () 2397void glFinish ()
2295 2398
2296void glClear (int mask) 2399void glClear (int mask)
2418 2521
2419void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 2522void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
2420 2523
2421void glDrawPixels (int width, int height, int format, int type, char *pixels) 2524void glDrawPixels (int width, int height, int format, int type, char *pixels)
2422 2525
2526void glPixelZoom (float x, float y)
2527
2423void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR) 2528void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
2424 2529
2425int glGenTexture () 2530int glGenTexture ()
2426 CODE: 2531 CODE:
2427 RETVAL = gen_texture (); 2532 RETVAL = gen_texture ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines