SDL Framelimit
-
So, habe nun mal:
Sleep(20);
eingesetzt!Was ich dazu sagen kann ist:
OPTIMALE LÖSUNG
Systemlast von 90%-100%
auf 25%-35%Folge:
Man kann im System arbeiten während das Programm läuft.
Tasteneingaben etc. werden immer noch optimal verarbeitet.
Thx, manchmal sinds die kleinen Befehle im Leben^^mfg
DKing
-
Nur als Anmerkung:
Du hast da jetzt kein Frame Based Rendering. Ohne Vorkehrungen wird dein Programm auf anderen Rechnern (schnellere oder langsamere) unterschiedlich laufen.
-
Sleep()? Pfui! SDL soll doch auf verschiedenene Plattformen laufen. Deswegen gibt es SDL_Delay()! Das ist sicherlich nicht schlechter als Sleep() und läuft auf allen Plattformen, auf denen SDL allgemein läuft.
geloeschtEDIT: vsync ist nicht böse. Und auch mit vsync kann man nur 50 fps haben. Man kann nur nicht mehr fps haben, als der Monitor hergibt, weil das keinen Sinn macht.
-
Ja aber wie lääst sich das mit SDL realisieren die FPS auf 50 bzw weniger zuschrauben???
Ich will Systemleistung haben
Wenn es nicht eleganter geht, muss ich wohl SDL_Delay nehmen
-
SDL_Delay() ist doch elegant! Wenn sich nichts verändert, solange der User keine Eingaben macht wäre SDL_WaitEvent() noch interessant. Statt wie SDL_PollEvents() aktiv auf Nachrichten zu warten, wartet diese Funktion passiv. Aber nachdem du von FPS sprichst, denke ich nicht, dass das funktioniert. Von Threads will ich erst garnicht reden...
geloeschtEDIT: Sry, PeepEvents mit WaitEvent verwechselt!
-
Du sagst es ^^, nur ne feste Framezahl währe besser, weil das ganze sonst auf verschiedenen Systemen unterschiedlich schnell läuft.
-
interpreter schrieb:
Nur als Anmerkung:
Du hast da jetzt kein Frame Based Rendering. Ohne Vorkehrungen wird dein Programm auf anderen Rechnern (schnellere oder langsamere) unterschiedlich laufen.Aber das ist ja unabhaengig davon, ob er jetzt SDL_Delay() (oder Sleep()) verwendet oder nicht. D.h. wenn das Programm vorher schon das Probleme hatte, wirds auch nachher das Problem haben & wenn nicht, dann nicht.
@DKing: IIRC gibs im FAQ einen Eintrag zu "Framerate unabhaengiger Bewegung" (oder so aehnlich), schau dir den mal dazu an

-
Blue-Tiger schrieb:
interpreter schrieb:
Nur als Anmerkung:
Du hast da jetzt kein Frame Based Rendering. Ohne Vorkehrungen wird dein Programm auf anderen Rechnern (schnellere oder langsamere) unterschiedlich laufen.Aber das ist ja unabhaengig davon, ob er jetzt SDL_Delay() (oder Sleep()) verwendet oder nicht. D.h. wenn das Programm vorher schon das Probleme hatte, wirds auch nachher das Problem haben & wenn nicht, dann nicht.
@DKing: IIRC gibs im FAQ einen Eintrag zu "Framerate unabhaengiger Bewegung" (oder so aehnlich), schau dir den mal dazu an

Ich wollte damit unterstreichen, dass er eben nicht das hat, was er ursprünglich wollte: Eine feste Anzahl fps.
-
DKing schrieb:
Ja aber wie lääst sich das mit SDL realisieren die FPS auf 50 bzw weniger zuschrauben???
Ich will Systemleistung haben
Wenn es nicht eleganter geht, muss ich wohl SDL_Delay nehmen
ne framebremse in sdl sieht so aus:
//... initialisierungen etc... int framebreak; while(mainloopistan) { framebreak=SDL_GetTicks(); //...hier alle sachen die du in der main loop machen willst, die anwendung halt.. //und am ende der schleife: while((SDL_GetTicks()-freambreak)</*ein wert,hier 30*/ 30) { //Hier passiert nichts } }
-
Für feste Logikschritte habe ich kürzlich ein Codeschnipsel gepostet. Einfach mal suchen (NEIN! nicht die Boardsuche, von Hand... leider). Zu relativer Bewegung in die FAQ schauen.
geloescht
-
SDL_Ticks():
Get the number of milliseconds since the SDL library initialization. Note that this value wraps if the program runs for more than ~49 days.Bist du sicher das dein Code funktioniert?
-
also mit GetTickCount() von windows.h funktioniert es. ich nehme mal an dass die funktionen die selbe ""funktion"" haben

-
Glückwunsch. Jetzt seid ihr auch da angekommen, wo ich bereits mit meinem 1. Posting war

-
Wie schon gesagt, ohne eine Möglichkeit zu warten (WaitForSingleObject, Sleep, ...) ist das aber völliger Schwachsinn.
Dann wird zwar nur mit max. XX fps gerendert, die restliche Zeit wird aber trotzdem von der CPU für die Endlosschleife verbraten.
Dann kann man auch lieber wie wild durchrendern... hat man mehr von.BTW: @Fensteranwendung: Wenn das kein Game (bzw. Software mit ähnlichen Interaktionsmöglichkeiten) ist, sondern nur ein Modelviewer oder sowas, wär's sicher schlauer nur bei PAINT-Events überhaupt neu zu zeichnen bzw. solange sich nichts ändert.
-
Sgt. Nukem schrieb:
Dann wird zwar nur mit max. XX fps gerendert, die restliche Zeit wird aber trotzdem von der CPU für die Endlosschleife verbraten.
Dann kann man auch lieber wie wild durchrendern... hat man mehr von.Dann hab ich nicht mehr xx fps.
-
interpreter schrieb:
Sgt. Nukem schrieb:
Dann wird zwar nur mit max. XX fps gerendert, die restliche Zeit wird aber trotzdem von der CPU für die Endlosschleife verbraten.
Dann kann man auch lieber wie wild durchrendern... hat man mehr von.Time based rendering und frame based rendering sind unterschiedliche Sachen.
LOL, dann verbrate ich halt nach jedem Renderdurchgang drölfzig Trillionen CPU-Cycles, bis wieder 30 msec um sind...

-
Zuletzt bearbeitet schrieb:
Sgt. Nukem schrieb:
Dann wird zwar nur mit max. XX fps gerendert, die restliche Zeit wird aber trotzdem von der CPU für die Endlosschleife verbraten.
Dann kann man auch lieber wie wild durchrendern... hat man mehr von.Dann hab ich nicht mehr xx fps.
Höh?!

-
rapso schrieb:
sleep sorgt nicht dafür dass der cpu irgendwas mitgeteilt wird, sondern lediglich dafür dass für die angegebene zeit dein prozess keine rechenzeit bekommt.
Eben, darum geht es ja mit Sleep auch nicht.
Bye, TGGC (Das Jahr des Helden)
-
Sgt. Nukem schrieb:
interpreter schrieb:
Sgt. Nukem schrieb:
Dann wird zwar nur mit max. XX fps gerendert, die restliche Zeit wird aber trotzdem von der CPU für die Endlosschleife verbraten.
Dann kann man auch lieber wie wild durchrendern... hat man mehr von.Time based rendering und frame based rendering sind unterschiedliche Sachen.
LOL, dann verbrate ich halt nach jedem Renderdurchgang drölfzig Trillionen CPU-Cycles, bis wieder 30 msec um sind...

Wenn ich Frame Based Rendering benötige und mir andere Programme egal sind (was bei Spielen im Vollbildmodus meistens der Fall ist): Ja.
-
Wie hast du btw per sdl vsync ausgestellt?
