DirectDraw: Anzeigeprobleme



  • Hallo,

    Ich habe für DirectDraw alles initialisiert. Wenn ich mir den Zeiger auf das PrimarySurface hole, habe ich folgende Schwierigkeiten:

    Wenn ich z.B. nur die ersten 1000 Pixel hellblau setzen will mache ich das:

    //Bis hier wurde alles korrekt initialisiert
    PrimarySurface.Lock(...)
    for (int i=0; i<1000; i++)
        screen[i]=32; 
    PrimarySurface.Unlock(NULL);
    //jetzt folgt MessageLoop...
    

    Leider wird so nichts angezeigt. Wenn ich das in eine Schleife setzte und Message-Loop als Abbruchbedingung habe:

    PrimarySurface.Lock(...);
    while (1)
    {
        for (int i=0; i<1000; i++)
            screen[i]=32;
        //messageLoop diesmal hier ...
    }
    PrimarySurface.Unlock(NULL);
    

    Jetzt wird es angezeigt.
    So jetzt meine Fragen 🙂 :
    Warum wird beim ersten Quellcode nichts angezeigt? ich setzte doch die Farben genauso wie unten? Liegt das an Unlock? sendet das vllt eine Message, die zum neuzeichnen des fensters führt? Wenn ja, um welche Message handelt es sich dabei?

    Zum zweiten Quellcode: Das funktioniert zwar, aber das Ergebnis auf dem BS ist ja immer gleich, deshalb ist es doch sinnlos, das ganze neu zu zeichnen.
    Wie kann ich Mein Surface nur einmal beschreiben, aber dauerhaft anzeigen?

    Vielen Dank im Voraus,

    Ruben Grill



  • DirectDraw ist seit 2 Jahren tod. Wieso nimmt du nicht Direct3D, da hast du später auch noch was von.



  • Weil ich eben mit DirectDraw arbeiten will! Also bitte nur speziell auf meine Fragen antworten, das hilft mir mehr, danke



  • ok, dann geb ich mich eben mal nett 😃

    wenn ich das richtig interpretiere ist deine 'MessageLoop' die Spielschleife, oder?

    Wenn dem so ist musst du alle Zeichen OP's in jedem Frame neu machen, da ALLE alten gelöscht werden. Ich hoffe ich ich konnte dir damit eher helfen 😉 (obwohl natürlich DirectDraw deswegen immer noch tod ist :D)



  • Versuch mal auf den Back-Buffer zu zeichnen statt auf die Primary Surface.
    Anschließend den Back-Buffer in die Primary Surface kopieren (Blt).

    PS: DirectDraw ist nicht tod. Es ist höchstens tot.



  • TomasRiker schrieb:

    PS: DirectDraw ist nicht tod. Es ist höchstens tot.

    Klugscheißer!!!!! (sry, musste aber mal sein)



  • @TomasRiker: Stimmt, wenn ich es zuerst in einen Backbuffer zeichne und dann auf den Primary übertrage, funktioniert es. Eigentlich ist das aber doch nichts anderes als die Daten einfach von einem Speicherbereich in den anderen zu kopieren, warum geht das dann nicht, wenn man das Primary Surface einfach so beschreibt?



  • mit dem PrimarySourface schreibst du direkt auf den Monitor und da die Zeichenfunktionen 'langsam' sind, flimmert das Bild. Es ist aber schneller 2 Surfaces ineinander zu kopieren, deshalb führt man die ZeichenOP's in nem temp. Buffer dem Backbuffer durch.

    Es ist also sowieso Mist, wenn du in die PrimarySurface schreibst.


Anmelden zum Antworten