4 // Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
6 // ------------------------------------------------------------------------------
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 // ------------------------------------------------------------------------------
24 // Please feel free to send questions, suggestions or improvements to:
49 #include <SDL_image.h>
53 #include <SDL_mixer.h>
54 void (*mix_music_finished_cv)();
58 #include <SDL_sound.h>
66 #include <smpeg/smpeg.h>
68 static int sdl_perl_use_smpeg_audio = 0;
73 #include <SDL_rotozoom.h>
74 #include <SDL_gfxPrimitives.h>
75 #include <SDL_framerate.h>
76 #include <SDL_imageFilter.h>
88 #define HAVE_TLS_CONTEXT
92 #ifndef SDL_PERL_DEFINES_H
93 #define SDL_PERL_DEFINES_H
95 #ifdef HAVE_TLS_CONTEXT
96 PerlInterpreter *parent_perl = NULL;
97 extern PerlInterpreter *parent_perl;
98 #define GET_TLS_CONTEXT parent_perl = PERL_GET_CONTEXT;
99 #define ENTER_TLS_CONTEXT \
100 PerlInterpreter *current_perl = PERL_GET_CONTEXT; \
101 PERL_SET_CONTEXT(parent_perl); { \
102 PerlInterpreter *my_perl = parent_perl;
103 #define LEAVE_TLS_CONTEXT \
104 } PERL_SET_CONTEXT(current_perl);
106 #define GET_TLS_CONTEXT /* TLS context not enabled */
107 #define ENTER_TLS_CONTEXT /* TLS context not enabled */
108 #define LEAVE_TLS_CONTEXT /* TLS context not enabled */
116 #if defined WIN32 || WINDOWS
117 fprintf( stderr, "SDL Gamma is unsupported in Windows for windib. Forcing directx. \n" );
118 SDL_putenv("SDL_VIDEODRIVER=directx");
124 sdl_perl_timer_callback ( Uint32 interval, void* param )
137 XPUSHs(sv_2mortal(newSViv(interval)));
140 if (0 != (back = call_sv(cmd,G_SCALAR))) {
142 if (back != 1 ) Perl_croak (aTHX_ "Timer Callback failed!");
145 Perl_croak(aTHX_ "Timer Callback failed!");
157 sdl_perl_audio_callback ( void* data, Uint8 *stream, int len )
168 XPUSHs(sv_2mortal(newSViv(PTR2IV(stream))));
169 XPUSHs(sv_2mortal(newSViv(len)));
172 call_sv(cmd,G_VOID|G_DISCARD);
181 #ifdef HAVE_SDL_MIXER
184 sdl_perl_music_callback ( void )
190 cmd = (SV*)Mix_GetMusicHookData();
197 call_sv(cmd,G_VOID|G_DISCARD);
207 sdl_perl_music_finished_callback ( void )
213 cmd = (SV*)mix_music_finished_cv;
214 if ( cmd == NULL ) return;
221 call_sv(cmd,G_VOID|G_DISCARD);
232 #define INIT_NS_APPLICATION
233 #define QUIT_NS_APPLICATION
237 sdl_perl_atexit (void)
244 void boot_SDL__OpenGL();
252 MODULE = SDL_perl PACKAGE = SDL
258 RETVAL = SDL_GetError();
268 RETVAL = SDL_Init(flags);
269 #ifdef HAVE_TLS_CONTEXT
270 Perl_call_atexit(PERL_GET_CONTEXT, (void*)sdl_perl_atexit,0);
272 atexit(sdl_perl_atexit);
278 init_subsystem ( flags )
281 RETVAL = SDL_InitSubSystem(flags);
286 quit_subsystem ( flags )
289 SDL_QuitSubSystem(flags);
301 RETVAL = SDL_WasInit(flags);
314 RETVAL = SDL_GetTicks();
319 SetTimer ( interval, callback )
321 SDL_TimerCallback callback
323 RETVAL = SDL_SetTimer(interval,callback);
328 AddTimer ( interval, callback, param )
330 SDL_NewTimerCallback callback
333 RETVAL = SDL_AddTimer(interval,callback,param);
340 RETVAL = sdl_perl_timer_callback;
345 NewTimer ( interval, cmd )
349 RETVAL = SDL_AddTimer(interval,sdl_perl_timer_callback,cmd);
357 RETVAL = SDL_RemoveTimer(id);
362 RWFromFile ( file, mode )
366 RETVAL = SDL_RWFromFile(file,mode);
371 RWFromFP ( fp, autoclose )
375 RETVAL = SDL_RWFromFP(fp,autoclose);
380 RWFromMem ( mem, size )
384 RETVAL = SDL_RWFromMem((void*)mem,size);
389 RWFromConstMem ( mem, size )
393 RETVAL = SDL_RWFromConstMem((const void*)mem,size);
400 RETVAL = SDL_AllocRW();
411 RWseek ( rw, off, whence )
416 RETVAL = SDL_RWseek(rw,off,whence);
424 RETVAL = SDL_RWtell(rw);
429 RWread ( rw, mem, size, n )
435 RETVAL = SDL_RWread(rw,mem,size,n);
440 RWwrite ( rw, mem, size, n )
446 RETVAL = SDL_RWwrite(rw,mem,size,n);
454 RETVAL = SDL_RWclose(rw);
461 RETVAL = SDL_CDNumDrives();
469 RETVAL = strdup(SDL_CDName(drive));
477 RETVAL = SDL_CDOpen(drive);
490 CDTrackType ( track )
493 RETVAL = track->type;
498 CDTrackLength ( track )
501 RETVAL = track->length;
506 CDTrackOffset ( track )
509 RETVAL = track->offset;
517 RETVAL = SDL_CDStatus(cd);
522 CDPlayTracks ( cd, start_track, ntracks, start_frame, nframes )
529 RETVAL = SDL_CDPlayTracks(cd,start_track,start_frame,ntracks,nframes);
534 CDPlay ( cd, start, length )
539 RETVAL = SDL_CDPlay(cd,start,length);
547 RETVAL = SDL_CDPause(cd);
555 RETVAL = SDL_CDResume(cd);
563 RETVAL = SDL_CDStop(cd);
571 RETVAL = SDL_CDEject(cd);
593 RETVAL = cd->numtracks;
601 RETVAL = cd->cur_track;
609 RETVAL = cd->cur_frame;
614 CDTrack ( cd, number )
618 RETVAL = (SDL_CDtrack *)(cd->track + number);
631 RETVAL = SDL_PushEvent( e );
638 RETVAL = (SDL_Event *) safemalloc (sizeof(SDL_Event));
652 RETVAL = SDL_PollEvent(e);
660 RETVAL = SDL_WaitEvent(e);
665 EventState ( type, state )
669 RETVAL = SDL_EventState(type,state);
682 SetEventType ( e, type )
692 ActiveEventGain ( e )
695 RETVAL = e->active.gain;
700 ActiveEventState ( e )
703 RETVAL = e->active.state;
711 RETVAL = e->key.state;
719 RETVAL = e->key.keysym.sym;
727 RETVAL = e->key.keysym.mod;
732 KeyEventUnicode ( e )
735 RETVAL = e->key.keysym.unicode;
743 RETVAL = e->key.keysym.scancode;
748 MouseMotionState ( e )
751 RETVAL = e->motion.state;
759 RETVAL = e->motion.x;
767 RETVAL = e->motion.y;
775 RETVAL = e->motion.xrel;
780 MouseMotionYrel ( e )
783 RETVAL = e->motion.yrel;
791 RETVAL = e->button.state;
799 RETVAL = e->button.button;
807 RETVAL = e->button.x;
815 RETVAL = e->button.y;
823 RETVAL = e->syswm.msg;
828 EnableUnicode ( enable )
831 RETVAL = SDL_EnableUNICODE(enable);
836 EnableKeyRepeat ( delay, interval )
840 SDL_EnableKeyRepeat(delay,interval);
845 RETVAL = SDL_GetModState();
850 SetModState ( state )
853 SDL_SetModState(state);
859 RETVAL = SDL_GetKeyName(sym);
863 #ifdef HAVE_SDL_IMAGE
866 IMG_Load ( filename )
869 char* CLASS = "SDL::Surface";
870 RETVAL = IMG_Load(filename);
878 Comment out for now as it does not compile
881 CreateRGBSurfaceFrom (pixels, width, height, depth, pitch, Rmask, Gmask, Bmask, Amask )
893 Uint32 len = pitch * height;
894 New(0,pixeldata,len,Uint8);
895 Copy(pixels,pixeldata,len,Uint8);
896 RETVAL = SDL_CreateRGBSurfaceFrom ( pixeldata, width, height,
897 depth, pitch, Rmask, Gmask, Bmask, Amask );
902 SurfaceCopy ( surface )
906 Uint32 size = surface->pitch * surface->h;
907 New(0,pixels,size,Uint8);
908 Copy(surface->pixels,pixels,size,Uint8);
909 RETVAL = SDL_CreateRGBSurfaceFrom(pixels,surface->w,surface->h,
910 surface->format->BitsPerPixel, surface->pitch,
911 surface->format->Rmask, surface->format->Gmask,
912 surface->format->Bmask, surface->format->Amask);
917 FreeSurface ( surface )
921 Uint8* pixels = surface->pixels;
922 Uint32 flags = surface->flags;
923 SDL_FreeSurface(surface);
924 if (flags & SDL_PREALLOC)
929 SurfaceFlags ( surface )
932 RETVAL = surface->flags;
937 SurfacePalette ( surface )
940 RETVAL = surface->format->palette;
945 SurfaceBitsPerPixel ( surface )
948 RETVAL = surface->format->BitsPerPixel;
953 SurfaceBytesPerPixel ( surface )
956 RETVAL = surface->format->BytesPerPixel;
961 SurfaceRshift ( surface )
964 RETVAL = surface->format->Rshift;
969 SurfaceGshift ( surface )
972 RETVAL = surface->format->Gshift;
977 SurfaceBshift ( surface )
980 RETVAL = surface->format->Bshift;
985 SurfaceAshift ( surface )
988 RETVAL = surface->format->Ashift;
993 SurfaceRmask( surface )
996 RETVAL = surface->format->Rmask;
1001 SurfaceGmask ( surface )
1002 SDL_Surface *surface
1004 RETVAL = surface->format->Gmask;
1009 SurfaceBmask ( surface )
1010 SDL_Surface *surface
1012 RETVAL = surface->format->Bmask;
1017 SurfaceAmask ( surface )
1018 SDL_Surface *surface
1020 RETVAL = surface->format->Amask;
1025 SurfaceColorKey ( surface )
1026 SDL_Surface *surface
1028 RETVAL = surface->format->colorkey;
1033 SurfaceAlpha( surface )
1034 SDL_Surface *surface
1036 RETVAL = surface->format->alpha;
1041 SurfaceW ( surface )
1042 SDL_Surface *surface
1044 RETVAL = surface->w;
1049 SurfaceH ( surface )
1050 SDL_Surface *surface
1052 RETVAL = surface->h;
1057 SurfacePitch ( surface )
1058 SDL_Surface *surface
1060 RETVAL = surface->pitch;
1065 SurfacePixels ( surface )
1066 SDL_Surface *surface
1068 RETVAL = newSVpvn(surface->pixels,surface->pitch*surface->h);
1076 Comment out for now as it does not compile
1079 SurfacePixel ( surface, x, y, ... )
1080 SDL_Surface *surface
1087 int bpp = surface->format->BytesPerPixel;
1088 Uint8* p = (Uint8*)surface->pixels + bpp*x + surface->pitch*y;
1089 if ( items < 3 || items > 4 )
1090 Perl_croak(aTHX_ "usage: SDL::SurfacePixel(surface,x,y,[color])");
1092 color = (SDL_Color*)SvIV(ST(3));
1093 pix = SDL_MapRGB(surface->format,color->r,color->g,color->b);
1102 if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
1103 p[0] = (pix >> 16) & 0xff;
1104 p[1] = (pix >> 8) & 0xff;
1108 p[1] = (pix >> 8) & 0xff;
1109 p[2] = (pix >> 16) & 0xff;
1117 RETVAL = (SDL_Color *) safemalloc(sizeof(SDL_Color));
1121 memcpy(RETVAL,&surface->format->palette[index],sizeof(SDL_Color));
1125 SDL_GetRGB(pix,surface->format,&r,&g,&b);
1133 SDL_GetRGB(pix,surface->format,&r,&g,&b);
1143 MUSTLOCK ( surface )
1144 SDL_Surface *surface
1146 RETVAL = SDL_MUSTLOCK(surface);
1151 SurfaceLock ( surface )
1152 SDL_Surface *surface
1154 RETVAL = SDL_LockSurface(surface);
1159 SurfaceUnlock ( surface )
1160 SDL_Surface *surface
1162 SDL_UnlockSurface(surface);
1167 RETVAL = SDL_GetVideoSurface();
1177 SDL_VideoInfo *info;
1178 info = (SDL_VideoInfo *) safemalloc ( sizeof(SDL_VideoInfo));
1179 memcpy(info,SDL_GetVideoInfo(),sizeof(SDL_VideoInfo));
1181 hv_store(hv,"hw_available",strlen("hw_available"),
1182 newSViv(info->hw_available),0);
1183 hv_store(hv,"wm_available",strlen("wm_available"),
1184 newSViv(info->wm_available),0);
1185 hv_store(hv,"blit_hw",strlen("blit_hw"),
1186 newSViv(info->blit_hw),0);
1187 hv_store(hv,"blit_hw_CC",strlen("blit_hw_CC"),
1188 newSViv(info->blit_hw_CC),0);
1189 hv_store(hv,"blit_hw_A",strlen("blit_hw_A"),
1190 newSViv(info->blit_hw_A),0);
1191 hv_store(hv,"blit_sw",strlen("blit_sw"),
1192 newSViv(info->blit_sw),0);
1193 hv_store(hv,"blit_sw_CC",strlen("blit_sw_CC"),
1194 newSViv(info->blit_sw_CC),0);
1195 hv_store(hv,"blit_sw_A",strlen("blit_sw_A"),
1196 newSViv(info->blit_sw_A),0);
1197 hv_store(hv,"blit_fill",strlen("blit_fill"),
1198 newSViv(info->blit_fill),0);
1199 hv_store(hv,"video_mem",strlen("video_mem"),
1200 newSViv(info->video_mem),0);
1206 ListModes ( format, flags )
1208 SDL_PixelFormat *format
1212 mode = SDL_ListModes(format,flags);
1213 if (mode == (SDL_Rect**)-1 ) {
1214 av_push(RETVAL,newSVpv("all",0));
1215 } else if (! mode ) {
1216 av_push(RETVAL,newSVpv("none",0));
1218 for (;*mode;mode++) {
1219 av_push(RETVAL,newSViv(PTR2IV(*mode)));
1227 NewPalette ( number )
1230 RETVAL = (SDL_Palette *)safemalloc(sizeof(SDL_Palette));
1231 RETVAL->colors = (SDL_Color *)safemalloc(number *
1233 RETVAL->ncolors = number;
1239 PaletteNColors ( palette, ... )
1240 SDL_Palette *palette
1242 if ( items > 1 ) palette->ncolors = SvIV(ST(1));
1243 RETVAL = palette->ncolors;
1248 SetVideoMode ( width, height, bpp, flags )
1256 char *CLASS = "SDL::Surface";
1257 RETVAL = SDL_SetVideoMode(width,height,bpp,flags);
1263 SDL_Surface *surface
1265 RETVAL = SDL_Flip(surface);
1270 BlitSurface ( src, src_rect, dest, dest_rect )
1276 RETVAL = SDL_BlitSurface(src,src_rect,dest,dest_rect);
1281 MapRGB ( pixel_format, r, g, b )
1282 SDL_PixelFormat *pixel_format
1287 RETVAL = SDL_MapRGB(pixel_format,r,g,b);
1292 UpdateRect ( surface, x, y, w ,h )
1293 SDL_Surface *surface
1299 SDL_UpdateRect(surface,x,y,w,h);
1302 DisplayFormat ( surface )
1303 SDL_Surface *surface
1305 char* CLASS = "SDL::Surface";
1306 RETVAL = SDL_DisplayFormat(surface);
1311 DisplayFormatAlpha ( surface )
1312 SDL_Surface *surface
1314 char* CLASS = "SDL::Surface";
1315 RETVAL = SDL_DisplayFormatAlpha(surface);
1320 UpdateRects ( surface, ... )
1321 SDL_Surface *surface
1325 if ( items < 2 ) return;
1326 num_rects = items - 1;
1327 rects = (SDL_Rect *)safemalloc(sizeof(SDL_Rect)*items);
1328 for(i=0;i<num_rects;i++) {
1329 rects[i] = *(SDL_Rect *)SvIV((SV*)SvRV( ST(i + 1) ));
1331 SDL_UpdateRects(surface,num_rects,rects);
1336 Comment out for now as it does not compile
1339 VideoModeOK ( width, height, bpp, flags )
1345 RETVAL = SDL_VideoModeOK(width,height,bpp,flags);
1350 SetVideoMode ( width, height, bpp, flags )
1356 RETVAL = SDL_SetVideoMode(width,height,bpp,flags);
1362 SDL_Surface *surface
1364 RETVAL = SDL_Flip(surface);
1369 SetColors ( surface, start, ... )
1370 SDL_Surface *surface
1373 SDL_Color *colors,*temp;
1375 if ( items < 3 ) { RETVAL = 0; goto all_done; }
1377 colors = (SDL_Color *)safemalloc(sizeof(SDL_Color)*(length+1));
1378 for ( i = 0; i < length ; i++ ) {
1379 temp = (SDL_Color *)SvIV(ST(i+2));
1380 colors[i].r = temp->r;
1381 colors[i].g = temp->g;
1382 colors[i].b = temp->b;
1384 RETVAL = SDL_SetColors(surface, colors, start, length );
1391 MapRGBA ( surface, r, g, b, a )
1392 SDL_Surface *surface
1398 RETVAL = SDL_MapRGBA(surface->format,r,g,b,a);
1403 GetRGB ( surface, pixel )
1404 SDL_Surface *surface
1408 SDL_GetRGB(pixel,surface->format,&r,&g,&b);
1410 av_push(RETVAL,newSViv(r));
1411 av_push(RETVAL,newSViv(g));
1412 av_push(RETVAL,newSViv(b));
1417 GetRGBA ( surface, pixel )
1418 SDL_Surface *surface
1422 SDL_GetRGBA(pixel,surface->format,&r,&g,&b,&a);
1424 av_push(RETVAL,newSViv(r));
1425 av_push(RETVAL,newSViv(g));
1426 av_push(RETVAL,newSViv(b));
1427 av_push(RETVAL,newSViv(a));
1432 SaveBMP ( surface, filename )
1433 SDL_Surface *surface
1436 RETVAL = SDL_SaveBMP(surface,filename);
1441 SetColorKey ( surface, flag, key )
1442 SDL_Surface *surface
1446 Uint32 pixel = SDL_MapRGB(surface->format,key->r,key->g,key->b);
1447 RETVAL = SDL_SetColorKey(surface,flag,pixel);
1452 SetAlpha ( surface, flag, alpha )
1453 SDL_Surface *surface
1457 RETVAL = SDL_SetAlpha(surface,flag,alpha);
1462 ConvertRGB ( surface )
1463 SDL_Surface * surface
1465 SDL_PixelFormat fmt;
1467 fmt.BitsPerPixel = 24;
1468 fmt.BytesPerPixel = 3;
1469 fmt.Rmask = 0x000000ff;
1470 fmt.Gmask = 0x0000ff00;
1471 fmt.Bmask = 0x00ff0000;
1472 fmt.Amask = 0x00000000;
1483 RETVAL = SDL_ConvertSurface(surface,&fmt,surface->flags);
1488 ConvertRGBA ( surface )
1489 SDL_Surface * surface
1491 SDL_PixelFormat fmt;
1493 fmt.BitsPerPixel = 32;
1494 fmt.BytesPerPixel = 4;
1495 fmt.Rmask = 0x000000ff;
1496 fmt.Gmask = 0x0000ff00;
1497 fmt.Bmask = 0x00ff0000;
1498 fmt.Amask = 0xff000000;
1509 RETVAL = SDL_ConvertSurface(surface,&fmt,surface->flags);
1516 FillRect ( dest, dest_rect, pixel )
1521 RETVAL = SDL_FillRect(dest,dest_rect,pixel);
1528 RETVAL = SDL_GetAppState();
1534 WMSetCaption ( title, icon )
1538 SDL_WM_SetCaption(title,icon);
1544 SDL_WM_GetCaption(&title,&icon);
1546 av_push(RETVAL,newSVpv(title,0));
1547 av_push(RETVAL,newSVpv(icon,0));
1555 SDL_WM_SetIcon(icon,NULL);
1570 mask = SDL_GetMouseState(&x,&y);
1572 av_push(RETVAL,newSViv(mask));
1573 av_push(RETVAL,newSViv(x));
1574 av_push(RETVAL,newSViv(y));
1579 GetRelativeMouseState ()
1584 mask = SDL_GetRelativeMouseState(&x,&y);
1586 av_push(RETVAL,newSViv(mask));
1587 av_push(RETVAL,newSViv(x));
1588 av_push(RETVAL,newSViv(y));
1593 NewCursor ( data, mask, x ,y )
1599 RETVAL = SDL_CreateCursor((Uint8*)data->pixels,
1600 (Uint8*)mask->pixels,data->w,data->h,x,y);
1605 FreeCursor ( cursor )
1608 SDL_FreeCursor(cursor);
1611 SetCursor ( cursor )
1614 SDL_SetCursor(cursor);
1619 RETVAL = SDL_GetCursor();
1624 ShowCursor ( toggle )
1627 RETVAL = SDL_ShowCursor(toggle);
1632 NewAudioSpec ( freq, format, channels, samples )
1638 RETVAL = (SDL_AudioSpec *)safemalloc(sizeof(SDL_AudioSpec));
1639 RETVAL->freq = freq;
1640 RETVAL->format = format;
1641 RETVAL->channels = channels;
1642 RETVAL->samples = samples;
1647 FreeAudioSpec ( spec )
1653 NewAudioCVT ( src_format, src_channels, src_rate, dst_format, dst_channels, dst_rate)
1661 RETVAL = (SDL_AudioCVT *)safemalloc(sizeof(SDL_AudioCVT));
1662 if (SDL_BuildAudioCVT(RETVAL,src_format, src_channels, src_rate,
1663 dst_format, dst_channels, dst_rate)) {
1664 safefree(RETVAL); RETVAL = NULL; }
1669 FreeAudioCVT ( cvt )
1675 ConvertAudioData ( cvt, data, len )
1681 cvt->buf = (Uint8*) safemalloc(cvt->len*cvt->len_mult);
1682 memcpy(cvt->buf,data,cvt->len);
1683 RETVAL = SDL_ConvertAudio(cvt);
1688 OpenAudio ( spec, callback )
1692 spec->userdata = (void*)callback;
1693 spec->callback = sdl_perl_audio_callback;
1694 RETVAL = SDL_OpenAudio(spec,NULL);
1701 RETVAL = SDL_GetAudioStatus ();
1709 SDL_PauseAudio(p_on);
1733 LoadWAV ( filename, spec )
1737 SDL_AudioSpec *temp;
1742 temp = SDL_LoadWAV(filename,spec,&buf,&len);
1743 if ( ! temp ) goto error;
1744 av_push(RETVAL,newSViv(PTR2IV(temp)));
1745 av_push(RETVAL,newSViv(PTR2IV(buf)));
1746 av_push(RETVAL,newSViv(len));
1751 #ifdef HAVE_SDL_MIXER
1754 MixAudio ( dst, src, len, volume )
1760 SDL_MixAudio(dst,src,len,volume);
1763 MixOpenAudio ( frequency, format, channels, chunksize )
1769 RETVAL = Mix_OpenAudio(frequency, format, channels, chunksize);
1774 MixAllocateChannels ( number )
1777 RETVAL = Mix_AllocateChannels(number);
1784 int freq, channels, status;
1786 status = Mix_QuerySpec(&freq,&format,&channels);
1788 av_push(RETVAL,newSViv(status));
1789 av_push(RETVAL,newSViv(freq));
1790 av_push(RETVAL,newSViv(format));
1791 av_push(RETVAL,newSViv(channels));
1796 MixLoadWAV ( filename )
1799 RETVAL = Mix_LoadWAV(filename);
1804 MixLoadMusic ( filename )
1807 RETVAL = Mix_LoadMUS(filename);
1812 MixQuickLoadWAV ( buf )
1815 RETVAL = Mix_QuickLoad_WAV(buf);
1820 MixFreeChunk( chunk )
1823 Mix_FreeChunk(chunk);
1826 MixFreeMusic ( music )
1829 Mix_FreeMusic(music);
1832 MixSetPostMixCallback ( func, arg )
1836 Mix_SetPostMix(func,arg);
1841 RETVAL = sdl_perl_music_callback;
1846 MixSetMusicHook ( func, arg )
1850 Mix_HookMusic(func,arg);
1853 MixSetMusicFinishedHook ( func )
1856 mix_music_finished_cv = func;
1857 Mix_HookMusicFinished(sdl_perl_music_finished_callback);
1860 MixGetMusicHookData ()
1862 RETVAL = Mix_GetMusicHookData();
1867 MixReverseChannels ( number )
1870 RETVAL = Mix_ReserveChannels ( number );
1875 MixGroupChannel ( which, tag )
1879 RETVAL = Mix_GroupChannel(which,tag);
1884 MixGroupChannels ( from, to, tag )
1889 RETVAL = Mix_GroupChannels(from,to,tag);
1894 MixGroupAvailable ( tag )
1897 RETVAL = Mix_GroupAvailable(tag);
1902 MixGroupCount ( tag )
1905 RETVAL = Mix_GroupCount(tag);
1910 MixGroupOldest ( tag )
1913 RETVAL = Mix_GroupOldest(tag);
1918 MixGroupNewer ( tag )
1921 RETVAL = Mix_GroupNewer(tag);
1926 MixPlayChannel ( channel, chunk, loops )
1931 RETVAL = Mix_PlayChannel(channel,chunk,loops);
1936 MixPlayChannelTimed ( channel, chunk, loops, ticks )
1942 RETVAL = Mix_PlayChannelTimed(channel,chunk,loops,ticks);
1947 MixPlayMusic ( music, loops )
1951 RETVAL = Mix_PlayMusic(music,loops);
1956 MixFadeInChannel ( channel, chunk, loops, ms )
1962 RETVAL = Mix_FadeInChannel(channel,chunk,loops,ms);
1967 MixFadeInChannelTimed ( channel, chunk, loops, ms, ticks )
1974 RETVAL = Mix_FadeInChannelTimed(channel,chunk,loops,ms,ticks);
1979 MixFadeInMusic ( music, loops, ms )
1984 RETVAL = Mix_FadeInMusic(music,loops,ms);
1989 MixVolume ( channel, volume )
1993 RETVAL = Mix_Volume(channel,volume);
1998 MixVolumeChunk ( chunk, volume )
2002 RETVAL = Mix_VolumeChunk(chunk,volume);
2007 MixVolumeMusic ( volume )
2010 RETVAL = Mix_VolumeMusic(volume);
2015 MixHaltChannel ( channel )
2018 RETVAL = Mix_HaltChannel(channel);
2023 MixHaltGroup ( tag )
2026 RETVAL = Mix_HaltGroup(tag);
2033 RETVAL = Mix_HaltMusic();
2038 MixExpireChannel ( channel, ticks )
2042 RETVAL = Mix_ExpireChannel ( channel,ticks);
2047 MixFadeOutChannel ( which, ms )
2051 RETVAL = Mix_FadeOutChannel(which,ms);
2056 MixFadeOutGroup ( which, ms )
2060 RETVAL = Mix_FadeOutGroup(which,ms);
2065 MixFadeOutMusic ( ms )
2068 RETVAL = Mix_FadeOutMusic(ms);
2075 RETVAL = Mix_FadingMusic();
2080 MixFadingChannel( which )
2083 RETVAL = Mix_FadingChannel(which);
2088 MixPause ( channel )
2094 MixResume ( channel )
2097 Mix_Resume(channel);
2100 MixPaused ( channel )
2103 RETVAL = Mix_Paused(channel);
2125 RETVAL = Mix_PausedMusic();
2130 MixPlaying( channel )
2133 RETVAL = Mix_Playing(channel);
2140 RETVAL = Mix_PlayingMusic();
2145 MixSetPanning ( channel, left, right )
2150 RETVAL = Mix_SetPanning(channel, left, right);
2162 GLLoadLibrary ( path )
2165 RETVAL = SDL_GL_LoadLibrary(path);
2170 GLGetProcAddress ( proc )
2173 RETVAL = SDL_GL_GetProcAddress(proc);
2178 GLSetAttribute ( attr, value )
2182 RETVAL = SDL_GL_SetAttribute(attr, value);
2187 GLGetAttribute ( attr )
2192 av_push(RETVAL,newSViv(SDL_GL_GetAttribute(attr, &value)));
2193 av_push(RETVAL,newSViv(value));
2200 SDL_GL_SwapBuffers ();
2206 RETVAL = (SDL_BYTEORDER == SDL_BIG_ENDIAN);
2213 RETVAL = SDL_NumJoysticks();
2218 JoystickName ( index )
2221 RETVAL = (char*)SDL_JoystickName(index);
2226 JoystickOpen ( index )
2229 RETVAL = SDL_JoystickOpen(index);
2234 JoystickOpened ( index )
2237 RETVAL = SDL_JoystickOpened(index);
2242 JoystickIndex ( joystick )
2243 SDL_Joystick *joystick
2245 RETVAL = SDL_JoystickIndex(joystick);
2250 JoystickNumAxes ( joystick )
2251 SDL_Joystick *joystick
2253 RETVAL = SDL_JoystickNumAxes(joystick);
2258 JoystickNumBalls ( joystick )
2259 SDL_Joystick *joystick
2261 RETVAL = SDL_JoystickNumBalls(joystick);
2266 JoystickNumHats ( joystick )
2267 SDL_Joystick *joystick
2269 RETVAL = SDL_JoystickNumHats(joystick);
2274 JoystickNumButtons ( joystick )
2275 SDL_Joystick *joystick
2277 RETVAL = SDL_JoystickNumButtons(joystick);
2284 SDL_JoystickUpdate();
2287 JoystickGetAxis ( joystick, axis )
2288 SDL_Joystick *joystick
2291 RETVAL = SDL_JoystickGetAxis(joystick,axis);
2296 JoystickGetHat ( joystick, hat )
2297 SDL_Joystick *joystick
2300 RETVAL = SDL_JoystickGetHat(joystick,hat);
2305 JoystickGetButton ( joystick, button)
2306 SDL_Joystick *joystick
2309 RETVAL = SDL_JoystickGetButton(joystick,button);
2314 JoystickGetBall ( joystick, ball )
2315 SDL_Joystick *joystick
2319 success = SDL_JoystickGetBall(joystick,ball,&dx,&dy);
2321 av_push(RETVAL,newSViv(success));
2322 av_push(RETVAL,newSViv(dx));
2323 av_push(RETVAL,newSViv(dy));
2328 JoystickClose ( joystick )
2329 SDL_Joystick *joystick
2331 SDL_JoystickClose(joystick);
2334 JoyAxisEventWhich ( e )
2337 RETVAL = e->jaxis.which;
2342 JoyAxisEventAxis ( e )
2345 RETVAL = e->jaxis.axis;
2350 JoyAxisEventValue ( e )
2353 RETVAL = e->jaxis.value;
2358 JoyButtonEventWhich ( e )
2361 RETVAL = e->jbutton.which;
2366 JoyButtonEventButton ( e )
2369 RETVAL = e->jbutton.button;
2374 JoyButtonEventState ( e )
2377 RETVAL = e->jbutton.state;
2382 JoyHatEventWhich ( e )
2385 RETVAL = e->jhat.which;
2390 JoyHatEventHat ( e )
2393 RETVAL = e->jhat.hat;
2398 JoyHatEventValue ( e )
2401 RETVAL = e->jhat.value;
2406 JoyBallEventWhich ( e )
2409 RETVAL = e->jball.which;
2414 JoyBallEventBall ( e )
2417 RETVAL = e->jball.ball;
2422 JoyBallEventXrel ( e )
2425 RETVAL = e->jball.xrel;
2430 JoyBallEventYrel ( e )
2433 RETVAL = e->jball.yrel;
2438 SetClipRect ( surface, rect )
2439 SDL_Surface *surface
2442 SDL_SetClipRect(surface,rect);
2445 GetClipRect ( surface, rect )
2446 SDL_Surface *surface
2449 SDL_GetClipRect(surface, rect);
2457 RETVAL = SDLNet_Init();
2467 NetNewIPaddress ( host, port )
2471 RETVAL = (IPaddress*) safemalloc(sizeof(IPaddress));
2472 RETVAL->host = host;
2473 RETVAL->port = port;
2478 NetIPaddressHost ( ip )
2486 NetIPaddressPort ( ip )
2494 NetFreeIPaddress ( ip )
2500 NetResolveIP ( address )
2503 RETVAL = SDLNet_ResolveIP(address);
2508 NetResolveHost ( address, host, port )
2513 RETVAL = SDLNet_ResolveHost(address,host,port);
2521 RETVAL = SDLNet_TCP_Open(ip);
2526 NetTCPAccept ( server )
2529 RETVAL = SDLNet_TCP_Accept(server);
2534 NetTCPGetPeerAddress ( sock )
2537 RETVAL = SDLNet_TCP_GetPeerAddress(sock);
2542 NetTCPSend ( sock, data, len )
2547 RETVAL = SDLNet_TCP_Send(sock,data,len);
2552 NetTCPRecv ( sock, maxlen )
2558 buffer = safemalloc(maxlen);
2560 status = SDLNet_TCP_Recv(sock,buffer,maxlen);
2561 av_push(RETVAL,newSViv(status));
2562 av_push(RETVAL,newSVpvn((char*)buffer,maxlen));
2567 NetTCPClose ( sock )
2570 SDLNet_TCP_Close(sock);
2573 NetAllocPacket ( size )
2576 RETVAL = SDLNet_AllocPacket(size);
2581 NetAllocPacketV ( howmany, size )
2585 RETVAL = SDLNet_AllocPacketV(howmany,size);
2590 NetResizePacket ( packet, newsize )
2594 RETVAL = SDLNet_ResizePacket(packet,newsize);
2599 NetFreePacket ( packet )
2602 SDLNet_FreePacket(packet);
2605 NetFreePacketV ( packet )
2608 SDLNet_FreePacketV(packet);
2614 RETVAL = SDLNet_UDP_Open(port);
2619 NetUDPBind ( sock, channel, address )
2624 RETVAL = SDLNet_UDP_Bind(sock,channel,address);
2629 NetUDPUnbind ( sock, channel )
2633 SDLNet_UDP_Unbind(sock,channel);
2636 NetUDPGetPeerAddress ( sock, channel )
2640 RETVAL = SDLNet_UDP_GetPeerAddress(sock,channel);
2645 NetUDPSendV ( sock, packets, npackets )
2650 RETVAL = SDLNet_UDP_SendV(sock,packets,npackets);
2655 NetUDPSend ( sock, channel, packet )
2660 RETVAL = SDLNet_UDP_Send(sock,channel,packet);
2665 NetUDPRecvV ( sock, packets )
2669 RETVAL = SDLNet_UDP_RecvV(sock,packets);
2674 NetUDPRecv ( sock, packet )
2678 RETVAL = SDLNet_UDP_Recv(sock,packet);
2683 NetUDPClose ( sock )
2686 SDLNet_UDP_Close(sock);
2689 NetAllocSocketSet ( maxsockets )
2692 RETVAL = SDLNet_AllocSocketSet(maxsockets);
2697 NetTCP_AddSocket ( set, sock )
2698 SDLNet_SocketSet set
2701 RETVAL = SDLNet_TCP_AddSocket(set,sock);
2706 NetUDP_AddSocket ( set, sock )
2707 SDLNet_SocketSet set
2710 RETVAL = SDLNet_UDP_AddSocket(set,sock);
2715 NetTCP_DelSocket ( set, sock )
2716 SDLNet_SocketSet set
2719 RETVAL = SDLNet_TCP_DelSocket(set,sock);
2724 NetUDP_DelSocket ( set, sock )
2725 SDLNet_SocketSet set
2728 RETVAL = SDLNet_UDP_DelSocket(set,sock);
2733 NetCheckSockets ( set, timeout )
2734 SDLNet_SocketSet set
2737 RETVAL = SDLNet_CheckSockets(set,timeout);
2742 NetSocketReady ( sock )
2743 SDLNet_GenericSocket sock
2745 RETVAL = SDLNet_SocketReady(sock);
2750 NetFreeSocketSet ( set )
2751 SDLNet_SocketSet set
2753 SDLNet_FreeSocketSet(set);
2756 NetWrite16 ( value, area )
2760 SDLNet_Write16(value,area);
2763 NetWrite32 ( value, area )
2767 SDLNet_Write32(value,area);
2773 RETVAL = SDLNet_Read16(area);
2781 RETVAL = SDLNet_Read32(area);
2788 LockYUVOverlay ( overlay )
2789 SDL_Overlay *overlay
2791 RETVAL = SDL_LockYUVOverlay(overlay);
2796 UnlockYUVOverlay ( overlay )
2797 SDL_Overlay *overlay
2799 SDL_UnlockYUVOverlay(overlay);
2802 DisplayYUVOverlay ( overlay, dstrect )
2803 SDL_Overlay *overlay
2806 RETVAL = SDL_DisplayYUVOverlay ( overlay, dstrect );
2811 OverlayFormat ( overlay, ... )
2812 SDL_Overlay *overlay
2815 overlay->format = SvIV(ST(1));
2816 RETVAL = overlay->format;
2821 OverlayW ( overlay, ... )
2822 SDL_Overlay *overlay
2825 overlay->w = SvIV(ST(1));
2826 RETVAL = overlay->w;
2831 OverlayH ( overlay, ... )
2832 SDL_Overlay *overlay
2835 overlay->h = SvIV(ST(1));
2836 RETVAL = overlay->h;
2841 OverlayPlanes ( overlay, ... )
2842 SDL_Overlay *overlay
2845 overlay->planes = SvIV(ST(1));
2846 RETVAL = overlay->planes;
2851 OverlayHW ( overlay )
2852 SDL_Overlay *overlay
2854 RETVAL = overlay->hw_overlay;
2859 OverlayPitches ( overlay )
2860 SDL_Overlay *overlay
2862 RETVAL = overlay->pitches;
2867 OverlayPixels ( overlay )
2868 SDL_Overlay *overlay
2870 RETVAL = overlay->pixels;
2875 WMToggleFullScreen ( surface )
2876 SDL_Surface *surface
2878 RETVAL = SDL_WM_ToggleFullScreen(surface);
2883 WMGrabInput ( mode )
2886 RETVAL = SDL_WM_GrabInput(mode);
2893 RETVAL = SDL_WM_IconifyWindow();
2901 RETVAL = e->resize.w;
2909 RETVAL = e->resize.h;
2917 RETVAL = SDL_AudioDriverName(name,32);
2925 if (k >= SDLK_LAST) Perl_croak (aTHX_ "Key out of range");
2926 RETVAL = SDL_GetKeyState(NULL)[k];
2935 RETVAL = (SMPEG_Info *) safemalloc (sizeof(SMPEG_Info));
2940 FreeSMPEGInfo ( info )
2946 SMPEGInfoHasAudio ( info )
2949 RETVAL = info->has_audio;
2954 SMPEGInfoHasVideo ( info )
2957 RETVAL = info->has_video;
2962 SMPEGInfoWidth ( info )
2965 RETVAL = info->width;
2970 SMPEGInfoHeight ( info )
2973 RETVAL = info->height;
2978 SMPEGInfoCurrentFrame ( info )
2981 RETVAL = info->current_frame;
2986 SMPEGInfoCurrentFPS ( info )
2989 RETVAL = info->current_fps;
2994 SMPEGInfoCurrentAudioFrame ( info )
2997 RETVAL = info->audio_current_frame;
3002 SMPEGInfoCurrentOffset ( info )
3005 RETVAL = info->current_offset;
3010 SMPEGInfoTotalSize ( info )
3013 RETVAL = info->total_size;
3018 SMPEGInfoCurrentTime ( info )
3021 RETVAL = info->current_time;
3026 SMPEGInfoTotalTime ( info )
3029 RETVAL = info->total_time;
3037 RETVAL = SMPEG_error(mpeg);
3042 NewSMPEG ( filename, info, use_audio )
3047 #ifdef HAVE_SDL_MIXER
3048 RETVAL = SMPEG_new(filename,info,0);
3050 RETVAL = SMPEG_new(filename,info,use_audio);
3062 SMPEGEnableAudio ( mpeg , flag )
3066 SMPEG_enableaudio(mpeg,flag);
3067 #ifdef HAVE_SDL_MIXER
3068 sdl_perl_use_smpeg_audio = flag;
3072 SMPEGEnableVideo ( mpeg , flag )
3076 SMPEG_enablevideo(mpeg,flag);
3079 SMPEGSetVolume ( mpeg , volume )
3083 SMPEG_setvolume(mpeg,volume);
3086 SMPEGSetDisplay ( mpeg, dest, surfLock )
3091 SMPEG_setdisplay(mpeg,dest,surfLock,NULL);
3094 SMPEGScaleXY ( mpeg, w, h)
3099 SMPEG_scaleXY(mpeg,w,h);
3102 SMPEGScale ( mpeg, scale )
3106 SMPEG_scale(mpeg,scale);
3112 SDL_AudioSpec audiofmt;
3115 #ifdef HAVE_SDL_MIXER
3116 if (sdl_perl_use_smpeg_audio ) {
3117 SMPEG_enableaudio(mpeg, 0);
3118 Mix_QuerySpec(&freq, &format, &channels);
3119 audiofmt.format = format;
3120 audiofmt.freq = freq;
3121 audiofmt.channels = channels;
3122 SMPEG_actualSpec(mpeg, &audiofmt);
3123 Mix_HookMusic(SMPEG_playAudioSDL, mpeg);
3124 SMPEG_enableaudio(mpeg, 1);
3130 SMPEGStatus ( mpeg )
3133 RETVAL = SMPEG_status(mpeg);
3144 SMPEGLoop ( mpeg, repeat )
3148 SMPEG_loop(mpeg,repeat);
3155 #ifdef HAVE_SDL_MIXER
3156 Mix_HookMusic(NULL, NULL);
3160 SMPEGRewind ( mpeg )
3166 SMPEGSeek ( mpeg, bytes )
3170 SMPEG_seek(mpeg,bytes);
3173 SMPEGSkip ( mpeg, seconds )
3177 SMPEG_skip(mpeg,seconds);
3180 SMPEGSetDisplayRegion ( mpeg, rect )
3184 SMPEG_setdisplayregion(mpeg,rect->x,rect->y,rect->w,rect->h);
3187 SMPEGRenderFrame ( mpeg, frame )
3191 SMPEG_renderFrame(mpeg,frame);
3194 SMPEGGetInfo ( mpeg )
3197 RETVAL = (SMPEG_Info *) safemalloc (sizeof(SMPEG_Info));
3198 SMPEG_getinfo(mpeg,RETVAL);
3210 GFXRotoZoom ( src, angle, zoom, smooth)
3216 RETVAL = rotozoomSurface( src, angle, zoom, smooth);
3221 GFXZoom ( src, zoomx, zoomy, smooth)
3227 RETVAL = zoomSurface( src, zoomx, zoomy, smooth);
3234 GFXPixelColor ( dst, x, y, color )
3240 RETVAL = pixelColor( dst, x, y, color);
3245 GFXPixelRGBA ( dst, x, y, r, g, b, a )
3254 RETVAL = pixelRGBA( dst, x, y, r, g, b, a );
3259 GFXHlineColor ( dst, x1, x2, y, color )
3266 RETVAL = hlineColor( dst, x1, x2, y, color );
3271 GFXHlineRGBA ( dst, x1, x2, y, r, g, b, a )
3281 RETVAL = hlineRGBA( dst, x1, x2, y, r, g, b, a );
3286 GFXVlineColor ( dst, x, y1, y2, color )
3293 RETVAL = vlineColor( dst, x, y1, y2, color );
3298 GFXVlineRGBA ( dst, x, y1, y2, r, g, b, a )
3308 RETVAL = vlineRGBA( dst, x, y1, y2, r, g, b, a );
3313 GFXRectangleColor ( dst, x1, y1, x2, y2, color )
3321 RETVAL = rectangleColor( dst, x1, y1, x2, y2, color );
3326 GFXRectangleRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
3337 RETVAL = rectangleRGBA( dst, x1, y1, x2, y2, r, g, b, a );
3342 GFXBoxColor ( dst, x1, y1, x2, y2, color )
3350 RETVAL = boxColor( dst, x1, y1, x2, y2, color );
3355 GFXBoxRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
3366 RETVAL = boxRGBA( dst, x1, y1, x2, y2, r, g, b, a );
3371 GFXLineColor ( dst, x1, y1, x2, y2, color )
3379 RETVAL = lineColor( dst, x1, y1, x2, y2, color );
3384 GFXLineRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
3395 RETVAL = lineRGBA( dst, x1, y1, x2, y2, r, g, b, a );
3400 GFXAalineColor ( dst, x1, y1, x2, y2, color )
3408 RETVAL = aalineColor( dst, x1, y1, x2, y2, color );
3413 GFXAalineRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
3424 RETVAL = aalineRGBA( dst, x1, y1, x2, y2, r, g, b, a );
3429 GFXCircleColor ( dst, x, y, r, color )
3436 RETVAL = circleColor( dst, x, y, r, color );
3441 GFXCircleRGBA ( dst, x, y, rad, r, g, b, a )
3451 RETVAL = circleRGBA( dst, x, y, rad, r, g, b, a );
3456 GFXAacircleColor ( dst, x, y, r, color )
3463 RETVAL = aacircleColor( dst, x, y, r, color );
3468 GFXAacircleRGBA ( dst, x, y, rad, r, g, b, a )
3478 RETVAL = aacircleRGBA( dst, x, y, rad, r, g, b, a );
3483 GFXFilledCircleColor ( dst, x, y, r, color )
3490 RETVAL = filledCircleColor( dst, x, y, r, color );
3495 GFXFilledCircleRGBA ( dst, x, y, rad, r, g, b, a )
3505 RETVAL = filledCircleRGBA( dst, x, y, rad, r, g, b, a );
3510 GFXEllipseColor ( dst, x, y, rx, ry, color )
3518 RETVAL = ellipseColor( dst, x, y, rx, ry, color );
3523 GFXEllipseRGBA ( dst, x, y, rx, ry, r, g, b, a )
3534 RETVAL = ellipseRGBA( dst, x, y, rx, ry, r, g, b, a );
3539 GFXAaellipseColor ( dst, xc, yc, rx, ry, color )
3547 RETVAL = aaellipseColor( dst, xc, yc, rx, ry, color );
3552 GFXAaellipseRGBA ( dst, x, y, rx, ry, r, g, b, a )
3563 RETVAL = aaellipseRGBA( dst, x, y, rx, ry, r, g, b, a );
3568 GFXFilledEllipseColor ( dst, x, y, rx, ry, color )
3576 RETVAL = filledEllipseColor( dst, x, y, rx, ry, color );
3581 GFXFilledEllipseRGBA ( dst, x, y, rx, ry, r, g, b, a )
3592 RETVAL = filledEllipseRGBA( dst, x, y, rx, ry, r, g, b, a );
3597 GFXFilledPieColor ( dst, x, y, rad, start, end, color )
3606 RETVAL = filledPieColor( dst, x, y, rad, start, end, color );
3611 GFXFilledPieRGBA ( dst, x, y, rad, start, end, r, g, b, a )
3623 RETVAL = filledPieRGBA( dst, x, y, rad, start, end, r, g, b, a );
3628 GFXPolygonColor ( dst, vx, vy, n, color )
3635 RETVAL = polygonColor( dst, vx, vy, n, color );
3640 GFXPolygonRGBA ( dst, vx, vy, n, r, g, b, a )
3650 RETVAL = polygonRGBA( dst, vx, vy, n, r, g, b, a );
3655 GFXAapolygonColor ( dst, vx, vy, n, color )
3662 RETVAL = aapolygonColor( dst, vx, vy, n, color );
3667 GFXAapolygonRGBA ( dst, vx, vy, n, r, g, b, a )
3677 RETVAL = aapolygonRGBA( dst, vx, vy, n, r, g, b, a );
3682 GFXFilledPolygonColor ( dst, vx, vy, n, color )
3689 RETVAL = filledPolygonColor( dst, vx, vy, n, color );
3694 GFXFilledPolygonRGBA ( dst, vx, vy, n, r, g, b, a )
3704 RETVAL = filledPolygonRGBA( dst, vx, vy, n, r, g, b, a );
3709 GFXCharacterColor ( dst, x, y, c, color )
3716 RETVAL = characterColor( dst, x, y, c, color );
3721 GFXCharacterRGBA ( dst, x, y, c, r, g, b, a )
3731 RETVAL = characterRGBA( dst, x, y, c, r, g, b, a );
3736 GFXStringColor ( dst, x, y, c, color )
3743 RETVAL = stringColor( dst, x, y, c, color );
3748 GFXStringRGBA ( dst, x, y, c, r, g, b, a )
3758 RETVAL = stringRGBA( dst, x, y, c, r, g, b, a );
3768 SVG_Load ( filename )
3771 RETVAL = SVG_Load(filename);
3776 SVG_LoadBuffer ( data, len )
3780 RETVAL = SVG_LoadBuffer(data,len);
3785 SVG_SetOffset ( source, xoff, yoff )
3786 SDL_svg_context* source
3790 RETVAL = SVG_SetOffset(source,xoff,yoff);
3795 SVG_SetScale ( source, xscale, yscale )
3796 SDL_svg_context* source
3800 RETVAL = SVG_SetScale(source,xscale,yscale);
3805 SVG_RenderToSurface ( source, x, y, dest )
3806 SDL_svg_context* source
3811 RETVAL = SVG_RenderToSurface(source,x,y,dest);
3817 SDL_svg_context* source
3822 SVG_Set_Flags ( source, flags )
3823 SDL_svg_context* source
3826 SVG_Set_Flags(source,flags);
3829 SVG_Width ( source )
3830 SDL_svg_context* source
3832 RETVAL = SVG_Width(source);
3837 SVG_HEIGHT ( source )
3838 SDL_svg_context* source
3840 RETVAL = SVG_Height(source);
3845 SVG_SetClipping ( source, minx, miny, maxx, maxy )
3846 SDL_svg_context* source
3852 SVG_SetClipping(source,minx,miny,maxx,maxy);
3857 RETVAL = SVG_Version();
3864 #ifdef HAVE_SDL_SOUND
3867 SoundAudioInfoFormat ( audioinfo )
3868 Sound_AudioInfo* audioinfo
3870 RETVAL = audioinfo->format;
3875 SoundAudioInfoChannels ( audioinfo )
3876 Sound_AudioInfo* audioinfo
3878 RETVAL = audioinfo->channels;
3883 SoundAudioInforate ( audioinfo )
3884 Sound_AudioInfo* audioinfo
3886 RETVAL = audioinfo->rate;
3891 SoundDecoderInfoExtensions ( decoderinfo )
3892 Sound_DecoderInfo* decoderinfo
3895 for ( ext = decoderinfo->extensions; *ext != NULL; ext++ ){
3896 av_push(RETVAL,newSVpv(*ext,0));
3902 SoundDecoderInfoDescription ( decoderinfo )
3903 Sound_DecoderInfo* decoderinfo
3905 RETVAL = decoderinfo->description;
3910 SoundDecoderInfoAuthor ( decoderinfo )
3911 Sound_DecoderInfo* decoderinfo
3913 RETVAL = decoderinfo->author;
3918 SoundDecoderInfoUrl ( decoderinfo )
3919 Sound_DecoderInfo* decoderinfo
3921 RETVAL = decoderinfo->url;
3925 const Sound_DecoderInfo*
3926 SoundSampleDecoder ( sample )
3927 Sound_Sample* sample
3929 RETVAL = sample->decoder;
3934 SoundSampleDesired ( sample )
3935 Sound_Sample* sample
3937 RETVAL = &sample->desired;
3942 SoundSampleAcutal ( sample )
3943 Sound_Sample* sample
3945 RETVAL = &sample->actual;
3950 SoundSampleBuffer ( sample )
3951 Sound_Sample* sample
3953 RETVAL = sample->buffer;
3958 SoundSampleBufferSize ( sample )
3959 Sound_Sample* sample
3961 RETVAL = sample->buffer_size;
3966 SoundSampleFlags ( sample )
3967 Sound_Sample* sample
3969 RETVAL = (Uint32)sample->flags;
3976 RETVAL = Sound_Init();
3983 RETVAL = Sound_Quit();
3988 Sound_AvailableDecoders ( )
3991 const Sound_DecoderInfo** sdi;
3992 sdi = Sound_AvailableDecoders();
3994 for (;*sdi != NULL; ++sdi) {
3995 av_push(RETVAL,sv_2mortal(newSViv(PTR2IV(*sdi))));
4004 RETVAL = Sound_GetError();
4009 Sound_ClearError ( )
4014 Sound_NewSample ( rw, ext, desired, buffsize )
4017 Sound_AudioInfo* desired
4020 RETVAL = Sound_NewSample(rw,ext,desired,buffsize);
4025 Sound_NewSampleFromMem ( data, size, ext, desired, buffsize )
4029 Sound_AudioInfo* desired
4032 RETVAL = Sound_NewSampleFromMem(data,size,ext,desired,buffsize);
4037 Sound_NewSampleFromFile ( fname, desired, buffsize )
4039 Sound_AudioInfo* desired
4042 RETVAL = Sound_NewSampleFromFile(fname,desired,buffsize);
4047 Sound_FreeSample ( sample )
4048 Sound_Sample* sample
4050 Sound_FreeSample(sample);
4053 Sound_GetDuration ( sample )
4054 Sound_Sample* sample
4056 RETVAL = Sound_GetDuration(sample);
4061 Sound_SetBufferSize ( sample, size )
4062 Sound_Sample* sample
4065 RETVAL = Sound_SetBufferSize(sample,size);
4070 Sound_Decode ( sample )
4071 Sound_Sample* sample
4073 RETVAL = Sound_Decode(sample);
4078 Sound_DecodeAll ( sample )
4079 Sound_Sample* sample
4081 RETVAL = Sound_DecodeAll(sample);
4086 Sound_Rewind ( sample )
4087 Sound_Sample* sample
4089 RETVAL = Sound_Rewind(sample);
4094 Sound_Seek ( sample, ms )
4095 Sound_Sample* sample
4098 RETVAL = Sound_Seek(sample,ms);
4109 RETVAL = TTF_Init();
4119 TTF_OpenFont ( file, ptsize )
4123 char* CLASS = "SDL::TTF_Font";
4124 RETVAL = TTF_OpenFont(file,ptsize);
4129 TTF_SizeText ( font, text )
4135 if(TTF_SizeText(font,text,&w,&h))
4137 printf("TTF error at TTFSizeText: %s \n", TTF_GetError());
4138 Perl_croak (aTHX_ "TTF error \n");
4142 av_push(RETVAL,newSViv(w));
4143 av_push(RETVAL,newSViv(h));
4144 sv_2mortal((SV*)RETVAL);
4150 TTF_RenderText_Blended ( font, text, fg )
4155 char* CLASS = "SDL::Surface";
4156 RETVAL = TTF_RenderText_Blended(font,text,*fg);
4162 MODULE = SDL PACKAGE = SDL
4163 PROTOTYPES : DISABLE