Zustandsblöcke Speichern und Wiederherstellen des Zustands (Direct3D 9)
Ein Zustandsblock ist eine Gruppe von Gerätezuständen. Der Gerätestatus besteht aus Renderzustand, Scheitelpunktzustand, Pixelzustand oder dem gesamten oben genannten Zustand. Ein Zustandsblock enthält eine Momentaufnahme des aktuellen Zustands eines Geräts, oder Sie können einen Zustandsblock erstellen, der jede Zustandsänderung aufzeichnet, die Ihre Anwendung vornimmt.
Erfassen eines Zustandsblocks
Wählen Sie den Zustandstyp aus, den Sie erfassen möchten, und erstellen Sie einen Zustandsblock wie folgt:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock );
IDirect3DDevice9::CreateStateBlock erstellt einen Zustandsblock und erfasst automatisch den Gerätezustand. Der Gerätestatus wird durch den Zustandsblocktyp im ersten Argument angegeben. Dieser Zustand kann einer der folgenden sein: der gesamte Gerätezustand (siehe Speichern aller Gerätezustände mit einem StateBlock (Direct3D 9)), der gesamte Pixelzustand (siehe Speichern des Pixelzustands mit einem StateBlock (Direct3D 9)) oder der gesamte Vertexzustand (siehe Speichern von Vertexzuständen mit einem StateBlock (Direct3D 9)).
Das Effektsystem verwendet einen Zustandsblock, um den Zustand zu speichern. Nachdem ID3DXEffect::Begin aufgerufen wurde, wird ein Zustandsblock erstellt und der Zustand erfasst. Wenn ID3DXEffect::End aufgerufen wird, wird der Zustandsblockzustand erneut auf das Gerät übertragen.
Erfassen einzelner Zustände
Um eine benutzerdefinierte Zustandssequenz zu speichern, umschließen Sie den Zustand, den Sie speichern möchten, in einem IDirect3DDevice9::BeginStateBlock - und IDirect3DDevice9::EndStateBlock-Paar . BeginStateBlock weist das aktuelle Gerät an, einen Zustandsblock einzurichten und jede Zustandsänderung hinzuzufügen, die bis zum Aufruf von EndStateBlock erfolgt. Hier sehen Sie ein Beispiel:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->BeginStateBlock();
pd3dDevice->SetRenderState ( D3DRS_ZENABLE, true );
pd3dDevice->EndStateBlock( &pStateBlock );
Dadurch werden eine beliebige Anzahl von Zustandsänderungen in einer beliebigen Sequenz in einem benutzerdefinierten Zustandsblock gespeichert. Wenn Sie später den Stateblock zum Zurücksetzen des Gerätezustands verwenden möchten, rufen Sie IDirect3DStateBlock9::Apply auf. Dadurch wird nur der Gerätezustand überschrieben, der im Zustandsblock erfasst wurde. Alle anderen Gerätezustände, die nicht mit dem benutzerdefinierten Zustandsblock erfasst wurden, werden nicht geändert. Da es sich beim stateblock-Objekt um eine Schnittstelle handelt, müssen Sie es freigeben, wenn Sie damit fertig sind.
Zugehörige Themen