Direct3D 9 für Offscreen Rendering



  • Hallo,
    ich möchte 3D-Grafiken rendern, die nicht auf dem Bildschirm angezeigt werden, sondern in einer Textur gespeichert werden. Das heißt, ich brauche keinen Backbuffer oder ein Fenster für das zu erstellende Device. Das Problem ist, dass man bei IDirect3D9::CreateDevice aber ein Fenster angeben muss, damit die Funktion erfolgreich ist. Wenn ich den Wert für hDeviceWindow auf GetDesktopWindow() setze, lässt sich das Device zwar erstellen, aber besonders schön ist das ja nicht.
    Gibt es einen "offiziellen" Weg für ein Device ohne Fenster?

    Vielen Dank schonmal im Voraus!



  • Du kannst dein Device mit einem kleinen "Dummy-Fenster" erstellen. Das muss nichtmal sichtbar sein. Funktioniert einwandfrei.



  • Super, vielen Dank. Funktioniert genau so, wie ich mir das vorgestellt habe.
    Aber leider tritt dann schon das nächste Problem auf. Mein Programm rendert jetzt die Grafik in ein Rendertarget-Surface (D3DXCreateRenderToSurface).

    pRenderSurface->BeginScene(pSurface, NULL);
    pDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0xFFFFFFFF, 0.0f, 0);
    
    // DrawPrimitive ...
    
    pRenderSurface->EndScene(D3DX_FILTER_NONE);
    

    Wenn ich aber, während mein Programm rendert, ein anderes Direct3D-Programm im Vollbild starte und dieses wieder beende, dann ändert Vista das Farbschema in "Basic", bis mein Programm beendet wird.
    Leider konnte ich im MSDN nicht herausfinden, wann Vista das Farbschema von Aero auf Basic zurücksetzt. Welche Ursachen könnte das haben?



  • pfuh
    da kann ich leider garnicht weiterhelfen


Anmelden zum Antworten