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.196 by root, Sun Jul 15 21:02:20 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)
1238 flags 1254 flags
1239 ); 1255 );
1240 1256
1241MODULE = CFPlus PACKAGE = CFPlus::Texture 1257MODULE = CFPlus PACKAGE = CFPlus::Texture
1242 1258
1259int minpot (int n)
1260
1243void 1261void
1244pad2pot (SV *data_, SV *w_, SV *h_) 1262pad2pot (SV *data_, SV *w_, SV *h_)
1245 CODE: 1263 CODE:
1246{ 1264{
1247 int ow = SvIV (w_); 1265 int ow = SvIV (w_);
1323 { 1341 {
1324 glDisable (GL_ALPHA_TEST); 1342 glDisable (GL_ALPHA_TEST);
1325 glDisable (GL_BLEND); 1343 glDisable (GL_BLEND);
1326 } 1344 }
1327} 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
1328 1357
1329MODULE = CFPlus PACKAGE = CFPlus::Map 1358MODULE = CFPlus PACKAGE = CFPlus::Map
1330 1359
1331CFPlus::Map 1360CFPlus::Map
1332new (SV *class) 1361new (SV *class)
1945 glDisable (GL_BLEND); 1974 glDisable (GL_BLEND);
1946 glDisable (GL_TEXTURE_2D); 1975 glDisable (GL_TEXTURE_2D);
1947} 1976}
1948 1977
1949void 1978void
1950fow_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)
1951 PPCODE: 1980 PPCODE:
1952{ 1981{
1953 int x, y; 1982 int x, y;
1954 int sw4 = (sw + 3) & ~3; 1983 int sw4 = (sw + 3) & ~3;
1955 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh)); 1984 SV *darkness_sv = sv_2mortal (newSV (sw4 * sh));
1975 darkness[y * sw4 + x] = cell->darkness 2004 darkness[y * sw4 + x] = cell->darkness
1976 ? 255 - (cell->darkness - 1) 2005 ? 255 - (cell->darkness - 1)
1977 : 255 - FOW_DARKNESS; 2006 : 255 - FOW_DARKNESS;
1978 } 2007 }
1979 } 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 }
1980 2039
1981 EXTEND (SP, 3); 2040 EXTEND (SP, 3);
1982 PUSHs (sv_2mortal (newSViv (sw4))); 2041 PUSHs (sv_2mortal (newSViv (sw4)));
1983 PUSHs (sv_2mortal (newSViv (sh))); 2042 PUSHs (sv_2mortal (newSViv (sh)));
1984 PUSHs (darkness_sv); 2043 PUSHs (darkness_sv);
2201 static const struct { 2260 static const struct {
2202 const char *name; 2261 const char *name;
2203 IV iv; 2262 IV iv;
2204 } *civ, const_iv[] = { 2263 } *civ, const_iv[] = {
2205# 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),
2206 const_iv (GL_COLOR_MATERIAL), 2268 const_iv (GL_COLOR_MATERIAL),
2207 const_iv (GL_SMOOTH), 2269 const_iv (GL_SMOOTH),
2208 const_iv (GL_FLAT), 2270 const_iv (GL_FLAT),
2209 const_iv (GL_DITHER), 2271 const_iv (GL_DITHER),
2210 const_iv (GL_BLEND), 2272 const_iv (GL_BLEND),
2237 const_iv (GL_LUMINANCE), 2299 const_iv (GL_LUMINANCE),
2238 const_iv (GL_LUMINANCE_ALPHA), 2300 const_iv (GL_LUMINANCE_ALPHA),
2239 const_iv (GL_FLOAT), 2301 const_iv (GL_FLOAT),
2240 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 2302 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
2241 const_iv (GL_COMPILE), 2303 const_iv (GL_COMPILE),
2304 const_iv (GL_PROXY_TEXTURE_1D),
2305 const_iv (GL_PROXY_TEXTURE_2D),
2242 const_iv (GL_TEXTURE_1D), 2306 const_iv (GL_TEXTURE_1D),
2243 const_iv (GL_TEXTURE_2D), 2307 const_iv (GL_TEXTURE_2D),
2244 const_iv (GL_TEXTURE_ENV), 2308 const_iv (GL_TEXTURE_ENV),
2245 const_iv (GL_TEXTURE_MAG_FILTER), 2309 const_iv (GL_TEXTURE_MAG_FILTER),
2246 const_iv (GL_TEXTURE_MIN_FILTER), 2310 const_iv (GL_TEXTURE_MIN_FILTER),
2312 CODE: 2376 CODE:
2313 RETVAL = (char *)glGetString (GL_EXTENSIONS); 2377 RETVAL = (char *)glGetString (GL_EXTENSIONS);
2314 OUTPUT: 2378 OUTPUT:
2315 RETVAL 2379 RETVAL
2316 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
2317int glGetError () 2395int glGetError ()
2318 2396
2319void glFinish () 2397void glFinish ()
2320 2398
2321void glClear (int mask) 2399void glClear (int mask)
2443 2521
2444void 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)
2445 2523
2446void glDrawPixels (int width, int height, int format, int type, char *pixels) 2524void glDrawPixels (int width, int height, int format, int type, char *pixels)
2447 2525
2526void glPixelZoom (float x, float y)
2527
2448void 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)
2449 2529
2450int glGenTexture () 2530int glGenTexture ()
2451 CODE: 2531 CODE:
2452 RETVAL = gen_texture (); 2532 RETVAL = gen_texture ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines