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!
-
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.
-
und ohne ogl ist es auch langsam. ich wuerde an deren stelle ueber ein redesign nachdenken.