void resize( Uint16 w, Uint16 h ) { #if defined ZOOMUP || defined ZOOMDOWN #if defined ZOOMUP && defined ZOOMDOWN if (dummy_screen) spDeleteSurface(dummy_screen); #ifdef FIRSTUP dummy_screen = spCreateSurface(screen->w*2,screen->h*2); #else dummy_screen = spCreateSurface(screen->w/2,screen->h/2); #endif #else if (screen) spDeleteSurface(screen); #ifdef ZOOMUP screen = spCreateSurface(real_screen->w/2,real_screen->h/2); #else screen = spCreateSurface(real_screen->w*2,real_screen->h*2); #endif #endif #endif spSelectRenderTarget(screen); //Font Loading if ( font ) spFontDelete( font ); int zoom = spMin( ( screen->w << SP_ACCURACY ) / 320, ( screen->h << SP_ACCURACY ) / 240 ); //at 320x240 == 1.0 font = spFontLoad( "./font/LiberationMono-Regular.ttf", 10 * zoom >> SP_ACCURACY ); spFontAdd( font,SP_FONT_GROUP_ASCII, 0 ); //Just for debug stuff spFontAddBorder( font, spGetFastRGB(127,127,127) ); }
TransitionFade::~TransitionFade() { if( SourceScreen != 0 ) { spDeleteSurface( SourceScreen ); } if( TargetScreen != 0 ) { spDeleteSurface( TargetScreen ); } }
TransitionStrips::~TransitionStrips() { free( (void*)speedList ); if( SourceScreen != 0 ) { spDeleteSurface( SourceScreen ); } if( TargetScreen != 0 ) { spDeleteSurface( TargetScreen ); } }
int main(int argc, char **argv) { //sparrow3D Init spSetDefaultWindowSize(640,480); //Creates a 640x480 window at PC instead of 320x240 spInitCore(); //Setup screen = spCreateDefaultWindow(); //Selecting the renderTarget. It could be every surface spSelectRenderTarget(screen); resize(screen->w,screen->h); //Textures loading texture = spLoadSurface("./data/garfield.png"); //Setting alpha test to 0, because the texture has pink parts spSetAlphaTest(0); //Mesh loading mesh = spMeshLoadObj("./data/testmeshuv_tri.obj",texture,65535); //Light on! There is one "default" light at 0,0,0 with color white. We just use it. spSetLight(1); //All glory the main loop //every frame the draw_function is called //every frame the calc_function is called with the past time as argument //at least 10 ms have to be between to frames (max 100 fps) //if the window is resized, the resize feedback-function is called (again) spLoop(draw_function,calc_function,10,resize,NULL); //Winter Wrap up, Winter Wrap up spMeshDelete(mesh); spDeleteSurface(texture); spQuitCore(); return 0; }
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 resizeWindow( Uint16 w, Uint16 h ) { spDeleteSurface(display); display = spCreateWindow( w, h, gameSettings->FullScreen, 0 ); //Setup of the new/resized window spSelectRenderTarget(spGetWindowSurface()); spSetPerspective(50.0f,(float)spGetWindowSurface()->w/(float)spGetWindowSurface()->h,0.1f,100.0f); }
static void spLetterDelete( spLetterPointer letter ) { if ( letter == NULL ) return; spLetterDelete( letter->left ); spLetterDelete( letter->right ); spDeleteSurface( letter->surface ); free( letter ); }
StateScore::~StateScore() { spDeleteSurface( killFrame ); spFontDelete( scoreText ); spResetAxisState(); spResetButtonsState(); delete run; if ( nameBkup[0] != 0 ) strcpy( name, nameBkup ); }
StateScore::StateScore( StateLevel *level ) : StateBase(), file( FOLDER_DATA "/" FILE_HIGHSCORE_NORMAL ) { SDL_Surface *temp = spCreateSurface( APP_SCREEN_WIDTH, APP_SCREEN_HEIGHT ); killFrame = spCreateSurface( APP_SCREEN_WIDTH, APP_SCREEN_HEIGHT ); spSelectRenderTarget( temp ); level->render( temp ); spUnlockRenderTarget(); SDL_SetAlpha( temp, SDL_SRCALPHA, 128 ); SDL_BlitSurface( temp, NULL, killFrame, NULL ); spLockRenderTarget(); spSelectRenderTarget( spGetWindowSurface() ); spDeleteSurface( temp ); if ( level->player->toBeRemoved ) playerDead = true; else playerDead = false; score = level->scoreKeeper->getScore(); scoreText = spFontLoad( FONT_GENERAL, SCORE_FONT_SIZE ); if ( scoreText ) { spFontAdd( scoreText, SP_FONT_GROUP_ALPHABET SP_FONT_GROUP_GERMAN ".:!\"_", -1 ); spFontAdd( scoreText, SP_FONT_GROUP_NUMBERS, spGetRGB( 255, 128, 0 ) ); } nameBkup[0] = 0; if ( level->run->playing ) { state = 1; caret = false; strcpy( nameBkup, name ); strcpy( name, level->run->info.name.c_str() ); run = level->run; level->run = NULL; } else { caret = true; state = 0; spPollKeyboardInput( name, SCORE_MAX_NAME_LENGTH, NULL ); run = level->run; level->run = NULL; } caretTimer.start( SCORE_CARET_BLINK_TIME ); timers.push_back( &caretTimer ); type = stScore; }
PREFIX void spDeleteSprite( spSpritePointer sprite) { if ( sprite == NULL ) return; if (sprite->name) free(sprite->name); spSubSpritePointer momSub = sprite->firstSub; do { spSubSpritePointer next = momSub->next; spDeleteSurface(momSub->surface); free( momSub ); momSub = next; } while ( momSub != sprite->firstSub ); if (sprite->collection) spRemoveSpriteFromCollection(sprite); free( sprite ); }
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 ); }
int main( int argc, char **argv ) { //sparrow3D Init spInitCore(); //spSetDefaultWindowSize(800,480); //Setup #if (defined ZOOMUP || defined ZOOMDOWN) && !(defined ZOOMUP && defined ZOOMDOWN) real_screen = spCreateDefaultWindow(); resize( real_screen->w, real_screen->h ); #else screen = spCreateDefaultWindow(); resize( screen->w, screen->h ); #endif //Setting the first level levelPointer = getLevelOverPointer(); if (argc < 2) sprintf(get_saved_level(),"./level/tile_test.tmx"); else sprintf(get_saved_level(),"%s",argv[1]); levelFade = FADE_TIME; (*levelPointer) = loadLevel(get_saved_level()); createPhysicsFromLevel((*levelPointer)); //All glory the main loop spLoop( draw_schizo, calc_schizo, 10, resize, NULL ); //Winter Wrap up, Winter Wrap up … clearPhysics(); deleteLevel((*levelPointer)); spFontDelete( font ); spDeleteSurface(screen); spQuitCore(); return 0; }
int main( int argc, char **argv ) { //sparrow3D Init spSetDefaultWindowSize( 640, 480 ); //Creates a 640x480 window at PC instead of 320x240 spInitCore(); //Setup screen = spCreateDefaultWindow(); spSelectRenderTarget(screen); //Tile map loading tile_map = spLoadSurface( "./data/science_guy_frames01.png" ); //Creating an empty sprite sprite = spNewSprite(); //Filling it with it subsprites. int i; for ( i = 0; i < 9; i++ ) spNewSubSpriteWithTiling( sprite, tile_map, i * 24 + 1, 1, 22, 46, 100 ); //We don't want to use the zBuffer in any way spSetZSet(0); spSetZTest(0); //All glory the main loop //every frame the draw_function is called //every frame the calc_function is called with the past time as argument //at least 10 ms have to be between to frames (max 100 fps) //if the window is resized, the resize feedback-function is called (again) spLoop( draw_function, calc_function, 10, NULL, NULL ); //Winter Wrap up, Winter Wrap up spDeleteSprite( sprite ); spDeleteSurface( tile_map ); spQuitCore(); return 0; }
void quit_sprites() { spDeleteSurface(sprites_garfield); spDeleteSurface(sprites_texture); spDeleteSprite(sprite); }
PREFIX spSpriteCollectionPointer spLoadSpriteCollection(char* filename,SDL_Surface* fallback_surface) { SDL_RWops *file = SDL_RWFromFile(filename, "rt"); if (!file) return NULL; spSpriteCollectionPointer collection = spNewSpriteCollection(); //Loading the file line by line int end = 0; spSpritePointer sprite = NULL; char surface_d[1024] = ""; //border default int bw_d = 0; int bh_d = 0; //frame default int fw_d = 0; int fh_d = 0; int fps_d = 0; char sprite_d[1024] = ""; char surface[1024] = ""; int bw = bw_d; int bh = bh_d; int fw = fw_d; int fh = fh_d; int fps = fps_d; while (!end) { char line[512]; end = spReadOneLine(file,line,512); //parsing the line if (line[0] == '#' || line[0] == ';') {} //comment else if (line[0] == '[') //new sprite { int i; for (i = 1; line[i]!=']' && line[i]!=0; i++); line[i] = 0; sprite = spNewSprite(&(line[1])); spAddSpriteToCollection(collection,sprite); sprintf(surface,"%s",surface_d); bw = bw_d; bh = bh_d; fw = fw_d; fh = fh_d; fps = fps_d; } else //some keywords { //searching the '=', ' ' or \0. int i; for (i = 1; line[i]!='=' && line[i]!=' ' && line[i]!=0; i++); if (line[i]==0) //hm, not good... continue; int keyword = 0; if (line[i]=='=') { line[i] = 0; keyword = spSpriteCollectionGetKeyword(line); line[i] = '='; } else // ' ' { line[i] = 0; keyword = spSpriteCollectionGetKeyword(line); line[i] =' '; for (i++;line[i]!='=' && line[i]!=0; i++); if (line[i]==0) //hm, not good... continue; } for (i++;line[i]==' '; i++); char* value = &(line[i]); int j; for (j = strlen(value)-1;value[j]==' ' && j>=0;j--); value[j+1] = 0; int x,y,n; switch (keyword) { case 1: //"default" sprintf(sprite_d,"%s",value); break; case 2: //"image" if (sprite) sprintf(surface,"%s",value); else sprintf(surface_d,"%s",value); break; case 3: //fps if (sprite) fps = atoi(value); else fps_d = atoi(value); break; case 4: //framesize if (sprite) fw = atoi(value); else fw_d = atoi(value); for (i++;line[i]!=',' && line[i]!=0; i++); if (line[i] == 0) continue; value = &(line[i+1]); if (sprite) fh = atoi(value); else fh_d = atoi(value); break; case 5: //bordersize if (sprite) bw = atoi(value); else bw_d = atoi(value); for (i++;line[i]!=',' && line[i]!=0; i++); if (line[i] == 0) continue; value = &(line[i+1]); if (sprite) bh = atoi(value); else bh_d = atoi(value); break; case 6: //frame if (!sprite) break; x = atoi(value); for (i++;line[i]!=',' && line[i]!=0; i++); if (line[i] == 0) continue; value = &(line[i+1]); y = atoi(value); for (i++;line[i]!=',' && line[i]!=0; i++); SDL_Surface* s = spLoadSurface( surface ); if (s == NULL) s = fallback_surface; if (line[i] == 0) spNewSubSpriteWithTiling(sprite,s,x+(bw-fw)/2,y+(bh-fh)/2,fw,fh,1000/(fps>0?fps:1)); else { value = &(line[i+1]); n = atoi(value); if (n > 0) spNewSubSpriteTilingRow(sprite,s,x+(bw-fw)/2,y+(bh-fh)/2,fw,fh,bw,bh,n,1000/(fps>0?fps:1)); } //We loaded the surface one time more, than we will it delete later, so lets decrease the ref counter: spDeleteSurface( s ); break; } } } spSelectSprite(collection,sprite_d); SDL_RWclose(file); return collection; }