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.296 by root, Mon Dec 21 23:52:34 2009 UTC vs.
Revision 1.309 by root, Mon Dec 26 22:30:21 2011 UTC

41#include <SDL_opengl.h> 41#include <SDL_opengl.h>
42 42
43/* work around os x broken headers */ 43/* work around os x broken headers */
44#ifdef __MACOSX__ 44#ifdef __MACOSX__
45typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); 45typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
46typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
47typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
46#endif 48#endif
47 49
48#define PANGO_ENABLE_BACKEND 50#define PANGO_ENABLE_BACKEND
49#define G_DISABLE_CAST_CHECKS 51#define G_DISABLE_CAST_CHECKS
50 52
97 99
98#define KMOD_LRAM 0x10000 // our extension 100#define KMOD_LRAM 0x10000 // our extension
99 101
100#define TEXID_SPEECH 1 102#define TEXID_SPEECH 1
101#define TEXID_NOFACE 2 103#define TEXID_NOFACE 2
102#define TEXID_HIDDEN 3 104
105static char *
106fast_sv_grow (SV *sv, STRLEN need)
107{
108 STRLEN len = SvLEN (sv);
109 STRLEN want = SvCUR (sv) + need;
110
111 if (expect_false (len < want))
112 {
113 do
114 len *= 2;
115 while (len < want);
116
117 sv_grow (sv, len);
118 }
119
120 SvCUR_set (sv, want);
121 return SvEND (sv) - need;
122}
103 123
104static AV *texture_av; 124static AV *texture_av;
105 125
106static struct 126static struct
107{ 127{
459 ev.code = 1; 479 ev.code = 1;
460 ev.data1 = (void *)(long)channel; 480 ev.data1 = (void *)(long)channel;
461 ev.data2 = 0; 481 ev.data2 = 0;
462 482
463 SDL_PushEvent ((SDL_Event *)&ev); 483 SDL_PushEvent ((SDL_Event *)&ev);
484}
485
486static unsigned int
487div255 (unsigned int n)
488{
489 return (n + (n >> 8)) >> 8;
464} 490}
465 491
466static unsigned int 492static unsigned int
467minpot (unsigned int n) 493minpot (unsigned int n)
468{ 494{
795 821
796 const_iv (FOW_DARKNESS) 822 const_iv (FOW_DARKNESS)
797# undef const_iv 823# undef const_iv
798 }; 824 };
799 825
800 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 826 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ > const_iv; civ--)
801 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 827 newCONSTSUB (stash, (char *)civ[-1].name, newSViv (civ[-1].iv));
802 828
803 assert (SDLK_MODIFIER_MIN == SDLK_NUMLOCK); 829 assert (SDLK_MODIFIER_MIN == SDLK_NUMLOCK);
804 assert (SDLK_MODIFIER_MAX == SDLK_COMPOSE); 830 assert (SDLK_MODIFIER_MAX == SDLK_COMPOSE);
805} 831}
806 832
929 955
930 SDL_WM_SetCaption ("Deliantra MORPG Client " VERSION, "Deliantra"); 956 SDL_WM_SetCaption ("Deliantra MORPG Client " VERSION, "Deliantra");
931#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name); 957#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name);
932#include "glfunc.h" 958#include "glfunc.h"
933#undef GL_FUNC 959#undef GL_FUNC
960
961 if (!gl.ActiveTexture ) gl.ActiveTexture = gl.ActiveTextureARB;
962 if (!gl.MultiTexCoord2f) gl.MultiTexCoord2f = gl.MultiTexCoord2fARB;
934 } 963 }
935} 964}
936 OUTPUT: 965 OUTPUT:
937 RETVAL 966 RETVAL
938 967
1023 1052
1024 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("DC::UI::Event", 1)))); 1053 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("DC::UI::Event", 1))));
1025 } 1054 }
1026} 1055}
1027 1056
1057char *
1058SDL_AudioDriverName ()
1059 CODE:
1060{
1061 char buf [256];
1062 if (!SDL_AudioDriverName (buf, sizeof (buf)))
1063 XSRETURN_UNDEF;
1064
1065 RETVAL = buf;
1066}
1067 OUTPUT:
1068 RETVAL
1069
1028int 1070int
1029Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096) 1071Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096)
1030 POSTCALL: 1072 POSTCALL:
1031 Mix_HookMusicFinished (music_finished); 1073 Mix_HookMusicFinished (music_finished);
1032 Mix_ChannelFinished (channel_finished); 1074 Mix_ChannelFinished (channel_finished);
1094add_font (char *file) 1136add_font (char *file)
1095 CODE: 1137 CODE:
1096 RETVAL = FcConfigAppFontAddFile (0, (const FcChar8 *)file); 1138 RETVAL = FcConfigAppFontAddFile (0, (const FcChar8 *)file);
1097 OUTPUT: 1139 OUTPUT:
1098 RETVAL 1140 RETVAL
1141
1142void
1143IMG_Init (int flags = IMG_INIT_JPG | IMG_INIT_PNG)
1144
1145void
1146Mix_Init (int flags = MIX_INIT_MOD | MIX_INIT_MP3 | MIX_INIT_OGG)
1099 1147
1100void 1148void
1101load_image_inline (SV *image_) 1149load_image_inline (SV *image_)
1102 ALIAS: 1150 ALIAS:
1103 load_image_file = 1 1151 load_image_file = 1
1671void 1719void
1672draw_fow_texture (float intensity, int hidden_tex, int name1, uint8_t *data1, float s, float t, int w, int h, float blend = 0.f, int dx = 0, int dy = 0, int name2 = 0, uint8_t *data2 = data1) 1720draw_fow_texture (float intensity, int hidden_tex, int name1, uint8_t *data1, float s, float t, int w, int h, float blend = 0.f, int dx = 0, int dy = 0, int name2 = 0, uint8_t *data2 = data1)
1673 PROTOTYPE: @ 1721 PROTOTYPE: @
1674 CODE: 1722 CODE:
1675{ 1723{
1724 glEnable (GL_BLEND);
1725 glBlendFunc (intensity ? GL_SRC_ALPHA : GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1676 glEnable (GL_TEXTURE_2D); 1726 glEnable (GL_TEXTURE_2D);
1677 glEnable (GL_BLEND);
1678 glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1679 glBindTexture (GL_TEXTURE_2D, name1); 1727 glBindTexture (GL_TEXTURE_2D, name1);
1680 1728
1681 glColor3f (intensity, intensity, intensity); 1729 glColor3f (intensity, intensity, intensity);
1682 glPushMatrix (); 1730 glPushMatrix ();
1683 glScalef (1./3, 1./3, 1.); 1731 glScalef (1./3, 1./3, 1.);
1698 glBindTexture (GL_TEXTURE_2D, name2); 1746 glBindTexture (GL_TEXTURE_2D, name2);
1699 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 1747 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
1700 1748
1701 /* rgb == rgb(glcolor) */ 1749 /* rgb == rgb(glcolor) */
1702 glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); 1750 glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
1703 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT); 1751 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PRIMARY_COLOR);
1704 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 1752 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
1705 1753
1706 /* alpha = interpolate t0, t1 by env_alpha */ 1754 /* alpha = interpolate t0, t1 by env_alpha */
1707 glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, env_color); 1755 glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, env_color);
1708 1756
2095 ? self->row + y 2143 ? self->row + y
2096 : 0; 2144 : 0;
2097 2145
2098 for (x = x0; x < x1; x++) 2146 for (x = x0; x < x1; x++)
2099 { 2147 {
2100 int r = 32, g = 32, b = 32, a = 192; 2148 unsigned int r = 32, g = 32, b = 32, a = 192;
2101 2149
2102 if (row && row->c0 <= x && x < row->c1) 2150 if (row && row->c0 <= x && x < row->c1)
2103 { 2151 {
2104 mapcell *cell = row->col + (x - row->c0); 2152 mapcell *cell = row->col + (x - row->c0);
2105 2153
2107 { 2155 {
2108 maptex tex = self->tex [cell->tile [z]]; 2156 maptex tex = self->tex [cell->tile [z]];
2109 int a0 = 255 - tex.a; 2157 int a0 = 255 - tex.a;
2110 int a1 = tex.a; 2158 int a1 = tex.a;
2111 2159
2112 r = (r * a0 + tex.r * a1) / 255; 2160 r = div255 (r * a0 + tex.r * a1);
2113 g = (g * a0 + tex.g * a1) / 255; 2161 g = div255 (g * a0 + tex.g * a1);
2114 b = (b * a0 + tex.b * a1) / 255; 2162 b = div255 (b * a0 + tex.b * a1);
2115 a = (a * a0 + tex.a * a1) / 255; 2163 a = div255 (a * a0 + tex.a * a1);
2116 } 2164 }
2117 } 2165 }
2118 2166
2119 *map++ = (r ) 2167 *map++ = (r )
2120 | (g << 8) 2168 | (g << 8)
2127} 2175}
2128 OUTPUT: 2176 OUTPUT:
2129 RETVAL 2177 RETVAL
2130 2178
2131void 2179void
2132draw (DC::Map self, int mx, int my, int sw, int sh, int T, U32 player = 0xffffffff, int sdx = 0, int sdy = 0) 2180draw (DC::Map self, int mx, int my, int sw, int sh, int Tw, int Th, U32 player = 0xffffffff, int sdx = 0, int sdy = 0)
2133 CODE: 2181 CODE:
2134{ 2182{
2135 int x, y, z; 2183 int x, y, z;
2136 2184
2137 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); 2185 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ());
2141 int pl_x, pl_y; 2189 int pl_x, pl_y;
2142 maptex pl_tex; 2190 maptex pl_tex;
2143 rc_t *rc = rc_alloc (); 2191 rc_t *rc = rc_alloc ();
2144 rc_t *rc_ov = rc_alloc (); 2192 rc_t *rc_ov = rc_alloc ();
2145 rc_key_t key; 2193 rc_key_t key;
2146 rc_array_t *arr, *arr_hidden; 2194 rc_array_t *arr;
2147 2195
2148 pl_tex.name = 0; 2196 pl_tex.name = 0;
2149 2197
2150 // that's current max. sorry. 2198 // that's current max. sorry.
2151 if (sw > 255) sw = 255; 2199 if (sw > 255) sw = 255;
2188 } 2236 }
2189 2237
2190 glEnable (GL_BLEND); 2238 glEnable (GL_BLEND);
2191 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2239 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
2192 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 2240 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
2193
2194 key.texname = self->tex [TEXID_HIDDEN].name;
2195 arr_hidden = rc_array (rc_ov, &key);
2196 2241
2197 for (z = 0; z <= 2; z++) 2242 for (z = 0; z <= 2; z++)
2198 { 2243 {
2199 memset (smooth_level, 0, sizeof (smooth_level)); 2244 memset (smooth_level, 0, sizeof (smooth_level));
2200 key.texname = -1; 2245 key.texname = -1;
2224 2269
2225 key.texname = tex.name; 2270 key.texname = tex.name;
2226 arr = rc_array (rc, &key); 2271 arr = rc_array (rc, &key);
2227 } 2272 }
2228 2273
2229 px = (x + 1) * T - tex.w; 2274 px = (x + 1) * Th - tex.w;
2230 py = (y + 1) * T - tex.h; 2275 py = (y + 1) * Tw - tex.h;
2231 2276
2232 if (expect_false (cell->player == player) && expect_false (z == 2)) 2277 if (expect_false (cell->player == player) && expect_false (z == 2))
2233 { 2278 {
2234 pl_x = px; 2279 pl_x = px;
2235 pl_y = py; 2280 pl_y = py;
2288 if (cell->flags & 1) 2333 if (cell->flags & 1)
2289 { 2334 {
2290 rc_key_t key_ov = key; 2335 rc_key_t key_ov = key;
2291 maptex tex = self->tex [TEXID_SPEECH]; 2336 maptex tex = self->tex [TEXID_SPEECH];
2292 rc_array_t *arr; 2337 rc_array_t *arr;
2293 int px = x * T + T * 2 / 32; 2338 int px = x * Tw + Tw * 2 / 32;
2294 int py = y * T - T * 6 / 32; 2339 int py = y * Th - Th * 6 / 32;
2295 2340
2296 key_ov.texname = tex.name; 2341 key_ov.texname = tex.name;
2297 arr = rc_array (rc_ov, &key_ov); 2342 arr = rc_array (rc_ov, &key_ov);
2298 2343
2299 rc_t2f_v3f (arr, 0 , 0 , px , py , 0); 2344 rc_t2f_v3f (arr, 0 , 0 , px , py , 0);
2300 rc_t2f_v3f (arr, 0 , tex.t, px , py + T, 0); 2345 rc_t2f_v3f (arr, 0 , tex.t, px , py + Th, 0);
2301 rc_t2f_v3f (arr, tex.s, tex.t, px + T, py + T, 0); 2346 rc_t2f_v3f (arr, tex.s, tex.t, px + Tw, py + Th, 0);
2302 rc_t2f_v3f (arr, tex.s, 0 , px + T, py , 0); 2347 rc_t2f_v3f (arr, tex.s, 0 , px + Tw, py , 0);
2303 } 2348 }
2304 } 2349 }
2305 } 2350 }
2306 } 2351 }
2307 2352
2334 if (!(bits & 0x1000) 2379 if (!(bits & 0x1000)
2335 && skey->level == level 2380 && skey->level == level
2336 && level > smooth_max [skey->x][skey->y]) 2381 && level > smooth_max [skey->x][skey->y])
2337 { 2382 {
2338 maptex tex = self->tex [skey->tile]; 2383 maptex tex = self->tex [skey->tile];
2339 int px = (((int)skey->x) - 1) * T; 2384 int px = (((int)skey->x) - 1) * Tw;
2340 int py = (((int)skey->y) - 1) * T; 2385 int py = (((int)skey->y) - 1) * Th;
2341 int border = bits & 15; 2386 int border = bits & 15;
2342 int corner = (bits >> 8) & ~(bits >> 4) & 15; 2387 int corner = (bits >> 8) & ~(bits >> 4) & 15;
2343 float dx = tex.s * .0625f; // 16 images/row 2388 float dx = tex.s * .0625f; // 16 images/row
2344 float dy = tex.t * .5f ; // 2 images/column 2389 float dy = tex.t * .5f ; // 2 images/column
2345 2390
2358 2403
2359 if (border) 2404 if (border)
2360 { 2405 {
2361 float ox = border * dx; 2406 float ox = border * dx;
2362 2407
2363 glTexCoord2f (ox , 0.f ); glVertex2i (px , py ); 2408 glTexCoord2f (ox , 0.f ); glVertex2i (px , py );
2364 glTexCoord2f (ox , dy ); glVertex2i (px , py + T); 2409 glTexCoord2f (ox , dy ); glVertex2i (px , py + Th);
2365 glTexCoord2f (ox + dx, dy ); glVertex2i (px + T, py + T); 2410 glTexCoord2f (ox + dx, dy ); glVertex2i (px + Tw, py + Th);
2366 glTexCoord2f (ox + dx, 0.f ); glVertex2i (px + T, py ); 2411 glTexCoord2f (ox + dx, 0.f ); glVertex2i (px + Tw, py );
2367 } 2412 }
2368 2413
2369 if (corner) 2414 if (corner)
2370 { 2415 {
2371 float ox = corner * dx; 2416 float ox = corner * dx;
2372 2417
2373 glTexCoord2f (ox , dy ); glVertex2i (px , py ); 2418 glTexCoord2f (ox , dy ); glVertex2i (px , py );
2374 glTexCoord2f (ox , dy * 2.f); glVertex2i (px , py + T); 2419 glTexCoord2f (ox , dy * 2.f); glVertex2i (px , py + Th);
2375 glTexCoord2f (ox + dx, dy * 2.f); glVertex2i (px + T, py + T); 2420 glTexCoord2f (ox + dx, dy * 2.f); glVertex2i (px + Tw, py + Th);
2376 glTexCoord2f (ox + dx, dy ); glVertex2i (px + T, py ); 2421 glTexCoord2f (ox + dx, dy ); glVertex2i (px + Tw, py );
2377 } 2422 }
2378 } 2423 }
2379 } 2424 }
2380 } 2425 }
2381 } 2426 }
2422 for (x = 0; x < sw; x++) 2467 for (x = 0; x < sw; x++)
2423 if (row->c0 <= x + mx && x + mx < row->c1) 2468 if (row->c0 <= x + mx && x + mx < row->c1)
2424 { 2469 {
2425 mapcell *cell = row->col + (x + mx - row->c0); 2470 mapcell *cell = row->col + (x + mx - row->c0);
2426 2471
2427 int px = x * T; 2472 int px = x * Tw;
2428 int py = y * T; 2473 int py = y * Th;
2429 2474
2430 if (expect_false (cell->player == player)) 2475 if (expect_false (cell->player == player))
2431 { 2476 {
2432 px += sdx; 2477 px += sdx;
2433 py += sdy; 2478 py += sdy;
2434 } 2479 }
2435 2480
2436 if (cell->stat_hp) 2481 if (cell->stat_hp)
2437 { 2482 {
2438 int width = cell->stat_width * T; 2483 int width = cell->stat_width * Tw;
2439 int thick = (sh * T / 32 + 27) / 28 + 1 + cell->stat_width; 2484 int thick = (sh * Th / 32 + 27) / 28 + 1 + cell->stat_width;
2440 2485
2441 glColor3ub (0, 0, 0); 2486 glColor3ub (0, 0, 0);
2442 glRectf (px + 1, py - thick - 2, 2487 glRectf (px + 1, py - thick - 2,
2443 px + width - 1, py); 2488 px + width - 1, py);
2444 2489
2524 int x, y; 2569 int x, y;
2525 int sw1 = sw + 2; 2570 int sw1 = sw + 2;
2526 int sh1 = sh + 2; 2571 int sh1 = sh + 2;
2527 int sh3 = sh * 3; 2572 int sh3 = sh * 3;
2528 int sw3 = sw * 3; 2573 int sw3 = sw * 3;
2529 uint8_t *darkness1 = (uint8_t *)malloc (sw1 * sh1);
2530 SV *darkness3_sv = sv_2mortal (newSV (sw3 * sh3)); 2574 SV *darkness3_sv = sv_2mortal (newSV (sw3 * sh3));
2531 uint8_t *darkness3 = (uint8_t *)SvPVX (darkness3_sv); 2575 uint8_t *darkness3 = (uint8_t *)SvPVX (darkness3_sv);
2576 uint8_t *darkness1 = (uint8_t *)malloc (sw1 * sh1);
2577 memset (darkness1, 0, sw1*sh1);
2532 2578
2533 SvPOK_only (darkness3_sv); 2579 SvPOK_only (darkness3_sv);
2534 SvCUR_set (darkness3_sv, sw3 * sh3); 2580 SvCUR_set (darkness3_sv, sw3 * sh3);
2535 2581
2536 mx += self->x - 1; 2582 mx += self->x - 1;
2797 if (RETVAL < 0) 2843 if (RETVAL < 0)
2798 { 2844 {
2799 RETVAL = Mix_GroupOldest (-1); 2845 RETVAL = Mix_GroupOldest (-1);
2800 2846
2801 if (RETVAL < 0) 2847 if (RETVAL < 0)
2848 {
2849 // happens sometimes, maybe it just stopped playing(?)
2850 RETVAL = Mix_GroupAvailable (-1);
2851
2852 if (RETVAL < 0)
2802 XSRETURN_UNDEF; 2853 XSRETURN_UNDEF;
2803 2854 }
2855 else
2804 Mix_HaltChannel (RETVAL); 2856 Mix_HaltChannel (RETVAL);
2805 } 2857 }
2806 2858
2807 Mix_UnregisterAllEffects (RETVAL); 2859 Mix_UnregisterAllEffects (RETVAL);
2808 Mix_Volume (RETVAL, 128); 2860 Mix_Volume (RETVAL, 128);
2809} 2861}
2868 Mix_SetReverseStereo (self, flip); 2920 Mix_SetReverseStereo (self, flip);
2869 2921
2870MODULE = Deliantra::Client PACKAGE = DC::MixChunk 2922MODULE = Deliantra::Client PACKAGE = DC::MixChunk
2871 2923
2872PROTOTYPES: DISABLE 2924PROTOTYPES: DISABLE
2925
2926void
2927decoders ()
2928 PPCODE:
2929#if SDL_MIXER_MAJOR_VERSION > 1 || SDL_MIXER_MINOR_VERSION > 2 || SDL_MIXER_PATCHLEVEL >= 10
2930 int i, num = Mix_GetNumChunkDecoders ();
2931 EXTEND (SP, num);
2932 for (i = 0; i < num; ++i)
2933 PUSHs (sv_2mortal (newSVpv (Mix_GetChunkDecoder (i), 0)));
2934#else
2935 XPUSHs (sv_2mortal (newSVpv ("(sdl mixer too old)", 0)));
2936#endif
2873 2937
2874DC::MixChunk 2938DC::MixChunk
2875new (SV *class, DC::RW rwops) 2939new (SV *class, DC::RW rwops)
2876 CODE: 2940 CODE:
2877 RETVAL = Mix_LoadWAV_RW (rwops, 1); 2941 RETVAL = Mix_LoadWAV_RW (rwops, 1);
2910 OUTPUT: 2974 OUTPUT:
2911 RETVAL 2975 RETVAL
2912 2976
2913MODULE = Deliantra::Client PACKAGE = DC::MixMusic 2977MODULE = Deliantra::Client PACKAGE = DC::MixMusic
2914 2978
2979void
2980decoders ()
2981 PPCODE:
2982#if SDL_MIXER_MAJOR_VERSION > 1 || SDL_MIXER_MINOR_VERSION > 2 || SDL_MIXER_PATCHLEVEL >= 10
2983 int i, num = Mix_GetNumMusicDecoders ();
2984 EXTEND (SP, num);
2985 for (i = 0; i < num; ++i)
2986 PUSHs (sv_2mortal (newSVpv (Mix_GetMusicDecoder (i), 0)));
2987#else
2988 XPUSHs (sv_2mortal (newSVpv ("(sdl mixer too old)", 0)));
2989#endif
2990
2915int 2991int
2916volume (int volume = -1) 2992volume (int volume = -1)
2917 PROTOTYPE: ;$ 2993 PROTOTYPE: ;$
2918 CODE: 2994 CODE:
2919 if (items > 0) 2995 if (items > 0)
2929 3005
2930void 3006void
2931halt () 3007halt ()
2932 CODE: 3008 CODE:
2933 Mix_HaltMusic (); 3009 Mix_HaltMusic ();
3010
3011int
3012playing ()
3013 CODE:
3014 RETVAL = Mix_PlayingMusic ();
3015 OUTPUT:
3016 RETVAL
2934 3017
2935DC::MixMusic 3018DC::MixMusic
2936new (SV *class, DC::RW rwops) 3019new (SV *class, DC::RW rwops)
2937 CODE: 3020 CODE:
2938 RETVAL = Mix_LoadMUS_RW (rwops); 3021 RETVAL = Mix_LoadMUS_RW (rwops);
3078 const_iv (GL_FUNC_SUBTRACT), 3161 const_iv (GL_FUNC_SUBTRACT),
3079 const_iv (GL_FUNC_REVERSE_SUBTRACT), 3162 const_iv (GL_FUNC_REVERSE_SUBTRACT),
3080# undef const_iv 3163# undef const_iv
3081 }; 3164 };
3082 3165
3083 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 3166 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ > const_iv; civ--)
3084 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 3167 newCONSTSUB (stash, (char *)civ[-1].name, newSViv (civ[-1].iv));
3085 3168
3086 texture_av = newAV (); 3169 texture_av = newAV ();
3087 AvREAL_off (texture_av); 3170 AvREAL_off (texture_av);
3088} 3171}
3089 3172
3132 RETVAL 3215 RETVAL
3133 3216
3134int glGetError () 3217int glGetError ()
3135 3218
3136void glFinish () 3219void glFinish ()
3220
3221void glFlush ()
3137 3222
3138void glClear (int mask) 3223void glClear (int mask)
3139 3224
3140void glClearColor (float r, float g, float b, float a = 1.0) 3225void glClearColor (float r, float g, float b, float a = 1.0)
3141 PROTOTYPE: @ 3226 PROTOTYPE: @

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines