Vsync selbst gemacht



  • Hi, ich hätte mal wieder ne Frage.
    Bei meinem 2d-Spiel will ich eine konstante Framerate vorgeben (ca. 30 fps). Nun entstehen aber aufgrund der 60Hz meines Flachbildschirms Ruckler in einem bestimmten Takt (z.b. beim scrollen über die Map). Ich habe versucht in einer Sekunde verschieden lange Frames anzeigen zu lassen (10 x 31ms + 23 x 30ms = 1000ms) allerdings scheitert es daran, dass ich mit SDL_GetTicks() nur Angaben auf die Milisekunde genaue bekomme, ebenso akzeptiert Sleep() nur ganze Milisekunden. Durch das Runden geht meine Synchronistion flöten. Wie könnte ich denn so ein Vsync zum funktionieren bringen? Für meine Grafik verwende ich SDL.
    Schonmal danke!


  • Mod

    du liest mit get ticks die zeit aus, wenn du >16.6ms vom letzten flip bist, machst du einen neuen flip, dann kuemmern sich der regulaere vsync darum dass du bei 33ms flipst, falls du <16ms am flip ankommst, kannst du in nem loop sleepen, code technisch in etwa

    while(GetTick()-LastTick()<17ms)
    {
    Sleep();
    }
    Swap();
    


  • rapso schrieb:

    du liest mit get ticks die zeit aus

    meinst du SDL_GetTicks()? Damit bekomm ich nur ganze Milisekunden, keine Kommastellen.

    rapso schrieb:

    dann kuemmern sich der regulaere vsync darum

    welche reguläre vsync? Hat SDL sowas? Kenn mich nicht so gut aus damit.

    rapso schrieb:

    kannst du in nem loop sleepen

    sleep akzeptiert doch auch nur ganze Milisekunden, oder nicht?


  • Mod

    Knobbers schrieb:

    rapso schrieb:

    du liest mit get ticks die zeit aus

    meinst du SDL_GetTicks()? Damit bekomm ich nur ganze Milisekunden, keine Kommastellen.

    hast du ein glueck dass du auch nur auf 33ms genaue timmings brauchst.

    Knobbers schrieb:

    rapso schrieb:

    dann kuemmern sich der regulaere vsync darum

    welche reguläre vsync? Hat SDL sowas? Kenn mich nicht so gut aus damit.

    nie mit sdl gearbeitet, du wirst wohl selbst die doku lesen muessen wie das bei sdl geht.

    Knobbers schrieb:

    rapso schrieb:

    kannst du in nem loop sleepen

    sleep akzeptiert doch auch nur ganze Milisekunden, oder nicht?

    von mir aus kannst du das sleep aus der schleife weglassen wenn es dir zu ungenau ist, das aendert an dem 30fps vsync den zu haben willst nichts. ansonsten uebergibst du 0 als zeit.


Anmelden zum Antworten