Es ruckelt (SDL)
-
dreaddy schrieb:
19
20
19
19
59
19
..."Denke damit ist der Verursacher mehr oder weniger klar, irgendwo läuft bei mir ein Prozess der einmal die Sekunde irgendwelchen Müll macht.
ich hatte mal genau dasselbe problem, dort lags an einem falsch installierten treiber und es wurde mit der falschen GL-lib gelinkt.
-
Hm das mit dem Durchscnitt der letzten 10 framezeiten habe ich jetzt mal probiert, anstatt das es ruckelt macht der Char jetzt einmal die Sekunde eine kleine Pause.
Ist zwar auch nicht schön, sieht aber wesentlich besser aus, danke für den Tipp.
Spyware aller Sorten habe ich auch gefunden und gegrillt, das hat aber nichts gebracht.
Sdl-Libs habe ich auch nomma die neuesten gezogen, hat auch nix gebracht und opengl oder so nutze ich nicht sondern nur sdl mit den ganzen dazugehörigen libs wie mixer, gfx, image usw. und von denen habe ich grad überall die neuesten Versionen gesaugt.
Grafikkartentreiber habich eigentlich auch vor kurzem erst aktualisiert hmmm... das gefällt mir immer weniger alles =[Vielleicht sollte ich mir einfach einen neuen Pc kaufen

-
Versuch doch mal rauszufinden, wo genau er einmal die Sekunde die zusätzliche Zeit verbrät.
-
hm ich gehe inzwischen eigentlich davon aus das das irgendwo extern ausserhalb des Spieles und damit jedesmal an unterschiedlicher Stelle passiert, aber ich werde das nochmal nachprüfen.
-
hm das ist interessant, das Zeitproblem entsteht genau beim screens flippen hier:
save_time("vorm flip"); // zeit vorher in Datei speichern SDL_Flip (screen); <--------------------------------- !!!!!!!!!!!!! =[ save_time("ende make_gameframe"); // Zeit nachher in Datei speichern
-
Ich kenne mich mit SDL nicht so aus, aber wird da V-Sync benutzt?
-
-
Ich habe erst gelesen, dass SDL sehr implementierungs-abhängig ist. Bei dem Artikel ging es um Hardware Surfaces und so... könnte also auch an so etwas liegen.
Klingt jedenfalls sehr misteriös... Wenn nicht an deiner Zeitberechnung liegt...
Mich hat das ganze mit den verschiedenen implementierungen gleich so abgeschreckt, dass ich gleich zu sdl+opengl gegriffen hab. Weiß nicht ob dass viel besser ist, aber wurde auch in dem artikel angeraten.
Muss dazusagen, dass ich mit opengl auch schon früher eigentlich keine probleme der sorte hatte. (Weiß aber nicht ob dieser umstieg für dich in frage kommt)
gutes gelingen noch!
mfg Manuel
-
Naja eigentlich bin ich mit SDL bisher sehr zufrieden, nur das das sdl_flip sich irgendwie synchronisiert und dazu teilweise ewig für braucht is recht zum kotzen ^^
Ich mein da steht ja auch "The hardware will wait for vertical retrace, and then swap video buffers before the next video surface blit or lock will return" aber so lange?_?Das in nen extra SDL-Thread zu packen wirds wohl auch nicht bringen, das Bild muss ja fertig sein und auf allen anderen Rechnern läufts ja hmm.
-
Glaub mir du sparst dir extrem viel Ärger und Zeit, wenn du die Zeichenfunktionen immer in einem Thread lässt.
Hast du nen Virenscanner im Hintergrund laufen?
Dass du bei (kommerziellen) Spielen keine Probleme hast kann daran liegen, dass die ihre Prozesspriorität erhöhen (bringt bei dir anscheinend ja auch was).
-
Was soll ich da in einen extra Thread packen?
Ich kann immer nur dann auf dem Bildschirm darstellen wenn ein Frame fertiggezeichnet ist und das Problem ist ja die zeichnen <-> darstellen Synchronisation anscheinend.
Aber die sind halt voneinander abhängig.
-
Versuch doch mal in den Treibereinstellungen den vsync auszuschalten.
-
dreaddy schrieb:
hm das ist interessant, das Zeitproblem entsteht genau beim screens flippen hier:
save_time("vorm flip"); // zeit vorher in Datei speichern SDL_Flip (screen); <--------------------------------- !!!!!!!!!!!!! =[ save_time("ende make_gameframe"); // Zeit nachher in Datei speichernSry wenn ich Stuss erzähle, aber nur mal rein interessehalber: dauert das speichern in eine datei nicht extrem lange? Ich dachte immer solche sachen werden direkt in den Arbeitsspeicher geschrieben

-
Kommt drauf an!
Wenn Du z.B. flush aufrufst, dann wartet er wirklich, bis die Daten geschrieben wurden. Normalerweise werden sie in einen Puffer geschrieben, und wenn der voll ist, wird er auf die Platte geschrieben.
-
hm ok, aber beim nächsten frame werden die Daten denk ich mal ja dann wieder gelesen, bis dahin sind sich doch sicherlich noch nicht auf der hd. Das heist also man kann in den Puffer Daten schreiben und lesen noch bevor die geschriebenen Daten auf der hd gelandet sind. Dann wird so ein Puffer wohl unter anderem dazu verwendet das Programm vor dem völligen Stillstand zu bewahren wenn der ram voll ist. *n00bmäßige Vermutungen anstell* Vielleicht hat er den Puffer zu klein gemacht?
-
vsync deaktivieren bringt nichts, das hatte ich schon mal probeirt, genauso wie so ziemlich an jeder Eisntellung der graka rumzuschrauben.
An save_time oder irgendwlechen Dateischreib/lesaktionen wirds nicht liegen.
Die Methode save_time() schreibt nur die aktuelle Zeit in eine Datei mit dem dazugehörigen String zum debuggen, da wird nix gelesen ausser nachher mit dem Editor.
Und der Effekt war ja auchschon vorher da.
-
Kannst Dir ja mal den SDL Source ziehen, Debug erstellen, und das Problem "weiter innen" debuggen...
-
hm jo, aber nicht kurz vor der Klausurenphase :>