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.305 by root, Sun May 2 21:22:20 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
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}
1027 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
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);
1032 Mix_ChannelFinished (channel_finished); 1049 Mix_ChannelFinished (channel_finished);
1094add_font (char *file) 1111add_font (char *file)
1095 CODE: 1112 CODE:
1096 RETVAL = FcConfigAppFontAddFile (0, (const FcChar8 *)file); 1113 RETVAL = FcConfigAppFontAddFile (0, (const FcChar8 *)file);
1097 OUTPUT: 1114 OUTPUT:
1098 RETVAL 1115 RETVAL
1116
1117void
1118IMG_Init (int flags = IMG_INIT_JPG | IMG_INIT_PNG)
1099 1119
1100void 1120void
1101load_image_inline (SV *image_) 1121load_image_inline (SV *image_)
1102 ALIAS: 1122 ALIAS:
1103 load_image_file = 1 1123 load_image_file = 1
1671void 1691void
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) 1692draw_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: @ 1693 PROTOTYPE: @
1674 CODE: 1694 CODE:
1675{ 1695{
1696 glEnable (GL_BLEND);
1697 glBlendFunc (intensity ? GL_SRC_ALPHA : GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1676 glEnable (GL_TEXTURE_2D); 1698 glEnable (GL_TEXTURE_2D);
1677 glEnable (GL_BLEND);
1678 glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1679 glBindTexture (GL_TEXTURE_2D, name1); 1699 glBindTexture (GL_TEXTURE_2D, name1);
1680 1700
1681 glColor3f (intensity, intensity, intensity); 1701 glColor3f (intensity, intensity, intensity);
1682 glPushMatrix (); 1702 glPushMatrix ();
1683 glScalef (1./3, 1./3, 1.); 1703 glScalef (1./3, 1./3, 1.);
1698 glBindTexture (GL_TEXTURE_2D, name2); 1718 glBindTexture (GL_TEXTURE_2D, name2);
1699 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 1719 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
1700 1720
1701 /* rgb == rgb(glcolor) */ 1721 /* rgb == rgb(glcolor) */
1702 glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE); 1722 glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
1703 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_CONSTANT); 1723 glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PRIMARY_COLOR);
1704 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 1724 glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
1705 1725
1706 /* alpha = interpolate t0, t1 by env_alpha */ 1726 /* alpha = interpolate t0, t1 by env_alpha */
1707 glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, env_color); 1727 glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, env_color);
1708 1728
2141 int pl_x, pl_y; 2161 int pl_x, pl_y;
2142 maptex pl_tex; 2162 maptex pl_tex;
2143 rc_t *rc = rc_alloc (); 2163 rc_t *rc = rc_alloc ();
2144 rc_t *rc_ov = rc_alloc (); 2164 rc_t *rc_ov = rc_alloc ();
2145 rc_key_t key; 2165 rc_key_t key;
2146 rc_array_t *arr, *arr_hidden; 2166 rc_array_t *arr;
2147 2167
2148 pl_tex.name = 0; 2168 pl_tex.name = 0;
2149 2169
2150 // that's current max. sorry. 2170 // that's current max. sorry.
2151 if (sw > 255) sw = 255; 2171 if (sw > 255) sw = 255;
2188 } 2208 }
2189 2209
2190 glEnable (GL_BLEND); 2210 glEnable (GL_BLEND);
2191 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2211 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
2192 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 2212 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 2213
2197 for (z = 0; z <= 2; z++) 2214 for (z = 0; z <= 2; z++)
2198 { 2215 {
2199 memset (smooth_level, 0, sizeof (smooth_level)); 2216 memset (smooth_level, 0, sizeof (smooth_level));
2200 key.texname = -1; 2217 key.texname = -1;
2797 if (RETVAL < 0) 2814 if (RETVAL < 0)
2798 { 2815 {
2799 RETVAL = Mix_GroupOldest (-1); 2816 RETVAL = Mix_GroupOldest (-1);
2800 2817
2801 if (RETVAL < 0) 2818 if (RETVAL < 0)
2819 {
2820 // happens sometimes, maybe it just stopped playing(?)
2821 RETVAL = Mix_GroupAvailable (-1);
2822
2823 if (RETVAL < 0)
2802 XSRETURN_UNDEF; 2824 XSRETURN_UNDEF;
2803 2825 }
2826 else
2804 Mix_HaltChannel (RETVAL); 2827 Mix_HaltChannel (RETVAL);
2805 } 2828 }
2806 2829
2807 Mix_UnregisterAllEffects (RETVAL); 2830 Mix_UnregisterAllEffects (RETVAL);
2808 Mix_Volume (RETVAL, 128); 2831 Mix_Volume (RETVAL, 128);
2809} 2832}
2868 Mix_SetReverseStereo (self, flip); 2891 Mix_SetReverseStereo (self, flip);
2869 2892
2870MODULE = Deliantra::Client PACKAGE = DC::MixChunk 2893MODULE = Deliantra::Client PACKAGE = DC::MixChunk
2871 2894
2872PROTOTYPES: DISABLE 2895PROTOTYPES: DISABLE
2896
2897void
2898decoders ()
2899 PPCODE:
2900#if SDL_MIXER_MAJOR_VERSION > 1 || SDL_MIXER_MINOR_VERSION > 2 || SDL_MIXER_PATCHLEVEL >= 10
2901 int i, num = Mix_GetNumChunkDecoders ();
2902 EXTEND (SP, num);
2903 for (i = 0; i < num; ++i)
2904 PUSHs (sv_2mortal (newSVpv (Mix_GetChunkDecoder (i), 0)));
2905#else
2906 XPUSHs (sv_2mortal (newSVpv ("(sdl mixer too old)", 0)));
2907#endif
2873 2908
2874DC::MixChunk 2909DC::MixChunk
2875new (SV *class, DC::RW rwops) 2910new (SV *class, DC::RW rwops)
2876 CODE: 2911 CODE:
2877 RETVAL = Mix_LoadWAV_RW (rwops, 1); 2912 RETVAL = Mix_LoadWAV_RW (rwops, 1);
2910 OUTPUT: 2945 OUTPUT:
2911 RETVAL 2946 RETVAL
2912 2947
2913MODULE = Deliantra::Client PACKAGE = DC::MixMusic 2948MODULE = Deliantra::Client PACKAGE = DC::MixMusic
2914 2949
2950void
2951decoders ()
2952 PPCODE:
2953#if SDL_MIXER_MAJOR_VERSION > 1 || SDL_MIXER_MINOR_VERSION > 2 || SDL_MIXER_PATCHLEVEL >= 10
2954 int i, num = Mix_GetNumMusicDecoders ();
2955 EXTEND (SP, num);
2956 for (i = 0; i < num; ++i)
2957 PUSHs (sv_2mortal (newSVpv (Mix_GetMusicDecoder (i), 0)));
2958#else
2959 XPUSHs (sv_2mortal (newSVpv ("(sdl mixer too old)", 0)));
2960#endif
2961
2915int 2962int
2916volume (int volume = -1) 2963volume (int volume = -1)
2917 PROTOTYPE: ;$ 2964 PROTOTYPE: ;$
2918 CODE: 2965 CODE:
2919 if (items > 0) 2966 if (items > 0)
2929 2976
2930void 2977void
2931halt () 2978halt ()
2932 CODE: 2979 CODE:
2933 Mix_HaltMusic (); 2980 Mix_HaltMusic ();
2981
2982int
2983playing ()
2984 CODE:
2985 RETVAL = Mix_PlayingMusic ();
2986 OUTPUT:
2987 RETVAL
2934 2988
2935DC::MixMusic 2989DC::MixMusic
2936new (SV *class, DC::RW rwops) 2990new (SV *class, DC::RW rwops)
2937 CODE: 2991 CODE:
2938 RETVAL = Mix_LoadMUS_RW (rwops); 2992 RETVAL = Mix_LoadMUS_RW (rwops);
3133 3187
3134int glGetError () 3188int glGetError ()
3135 3189
3136void glFinish () 3190void glFinish ()
3137 3191
3192void glFlush ()
3193
3138void glClear (int mask) 3194void glClear (int mask)
3139 3195
3140void glClearColor (float r, float g, float b, float a = 1.0) 3196void glClearColor (float r, float g, float b, float a = 1.0)
3141 PROTOTYPE: @ 3197 PROTOTYPE: @
3142 3198

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines