SDL 2D game <-- performance/frames steigern



  • hallo,

    ich schreibe gerade ein SDL-2D-Game und komme soweit auch gut klar.
    allerdings würde ich mich gerne nach ein par performance-ratschlägen erkundigen!

    meine SDL initialisierung:

    Uint32 screenFlags = SDL_SWSURFACE;
    	window = SDL_SetVideoMode(VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_BIT, screenFlags);
    

    meine main-loop schaut so aus:

    while(running)
    	{
    		// Zeitberechnung
    		delta_frametime();
    
    		// Event-Handling
            events_check();
    
    		// Background
    		if(Level.background_image)
    			SDL_BlitSurface(Level.image, NULL, window, &Level.rect);
    		else
    			SDL_FillRect(window, &Level.rect, tmp_color);
    
    		// Objects
    		Level.objects_process(frame_delta,window);
    
    		// Screenmovement
    		Level.screen_movement();
    
    		// Text
    		textout_debug();
    
    		// framcounter
    		frame_counter();
    
    		// player-console
    		PlayerConsole.draw(window, Level.Objects, Level.player_id);
    
    		//SDL_UpdateRect(window,0,0,0,0);
    		SDL_Flip(window);
    	}
    

    ich kann nach meinen tests erkennen das SDL_Flip() 4-5 mehr frames raushaut als
    SDL_UpdateRect().

    allg. erhalte ich sehr viel mehr frames wenn ich kein hintergrundbild sondern
    nur ein farbiges Rect zeichne.

    was könnte man noch machen um mehr frames herrauszubekommen und die
    performance zu steigern?

    danke euch schonmal!


  • Mod

    soviel raushauen wie moeglich. je weniger zu zeichnest (wie auch in deinem beispiel gesagt) desto besser die fps.



  • wäre eine verwendung von SDL_HWSURFACE nicht besser?



  • wäre eine verwendung von SDL_HWSURFACE nicht besser?

    Das waere auch mein Gedanke.

    Ansonsten noch alle Surfaces mit SDL_DisplayFormat in das Anzeigeformat konvertieren. Damit sollte das Blitten unter Umstaenden sehr viel schneller laufen.

    Ansonsten evtl. auf OpenGL umsteigen (SDL nur fuer Event-Handling und Fenstererstellung) 🙂



  • ich würde SDL_HWSURFACE empfehlen, weil du damit sehr viel Leistung rausholen kannst 😉



  • danke, bin nun aber auf sdl+opengl umgestiegen...
    lohnt sich 😉



  • babelduo schrieb:

    danke, bin nun aber auf sdl+opengl umgestiegen...
    lohnt sich 😉

    ja finde ich auch, aber warum SDL in der implementierung nicht auf OpenGL Zugreift verstehe ich nicht so ganz, dass würde dem ganzen doch einen riesigen Schritt performance verleigen. Aber ich bin ja kein SDL entwickler.



  • Wahrscheinlich weil sich das Interface der SDL nicht wirklich gut mit OpenGL implementieren lässt. Bzw. weil in SDL "übliche Praktiken" mit einer OpenGL Implementierung recht langsam wären.


  • Mod

    und ohne ogl ist es auch langsam. ich wuerde an deren stelle ueber ein redesign nachdenken.


Anmelden zum Antworten