Flags zusammensetzen



  • Hallo, ich hatte erst angenommen das ich einen Fehler im Code habe. Doch im C-Forum hat man mir gesagt das es rein Syntax technisch ok ist.

    API : DIRECTX 7

    [cpp]
    int Clear(int flag)
    {
    DWORD dwflag=0;

    if(flag&COLOR_BUFFER_BIT)
    dwflag|=D3DCLEAR_TARGET;

    if(flag&DEPTH_BUFFER_BIT)
    dwflag|=D3DCLEAR_ZBUFFER;

    if(lpDevice->Clear(0,NULL,dwflag,dwcolor,dvZ,0)!=D3D_OK)
    return ERROR_DEVICE;
    return OK;
    }[/cpp]

    Das Flag in der Methode Clear von lpDevice ist als DWORD definiert. Danch müsste es doch möglich sein es auch so wie oben zusammenzusetzen?

    Ich schreibe die Frage mal hier rein weil es jetzt mehr um DirectX geht?

    [ Dieser Beitrag wurde am 12.03.2003 um 15:42 Uhr von Netzwerk-Latenz editiert. ]



  • Was ist das Problem?



  • Also. Wenn ich die Funktion Clear() aufrufe, soll je nach dem welches Flag gesetzt wurde, der Z-Buffer oder nur der Hintergrund oder beide gelöscht werden.

    Clear(COLOR_BUFFER_BIT); // Hintergrund löschen.
    Clear(DEPTH_BUFFER_BIT); // Z-Buffer löschen.
    Clear(DEPTH_BUFFER_BIT|COLOR_BUFFER_BIT) // Beide löschen.

    Doch es löscht den Hintergrund nicht? (Z-Buffer kann ich noch nicht sagen. Noch nicht implementiert). Also er setzt das Flag nicht richtig 😕



  • Original erstellt von Netzwerk-Latenz:
    **Also. Wenn ich die Funktion Clear() aufrufe, soll je nach dem welches Flag gesetzt wurde, der Z-Buffer oder nur der Hintergrund oder beide gelöscht werden.

    Clear(COLOR_BUFFER_BIT); // Hintergrund löschen.
    Clear(DEPTH_BUFFER_BIT); // Z-Buffer löschen.
    Clear(DEPTH_BUFFER_BIT|COLOR_BUFFER_BIT) // Beide löschen.

    Doch es löscht den Hintergrund nicht? (Z-Buffer kann ich noch nicht sagen. Noch nicht implementiert). Also er setzt das Flag nicht richtig 😕**

    Als was ist COLOR_BUFFER_BIT und DEPTH_BUFFER_BIT definiert? Werden immer die richtigen Bedingungen ausgeführt?



  • Das verstehe ich jetzt nicht.

    Ich wollte den Bereich ab 0x0002BC dafür benützen

    #define COLOR_BUFFER_BIT 0x0002BC
    #define DEPTH_BUFFER_BIT 0x0002BD

    Das geht aber nicht

    Wenn ich die Werte ändere

    #define COLOR_BUFFER_BIT 0x000001
    #define DEPTH_BUFFER_BIT 0x000002

    oder

    #define COLOR_BUFFER_BIT 0x000009
    #define DEPTH_BUFFER_BIT 0x000010

    geht es.

    Kann man Flags nur im 8Bit Bereich benutzen?



  • omg

    Lern erste wie diese binäre Arithmetik funktioniert, dann können wir nochmal drüber reden.





  • Flag heißt ja dass nur eine Stelle des 32Bit Blocks beachtet werden soll (oder so) und deßhalb solltest Du auch nur Zahlen nehmen die binär nur eine 1 drin haben, also 1, 2, 4, 8, 16...2147483648



  • Ach so geht das 🙂

    2BC = 1010111100
    2BD = 1010111101
    ----------------
    2BD = 1010111101 -> GEHT NICHT

    400 = 100000000000
    800 = 10000000000
    ------------------
    C00 = 110000000000 -> SO GEHT ES

    Naja ich habe erst vor ein paar Monaten mit der Programmierung begonne 😃 Das werde ich schon lernen.

    [ Dieser Beitrag wurde am 12.03.2003 um 19:04 Uhr von Netzwerk-Latenz editiert. ]


Anmelden zum Antworten