X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2FCore%2FVideo.xs;h=a8a9a1ea586ecfb0611ea720afb3c4338db350e7;hb=65b2187d7fca182e8689d1af3ba44f5f946dcc35;hp=3c964e7e2558b265a4ad7ac8cba941db3cb3b378;hpb=8a2411d0d946d83256c0b781d09ec76eae19275a;p=sdlgit%2FSDL_perl.git diff --git a/src/Core/Video.xs b/src/Core/Video.xs index 3c964e7..a8a9a1e 100644 --- a/src/Core/Video.xs +++ b/src/Core/Video.xs @@ -8,6 +8,36 @@ #include + +static Uint16* av_to_uint16 (AV* av) +{ + int len = av_len(av); + if( len != -1) + { + int i; + Uint16* table = (Uint16 *)safemalloc(sizeof(Uint16)*(len)); + //fprintf( stderr, "Expecting 1,2,5,6 \n Length is %d \n", len); + for ( i = 0; i < len+1 ; i++ ){ + SV ** temp = av_fetch(av,i,0); + if( temp != NULL) + { + table[i] = (Uint16 *) SvIV( *temp ) ; + /* fprintf( stderr, "table[%d] = ", i); + if (table[i] == NULL) { fprintf ( stderr, " NULL\n"); } + else{ fprintf(stderr, " %d \n", table[i]); } */ + } + else { table[i] =0; } + + } +// warn("Got %d %d %d %d \n", table[0], table[1], table[2], table[3] ); + + return table; + } + return NULL; +} + + + MODULE = SDL::Video PACKAGE = SDL::Video PREFIX = video_ =for documentation @@ -35,21 +65,185 @@ video_get_video_info() PREINIT: char* CLASS = "SDL::VideoInfo"; CODE: - RETVAL = SDL_GetVideoInfo; + RETVAL = (SDL_VideoInfo *) SDL_GetVideoInfo(); + + OUTPUT: + RETVAL + +SV * +video_video_driver_name( ) + + CODE: + char buffer[1024]; + if ( SDL_VideoDriverName(buffer, 1024) != NULL ) + { + RETVAL = newSVpv(buffer, 0); + } + else + XSRETURN_UNDEF; + OUTPUT: + RETVAL + +AV* +list_modes ( format, flags ) + Uint32 flags + SDL_PixelFormat *format + + CODE: + SDL_Rect **mode; + RETVAL = newAV(); + mode = SDL_ListModes(format,flags); + if (mode == (SDL_Rect**)-1 ) { + av_push(RETVAL,newSVpv("all",0)); + } else if (! mode ) { + av_push(RETVAL,newSVpv("none",0)); + } else { + for (;*mode;mode++) { + av_push(RETVAL,newSViv(PTR2IV(*mode))); + } + } + OUTPUT: + RETVAL + + +int +video_video_mode_ok ( width, height, bpp, flags ) + int width + int height + int bpp + Uint32 flags + CODE: + RETVAL = SDL_VideoModeOK(width,height,bpp,flags); + OUTPUT: + RETVAL + +SDL_Surface * +video_set_video_mode ( width, height, bpp, flags ) + int width + int height + int bpp + Uint32 flags + PREINIT: + char* CLASS = "SDL::Surface"; + CODE: + RETVAL = SDL_SetVideoMode(width,height,bpp,flags); OUTPUT: - RETVAL + RETVAL + -char * -video_video_driver_name( maxlen ) - int maxlen +void +video_update_rect ( surface, x, y, w ,h ) + SDL_Surface *surface + int x + int y + int w + int h CODE: - char* buffer = safemalloc( sizeof(char) * maxlen); - char* str = SvPV( newSVpvn( buffer , maxlen), maxlen ); + SDL_UpdateRect(surface,x,y,w,h); + +void +video_update_rects ( surface, ... ) + SDL_Surface *surface + CODE: + SDL_Rect *rects; + int num_rects,i; + if ( items < 2 ) return; + num_rects = items - 1; + rects = (SDL_Rect *)safemalloc(sizeof(SDL_Rect)*items); + for(i=0;ir; + colors[i].g = temp->g; + colors[i].b = temp->b; + } + RETVAL = SDL_SetColors(surface, colors, start, length ); + safefree(colors); + } + + OUTPUT: + RETVAL + +int +video_set_palette ( surface, flags, start, ... ) + SDL_Surface *surface + int flags + int start + + CODE: + SDL_Color *colors,*temp; + int i, length; + if ( items < 4 ) { + RETVAL = 0; + } + else + { + length = items - 3; + colors = (SDL_Color *)safemalloc(sizeof(SDL_Color)*(length+1)); + for ( i = 0; i < length ; i++ ){ + temp = (SDL_Color *)SvIV(ST(i+3)); + colors[i].r = temp->r; + colors[i].g = temp->g; + colors[i].b = temp->b; + } + RETVAL = SDL_SetPalette(surface, flags, colors, start, length ); + safefree(colors); + } + OUTPUT: + RETVAL + +int +video_set_gamma(r, g, b) + float r; + float g; + float b; + CODE: + RETVAL = SDL_SetGamma(r,g,b); + OUTPUT: + RETVAL + + +int +video_set_gamma_ramp( rt, gt, bt ) + AV* rt; + AV* gt; + AV* bt; + CODE: + Uint16 *redtable, *greentable, *bluetable; + redtable = av_to_uint16(rt); + greentable = av_to_uint16(gt); + bluetable = av_to_uint16(bt); + RETVAL = SDL_SetGammaRamp(redtable, greentable, bluetable); + if( redtable != NULL) { safefree(redtable); } + if( greentable != NULL) { safefree(greentable); } + if( bluetable != NULL) { safefree(bluetable); } + OUTPUT: + RETVAL +