void ShaderBlur::Apply( SDL_Surface* Target ) { // Keep render target (might not be applying shader to screen) SDL_Surface* r = spGetRenderTarget(); SDL_Surface* t = spUniqueCopySurface( Target ); spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_TOP ); spSelectRenderTarget( t ); spSetBlending( SP_ONE ); spBlitSurface( 0, 0, -1, Target ); spSetBlending( SP_ONE >> 2 ); for( int y = -1; y <= 1; y++ ) { for( int x = -1; x <= 1; x++ ) { if( x != 0 && y != 0 ) { spBlitSurface( x, y, -1, Target ); } } } spSelectRenderTarget( Target ); spSetBlending( SP_ONE ); spBlitSurface( 0, 0, -1, t ); spDeleteSurface( t ); // Restore render target spSelectRenderTarget( r ); }
void TransitionFade::Render() { spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_TOP ); // Draw original source spSetBlending( SP_ONE ); spBlitSurface( 0, 0, -1, SourceScreen ); // Alpha it to the actual screen spSetBlending( Alpha ); spBlitSurface( 0, 0, -1, TargetScreen ); spSetBlending( SP_ONE ); }
void TransitionStrips::Render() { spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_TOP ); // Draw original source spBlitSurface( 0, 0, -1, SourceScreen ); // Draw strips for( int i = 0; i < numStrips; i++ ) { spBlitSurfacePart( i * stripWidth, 0, -1, TargetScreen, i * stripWidth, 0, stripWidth, speedList[i] * frameIndex ); } }
void TransitionFadeIn::Render() { SDL_Surface* b = spGetWindowSurface(); SDL_Surface* t = spUniqueCopySurface( b ); // Fade from colour spClearTarget( SourceColour ); // Buffer the next stages screen spSelectRenderTarget( t ); Target->Render(); spSelectRenderTarget( b ); // Alpha it to the actual screen spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_TOP ); spSetBlending( Alpha ); spBlitSurface( 0, 0, -1, t ); spSetBlending( SP_ONE ); spDeleteSurface( t ); }
void draw_function( void ) { //Cleaning the target (in this case the screen surface) with 0 (black). //In this case I don't clean the zBuffer, because I don't use it. ;-) //But you ARE able to use it, if you want! spResetZBuffer(); spClearTarget( 34567 ); //Set the origin: switch ( ( rotation >> 17 ) % 9 ) { case 0: spSetHorizontalOrigin( SP_CENTER ); spSetVerticalOrigin( SP_CENTER ); break; case 1: spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_CENTER ); break; case 2: spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_TOP ); break; case 3: spSetHorizontalOrigin( SP_CENTER ); spSetVerticalOrigin( SP_TOP ); break; case 4: spSetHorizontalOrigin( SP_RIGHT ); spSetVerticalOrigin( SP_TOP ); break; case 5: spSetHorizontalOrigin( SP_RIGHT ); spSetVerticalOrigin( SP_CENTER ); break; case 6: spSetHorizontalOrigin( SP_RIGHT ); spSetVerticalOrigin( SP_BOTTOM ); break; case 7: spSetHorizontalOrigin( SP_CENTER ); spSetVerticalOrigin( SP_BOTTOM ); break; case 8: spSetHorizontalOrigin( SP_LEFT ); spSetVerticalOrigin( SP_BOTTOM ); break; } //Drawing the sprite in the middle of the screen spDrawSprite( screen->w / 2, screen->h / 2, -1, sprite ); spDrawSprite( screen->w - 1, screen->h - 1, -1, sprite ); spDrawSprite( screen->w - 1, 0, -1, sprite ); spDrawSprite( 0, screen->h - 1, -1, sprite ); spDrawSprite( 0, 0, -1, sprite ); //mark the center //spEllipseBorder( screen->w / 2, screen->h / 2, -100, 60+spSin(rotation/2)/1000, 60+spCos(rotation/3)/1000, 20+spCos(rotation/7)/10000, 20+spSin(rotation/5)/10000, 0 ); spEllipseBorder( screen->w / 2, screen->h / 2, -100, 6, 6, 2, 2, 0 ); //Show it! spFlip(); }