Es ruckelt (SDL)



  • 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 speichern
    

    Sry 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 :>


Anmelden zum Antworten