[SDL] Performance
-
Hallo,
da ich bei meinem 2D Spiel Wert auf Plattformunabhänhigkeit lege, arbeite ich mit der SDL (http://www.libsdl.org). Das ganze klappt auch ganz gut, allerdings hab ich einige Performanceprobleme. Ich lade ein PNG und Zeichne das dann 500 Mal (Ich denke, so viele Objekte sollen später etwa gezeichnet werden). Im Fenstermodus habe ich dann allerdings nur 11 FPS, im Vollbildmodus nur 1 FPS. Wenn ich das PNG nur 1 mal Zeichne, so habe ich im Fenstermodus 100 FPS und im Vollbildmodus 300 FPS. Wieso ist der Vollbildmodus schneller, wenn ich nur ein Bild zeichne, bei 500 Bildern aber langsamer?
Mein Code ist folgender:
SDL_FillRect(pScreen,0,SDL_MapRGB(pScreen->format,0,0,0) ); for(int i=0;i<500;++i) { SDL_BlitSurface(pBitmap, 0, pScreen, 0); } SDL_Flip(pScreen);
pBitmap ist die geladene PNG (mit Alphatransparenz) und pScreen der Primary Buffer. Dieser Code befindet sich in der "Hauptschleife" unter der Nachrichtenverarbeitung und der FPS-Messung.
Ich hoffe ihr könnt mir helfen und ich bin (wie immer) für alle Antworten dankbar :).
-
Ist eine komische frage aber...
Wenn du ein Bild einmal Zeichnest benötigst du nur einen durchlauf,
bei 500 Bildern aber 500 durchläufe.Wenn ein durchlauf ca. 10ms dauert dann brauchst du für 500 durchläufe
logischerweise 5000ms also 5s.
-
Original erstellt von <Global POSTer>:
Wenn ein durchlauf ca. 10ms dauert dann brauchst du für 500 durchläufe
logischerweise 5000ms also 5s.Nein, so kann man das nicht rechnen.
-
Tja, vielleicht funkt bei vielen Bildern im FS der gute alte VSYNC dazwischen...!?
-
@TGGC:
anstatt du mal hier so klugscheisserrich tust, sag mal lieber wie mans rechnet! Sackgesicht
-
Original erstellt von <Teufel>:
@TGGC:
anstatt du mal hier so klugscheisserrich tust, sag mal lieber wie mans rechnet! SackgesichtWoher soll ich das wissen, dazu muss man die konkrete Softwareimplementation, den Treiber und die Hardware genaustens kennen. Und du bist ja wohl ein viel grösseres S~.
Am VSync kann's eigentlich auch nicht liegen, es sei denn man flipped zwischen jedem blitten (oder wie auch immer SDL das nennt/ macht).
-
@TGGC
Die Rechnung stimmt so oder willst du mir erzählen das 500 Schleifendurchläufe
genauso lange dauern wie 1 Schleifendurchlauf???Ich habe hier nur übertriebene Werte benutzt um den unterschied sichtbar zu
machen.
-
Die Rechnung stimmt so oder willst du mir erzählen das 500 Schleifendurchläufe
genauso lange dauern wie 1 Schleifendurchlauf???Nein, aber er will Dir erzählen, dass ein PC länger zur Berechnung von Daten braucht, die er noch nicht kennt!
-
Cache?