Dirty Rects mit Double/Triple Buffer



  • Hallo,
    ich bin gerade dabei einen neuen Renderer für mein Projekt zu schreiben.
    Ich habe nun aber ein paar kleine Schwerigkeiten :-(.
    Ich arbeite mit SDL 1.2.13 und würde gernde DirtyRects nutzen... mir ist jedoch nicht ganz klar wie ich diese Technik mit Double oder Triplebuffer in einklang bringen kann 🙄

    Hat jemand hier einen Denkanstoß, oder anders, ist das überhaupt möglich?

    Gruß



  • Gleich wie bei nur einem Buffer.
    Jeder Buffer bekommt seine eigene Dirty-Rect Liste.
    Neue Dirty-Rects fügst du in alle Listen ein.
    Und nach dem Updaten eines Buffers leerst du die Liste dieses Buffers.
    -> fertig.



  • sry habe mich etwas unklar ausgedrückt. 😕
    Bei SDL weiß ich ja nicht ob er z.B. Triple-Buffering oder Double-Buffering gerade nutzt. Vieleicht nutzt er gerade auch nur einen Buffer.
    Stellt sich für mich die Frage. Soll ich einfach mal "auf gut Glück" eine Datenstruktur anlegen die glaubt das es sich um 3 Buffer handelt (am alle Fälle einzuschließen), oder habt ihr da eine bessere Idee?



  • Wenn du nicht weisst wieviele Buffer es gint, dann bist du angeschissen.
    Vielleicht wäre die Verwendung einer anderen Library die Lösung...



  • DKing schrieb:

    sry habe mich etwas unklar ausgedrückt. 😕
    Bei SDL weiß ich ja nicht ob er z.B. Triple-Buffering oder Double-Buffering gerade nutzt. Vieleicht nutzt er gerade auch nur einen Buffer.

    Warum weißt du das nicht. Du kannst doch einfach im Bildschirm-Surface nach schauen, ob das Double Buffer Flag gesetzt ist.

    http://www.libsdl.org/cgi/docwiki.cgi/SDL_Surface

    Außerdem initialisierst du die SDL nicht selber? Da kannst du doch wählen, ob du einen Double Buffer haben willst, oder nicht.



  • Da hast du absolut recht. Nur weis ich ja nicht was die Hardware wirklich dahinter macht. Unter Linux z.B. wird der Backbuffer anders verwaltet als unter Win z.B. .Außerdem glaub ich mal irgendwo in einem SDL Thread gelesen zu haben, dass man sich nicht sicher sein kann das die Hardware dahinter nen Triplebuffer drunterschiebt bei angeschalteten VSYNC :-/.
    Genau an dieser Stelle ist dann nähmlich das Problem ... .

    Weis jemand da was zu?



  • Also mit DirectDraw kann man sich 100% sicher sein, soviel weiss ich.
    Was mit Linux etc. ist ... weiss ich nicht.



  • Ich weiß ja nicht, was du genau vor hast. Wofür brauchst du Dirty-Rects denn?

    Vielleicht ein anderer Vorschlag. Leg deinen eigenen Puffer an. Darauf malst du rum, legst dafür deine Dirty-Rects an und blittest dem Kompletten Puffer immer auf den Bildschirm oder auf den Backbuffer vor dem Flip.

    Je nach dem, was du vor hast, könnte das Sinn machen, oder auch nicht.


Anmelden zum Antworten