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.209 by root, Sat Jul 21 22:54:52 2007 UTC vs.
Revision 1.218 by root, Mon Aug 6 02:11:45 2007 UTC

25#include <math.h> 25#include <math.h>
26#include <string.h> 26#include <string.h>
27#include <stdio.h> 27#include <stdio.h>
28#include <stdlib.h> 28#include <stdlib.h>
29 29
30#define USE_RWOPS 1 // for SDL_mixer:LoadMUS_RW
31
30#include <SDL.h> 32#include <SDL.h>
31#include <SDL_thread.h> 33#include <SDL_thread.h>
32#include <SDL_endian.h> 34#include <SDL_endian.h>
33#include <SDL_image.h> 35#include <SDL_image.h>
34#include <SDL_mixer.h> 36#include <SDL_mixer.h>
112 114
113#include "pango-font.c" 115#include "pango-font.c"
114#include "pango-fontmap.c" 116#include "pango-fontmap.c"
115#include "pango-render.c" 117#include "pango-render.c"
116 118
119typedef IV CFPlus__Channel;
120typedef SDL_RWops *CFPlus__RW;
117typedef Mix_Chunk *CFPlus__MixChunk; 121typedef Mix_Chunk *CFPlus__MixChunk;
118typedef Mix_Music *CFPlus__MixMusic; 122typedef Mix_Music *CFPlus__MixMusic;
119 123
120typedef PangoFontDescription *CFPlus__Font; 124typedef PangoFontDescription *CFPlus__Font;
121 125
800 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("CFPlus::UI::Event", 1)))); 804 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("CFPlus::UI::Event", 1))));
801 } 805 }
802} 806}
803 807
804int 808int
805Mix_OpenAudio (int frequency = 48000, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 2048) 809Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 1024)
806 POSTCALL: 810 POSTCALL:
807 Mix_HookMusicFinished (music_finished); 811 Mix_HookMusicFinished (music_finished);
808 Mix_ChannelFinished (channel_finished); 812 Mix_ChannelFinished (channel_finished);
809 813
810void 814void
811Mix_CloseAudio () 815Mix_CloseAudio ()
812 816
813int 817int
814Mix_AllocateChannels (int numchans = -1) 818Mix_AllocateChannels (int numchans = -1)
819
820const char *
821Mix_GetError ()
815 822
816void 823void
817lowdelay (int fd, int val = 1) 824lowdelay (int fd, int val = 1)
818 CODE: 825 CODE:
819 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (void *)&val, sizeof (val)); 826 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (void *)&val, sizeof (val));
861 STRLEN image_len; 868 STRLEN image_len;
862 char *image = (char *)SvPVbyte (image_, image_len); 869 char *image = (char *)SvPVbyte (image_, image_len);
863 SDL_Surface *surface, *surface2; 870 SDL_Surface *surface, *surface2;
864 SDL_PixelFormat fmt; 871 SDL_PixelFormat fmt;
865 SDL_RWops *rw = ix 872 SDL_RWops *rw = ix
866 ? SDL_RWFromFile (image, "r") 873 ? SDL_RWFromFile (image, "rb")
867 : SDL_RWFromConstMem (image, image_len); 874 : SDL_RWFromConstMem (image, image_len);
868 875
869 if (!rw) 876 if (!rw)
870 croak ("load_image: %s", SDL_GetError ()); 877 croak ("load_image: %s", SDL_GetError ());
871 878
2232 } 2239 }
2233 } 2240 }
2234 } 2241 }
2235} 2242}
2236 2243
2244MODULE = CFPlus PACKAGE = CFPlus::RW
2245
2246CFPlus::RW
2247new (SV *class, SV *data_sv)
2248 CODE:
2249{
2250 STRLEN datalen;
2251 char *data = SvPVbyte (data_sv, datalen);
2252
2253 RETVAL = SDL_RWFromConstMem (data, datalen);
2254}
2255 OUTPUT:
2256 RETVAL
2257
2258CFPlus::RW
2259new_from_file (SV *class, const char *path, const char *mode = "rb")
2260 CODE:
2261 RETVAL = SDL_RWFromFile (path, mode);
2262 OUTPUT:
2263 RETVAL
2264
2265# fails on win32:
2266# CFPlus.xs(2268) : error C2059: syntax error : '('
2267#void
2268#close (CFPlus::RW self)
2269# CODE:
2270# (self->(close)) (self);
2271
2272MODULE = CFPlus PACKAGE = CFPlus::Channel
2273
2274PROTOTYPES: DISABLE
2275
2276CFPlus::Channel
2277find ()
2278 CODE:
2279{
2280 RETVAL = Mix_GroupAvailable (-1);
2281
2282 if (RETVAL < 0)
2283 {
2284 RETVAL = Mix_GroupOldest (-1);
2285
2286 if (RETVAL < 0)
2287 XSRETURN_UNDEF;
2288
2289 Mix_HaltChannel (RETVAL);
2290 }
2291
2292 Mix_UnregisterAllEffects (RETVAL);
2293 Mix_Volume (RETVAL, 128);
2294}
2295 OUTPUT:
2296 RETVAL
2297
2298void
2299halt (CFPlus::Channel self)
2300 CODE:
2301 Mix_HaltChannel (self);
2302
2303void
2304expire (CFPlus::Channel self, int ticks = -1)
2305 CODE:
2306 Mix_ExpireChannel (self, ticks);
2307
2308void
2309fade_out (CFPlus::Channel self, int ticks = -1)
2310 CODE:
2311 Mix_FadeOutChannel (self, ticks);
2312
2313int
2314volume (CFPlus::Channel self, int volume)
2315 CODE:
2316 RETVAL = Mix_Volume (self, CLAMP (volume, 0, 128));
2317 OUTPUT:
2318 RETVAL
2319
2320void
2321unregister_all_effects (CFPlus::Channel self)
2322 CODE:
2323 Mix_UnregisterAllEffects (self);
2324
2325void
2326set_panning (CFPlus::Channel self, int left, int right)
2327 CODE:
2328 left = CLAMP (left , 0, 255);
2329 right = CLAMP (right, 0, 255);
2330 Mix_SetPanning (self, left, right);
2331
2332void
2333set_distance (CFPlus::Channel self, int distance)
2334 CODE:
2335 Mix_SetDistance (self, CLAMP (distance, 0, 255));
2336
2337void
2338set_position (CFPlus::Channel self, int angle, int distance)
2339 CODE:
2340 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255));
2341
2342void
2343set_reverse_stereo (CFPlus::Channel self, int flip)
2344 CODE:
2345 Mix_SetReverseStereo (self, flip);
2346
2237MODULE = CFPlus PACKAGE = CFPlus::MixChunk 2347MODULE = CFPlus PACKAGE = CFPlus::MixChunk
2238 2348
2239PROTOTYPES: DISABLE 2349PROTOTYPES: DISABLE
2240 2350
2241CFPlus::MixChunk 2351CFPlus::MixChunk
2242new_from_file (SV *class, char *path) 2352new (SV *class, CFPlus::RW rwops)
2243 CODE: 2353 CODE:
2244 RETVAL = Mix_LoadWAV (path); 2354 RETVAL = Mix_LoadWAV_RW (rwops, 1);
2245 OUTPUT: 2355 OUTPUT:
2246 RETVAL 2356 RETVAL
2247 2357
2248void 2358void
2249DESTROY (CFPlus::MixChunk self) 2359DESTROY (CFPlus::MixChunk self)
2251 Mix_FreeChunk (self); 2361 Mix_FreeChunk (self);
2252 2362
2253int 2363int
2254volume (CFPlus::MixChunk self, int volume = -1) 2364volume (CFPlus::MixChunk self, int volume = -1)
2255 CODE: 2365 CODE:
2366 if (items > 1)
2367 volume = CLAMP (volume, 0, 128);
2256 RETVAL = Mix_VolumeChunk (self, volume); 2368 RETVAL = Mix_VolumeChunk (self, volume);
2257 OUTPUT: 2369 OUTPUT:
2258 RETVAL 2370 RETVAL
2259 2371
2260int 2372CFPlus::Channel
2261play (CFPlus::MixChunk self, int channel = -1, int loops = 0, int ticks = -1) 2373play (CFPlus::MixChunk self, CFPlus::Channel channel = -1, int loops = 0, int ticks = -1)
2262 CODE: 2374 CODE:
2375{
2263 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks); 2376 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks);
2377
2378 if (RETVAL < 0)
2379 XSRETURN_UNDEF;
2380
2381 if (channel < 0)
2382 {
2383 Mix_UnregisterAllEffects (RETVAL);
2384 Mix_Volume (RETVAL, 128);
2385 }
2386}
2264 OUTPUT: 2387 OUTPUT:
2265 RETVAL 2388 RETVAL
2266 2389
2267MODULE = CFPlus PACKAGE = CFPlus::MixMusic 2390MODULE = CFPlus PACKAGE = CFPlus::MixMusic
2268 2391
2269int 2392int
2270volume (int volume = -1) 2393volume (int volume = -1)
2271 PROTOTYPE: ;$ 2394 PROTOTYPE: ;$
2272 CODE: 2395 CODE:
2396 if (items > 0)
2397 volume = CLAMP (volume, 0, 128);
2273 RETVAL = Mix_VolumeMusic (volume); 2398 RETVAL = Mix_VolumeMusic (volume);
2274 OUTPUT: 2399 OUTPUT:
2275 RETVAL 2400 RETVAL
2276 2401
2277int 2402void
2278fade_out (int ms) 2403fade_out (int ms)
2279 CODE: 2404 CODE:
2280 RETVAL = Mix_FadeOutMusic (ms); 2405 Mix_FadeOutMusic (ms);
2281 OUTPUT: 2406
2282 RETVAL 2407void
2408halt ()
2409 CODE:
2410 Mix_HaltMusic ();
2283 2411
2284CFPlus::MixMusic 2412CFPlus::MixMusic
2285new_from_file (SV *class, char *path) 2413new (SV *class, CFPlus::RW rwops)
2286 CODE: 2414 CODE:
2287 RETVAL = Mix_LoadMUS (path); 2415 RETVAL = Mix_LoadMUS_RW (rwops);
2288 OUTPUT: 2416 OUTPUT:
2289 RETVAL 2417 RETVAL
2290 2418
2291void 2419void
2292DESTROY (CFPlus::MixMusic self) 2420DESTROY (CFPlus::MixMusic self)
2298 CODE: 2426 CODE:
2299 RETVAL = Mix_PlayMusic (self, loops); 2427 RETVAL = Mix_PlayMusic (self, loops);
2300 OUTPUT: 2428 OUTPUT:
2301 RETVAL 2429 RETVAL
2302 2430
2303int 2431void
2304fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position) 2432fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position)
2305 CODE: 2433 CODE:
2306 RETVAL = Mix_FadeInMusicPos (self, loops, ms, position); 2434 Mix_FadeInMusicPos (self, loops, ms, position);
2307 OUTPUT:
2308 RETVAL
2309 2435
2310MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2436MODULE = CFPlus PACKAGE = CFPlus::OpenGL
2311 2437
2312PROTOTYPES: ENABLE 2438PROTOTYPES: ENABLE
2313 2439
2547 2673
2548void glTexCoord (float s, float t) 2674void glTexCoord (float s, float t)
2549 CODE: 2675 CODE:
2550 glTexCoord2f (s, t); 2676 glTexCoord2f (s, t);
2551 2677
2678void glRect (float x1, float y1, float x2, float y2)
2679 CODE:
2680 glRectf (x1, y1, x2, y2);
2681
2552PROTOTYPES: ENABLE 2682PROTOTYPES: ENABLE
2553 2683
2554void glBegin (int mode) 2684void glBegin (int mode)
2555 2685
2556void glEnd () 2686void glEnd ()

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines