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.304 by root, Fri Apr 23 16:30:38 2010 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
103 104
104static AV *texture_av; 105static AV *texture_av;
105 106
106static struct 107static struct
107{ 108{
929 930
930 SDL_WM_SetCaption ("Deliantra MORPG Client " VERSION, "Deliantra"); 931 SDL_WM_SetCaption ("Deliantra MORPG Client " VERSION, "Deliantra");
931#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name); 932#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name);
932#include "glfunc.h" 933#include "glfunc.h"
933#undef GL_FUNC 934#undef GL_FUNC
935
936 if (!gl.ActiveTexture ) gl.ActiveTexture = gl.ActiveTextureARB;
937 if (!gl.MultiTexCoord2f) gl.MultiTexCoord2f = gl.MultiTexCoord2fARB;
934 } 938 }
935} 939}
936 OUTPUT: 940 OUTPUT:
937 RETVAL 941 RETVAL
938 942
1022 } 1026 }
1023 1027
1024 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("DC::UI::Event", 1)))); 1028 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("DC::UI::Event", 1))));
1025 } 1029 }
1026} 1030}
1031
1032char *
1033SDL_AudioDriverName ()
1034 CODE:
1035{
1036 char buf [256];
1037 if (!SDL_AudioDriverName (buf, sizeof (buf)))
1038 XSRETURN_UNDEF;
1039
1040 RETVAL = buf;
1041}
1042 OUTPUT:
1043 RETVAL
1027 1044
1028int 1045int
1029Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096) 1046Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096)
1030 POSTCALL: 1047 POSTCALL:
1031 Mix_HookMusicFinished (music_finished); 1048 Mix_HookMusicFinished (music_finished);
1671void 1688void
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) 1689draw_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: @ 1690 PROTOTYPE: @
1674 CODE: 1691 CODE:
1675{ 1692{
1693 glEnable (GL_BLEND);
1694 glBlendFunc (intensity ? GL_SRC_ALPHA : GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1676 glEnable (GL_TEXTURE_2D); 1695 glEnable (GL_TEXTURE_2D);
1677 glEnable (GL_BLEND);
1678 glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1679 glBindTexture (GL_TEXTURE_2D, name1); 1696 glBindTexture (GL_TEXTURE_2D, name1);
1680 1697
1681 glColor3f (intensity, intensity, intensity); 1698 glColor3f (intensity, intensity, intensity);
1682 glPushMatrix (); 1699 glPushMatrix ();
1683 glScalef (1./3, 1./3, 1.); 1700 glScalef (1./3, 1./3, 1.);
1698 glBindTexture (GL_TEXTURE_2D, name2); 1715 glBindTexture (GL_TEXTURE_2D, name2);
1699 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 1716 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
1700 1717
1701 /* rgb == rgb(glcolor) */ 1718 /* rgb == rgb(glcolor) */
1702 glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); 1719 glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
1703 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT); 1720 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PRIMARY_COLOR);
1704 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 1721 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
1705 1722
1706 /* alpha = interpolate t0, t1 by env_alpha */ 1723 /* alpha = interpolate t0, t1 by env_alpha */
1707 glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, env_color); 1724 glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, env_color);
1708 1725
2141 int pl_x, pl_y; 2158 int pl_x, pl_y;
2142 maptex pl_tex; 2159 maptex pl_tex;
2143 rc_t *rc = rc_alloc (); 2160 rc_t *rc = rc_alloc ();
2144 rc_t *rc_ov = rc_alloc (); 2161 rc_t *rc_ov = rc_alloc ();
2145 rc_key_t key; 2162 rc_key_t key;
2146 rc_array_t *arr, *arr_hidden; 2163 rc_array_t *arr;
2147 2164
2148 pl_tex.name = 0; 2165 pl_tex.name = 0;
2149 2166
2150 // that's current max. sorry. 2167 // that's current max. sorry.
2151 if (sw > 255) sw = 255; 2168 if (sw > 255) sw = 255;
2188 } 2205 }
2189 2206
2190 glEnable (GL_BLEND); 2207 glEnable (GL_BLEND);
2191 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2208 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
2192 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 2209 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 2210
2197 for (z = 0; z <= 2; z++) 2211 for (z = 0; z <= 2; z++)
2198 { 2212 {
2199 memset (smooth_level, 0, sizeof (smooth_level)); 2213 memset (smooth_level, 0, sizeof (smooth_level));
2200 key.texname = -1; 2214 key.texname = -1;
2797 if (RETVAL < 0) 2811 if (RETVAL < 0)
2798 { 2812 {
2799 RETVAL = Mix_GroupOldest (-1); 2813 RETVAL = Mix_GroupOldest (-1);
2800 2814
2801 if (RETVAL < 0) 2815 if (RETVAL < 0)
2816 {
2817 // happens sometimes, maybe it just stopped playing(?)
2818 RETVAL = Mix_GroupAvailable (-1);
2819
2820 if (RETVAL < 0)
2802 XSRETURN_UNDEF; 2821 XSRETURN_UNDEF;
2803 2822 }
2823 else
2804 Mix_HaltChannel (RETVAL); 2824 Mix_HaltChannel (RETVAL);
2805 } 2825 }
2806 2826
2807 Mix_UnregisterAllEffects (RETVAL); 2827 Mix_UnregisterAllEffects (RETVAL);
2808 Mix_Volume (RETVAL, 128); 2828 Mix_Volume (RETVAL, 128);
2809} 2829}
2868 Mix_SetReverseStereo (self, flip); 2888 Mix_SetReverseStereo (self, flip);
2869 2889
2870MODULE = Deliantra::Client PACKAGE = DC::MixChunk 2890MODULE = Deliantra::Client PACKAGE = DC::MixChunk
2871 2891
2872PROTOTYPES: DISABLE 2892PROTOTYPES: DISABLE
2893
2894void
2895decoders ()
2896 PPCODE:
2897#if SDL_MIXER_MAJOR_VERSION > 1 || SDL_MIXER_MINOR_VERSION > 2 || SDL_MIXER_PATCHLEVEL >= 10
2898 int i, num = Mix_GetNumChunkDecoders ();
2899 EXTEND (SP, num);
2900 for (i = 0; i < num; ++i)
2901 PUSHs (sv_2mortal (newSVpv (Mix_GetChunkDecoder (i), 0)));
2902#else
2903 XPUSHs (sv_2mortal (newSVpv ("(sdl mixer too old)", 0)));
2904#endif
2873 2905
2874DC::MixChunk 2906DC::MixChunk
2875new (SV *class, DC::RW rwops) 2907new (SV *class, DC::RW rwops)
2876 CODE: 2908 CODE:
2877 RETVAL = Mix_LoadWAV_RW (rwops, 1); 2909 RETVAL = Mix_LoadWAV_RW (rwops, 1);
2910 OUTPUT: 2942 OUTPUT:
2911 RETVAL 2943 RETVAL
2912 2944
2913MODULE = Deliantra::Client PACKAGE = DC::MixMusic 2945MODULE = Deliantra::Client PACKAGE = DC::MixMusic
2914 2946
2947void
2948decoders ()
2949 PPCODE:
2950#if SDL_MIXER_MAJOR_VERSION > 1 || SDL_MIXER_MINOR_VERSION > 2 || SDL_MIXER_PATCHLEVEL >= 10
2951 int i, num = Mix_GetNumMusicDecoders ();
2952 EXTEND (SP, num);
2953 for (i = 0; i < num; ++i)
2954 PUSHs (sv_2mortal (newSVpv (Mix_GetMusicDecoder (i), 0)));
2955#else
2956 XPUSHs (sv_2mortal (newSVpv ("(sdl mixer too old)", 0)));
2957#endif
2958
2915int 2959int
2916volume (int volume = -1) 2960volume (int volume = -1)
2917 PROTOTYPE: ;$ 2961 PROTOTYPE: ;$
2918 CODE: 2962 CODE:
2919 if (items > 0) 2963 if (items > 0)
2929 2973
2930void 2974void
2931halt () 2975halt ()
2932 CODE: 2976 CODE:
2933 Mix_HaltMusic (); 2977 Mix_HaltMusic ();
2978
2979int
2980playing ()
2981 CODE:
2982 RETVAL = Mix_PlayingMusic ();
2983 OUTPUT:
2984 RETVAL
2934 2985
2935DC::MixMusic 2986DC::MixMusic
2936new (SV *class, DC::RW rwops) 2987new (SV *class, DC::RW rwops)
2937 CODE: 2988 CODE:
2938 RETVAL = Mix_LoadMUS_RW (rwops); 2989 RETVAL = Mix_LoadMUS_RW (rwops);
3133 3184
3134int glGetError () 3185int glGetError ()
3135 3186
3136void glFinish () 3187void glFinish ()
3137 3188
3189void glFlush ()
3190
3138void glClear (int mask) 3191void glClear (int mask)
3139 3192
3140void glClearColor (float r, float g, float b, float a = 1.0) 3193void glClearColor (float r, float g, float b, float a = 1.0)
3141 PROTOTYPE: @ 3194 PROTOTYPE: @
3142 3195

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines