Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Statusblock ist eine Gruppe von Gerätezuständen. Der Gerätezustand besteht aus Renderzustand, Vertexzustand, Pixelzustand oder allen oben genannten. Ein Statusblock enthält eine Momentaufnahme des aktuellen Zustands eines Geräts, oder Sie können einen Zustandsblock erstellen, der jede Von Ihrer Anwendung ausgeführte Zustandsänderung aufzeichnet.
Erfassen eines Zustandsblocks
Wählen Sie den Typ des Zu erfassenden Zustands aus, 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: alle Gerätezustände (siehe Speichern aller Gerätezustände mit einem StateBlock (Direct3D 9)), alle Pixelzustände (siehe Speichern des Pixelzustands mit einem StateBlock (Direct3D 9)) oder alle Vertexzustände (siehe Speichern von Vertexzuständen mit einem StateBlock (Direct3D 9)).
Das Effektsystem verwendet einen Zustandsblock zum Speichern des Zustands. Nachdem ID3DXEffect::Begin aufgerufen wurde, wird ein Statusblock erstellt und der Zustand erfasst. Wenn ID3DXEffect::End aufgerufen wird, wird der Statusblockstatus erneut auf das Gerät angewendet.
Erfassen einzelner Zustände
Um eine benutzerdefinierte Zustandssequenz zu speichern, umschließen Sie den Zustand, den Sie in einem IDirect3DDevice9::BeginStateBlock- und IDirect3DDevice9::EndStateBlock Paar speichern möchten. BeginStateBlock teilt dem aktuellen Gerät mit, einen Zustandsblock einzurichten und ihm alle Zustandsänderungen hinzuzufügen, die bis zum Aufruf von EndStateBlock auftreten. Hier ist ein Beispiel:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->BeginStateBlock();
pd3dDevice->SetRenderState ( D3DRS_ZENABLE, true );
pd3dDevice->EndStateBlock( &pStateBlock );
Dadurch werden beliebig viele Zustandsänderungen in einer beliebigen Sequenz in einem benutzerdefinierten Zustandsblock gespeichert. Wenn Sie später den Zustandsblock verwenden möchten, um den Gerätezustand zurückzusetzen, rufen Sie IDirect3DStateBlock9::Applyauf. 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 bei dem Stateblock-Objekt um eine Schnittstelle handelt, müssen Sie es freigeben, wenn Sie damit fertig sind.
Verwandte Themen