État d’enregistrement et de restauration des blocs d’état (Direct3D 9)

Un bloc d’état est un groupe d’états d’appareil. L’état de l’appareil se compose de l’état de rendu, de l’état de vertex, de l’état de pixel ou de l’ensemble des éléments ci-dessus. Un bloc d’état contient une instantané de l’état actuel d’un appareil, ou vous pouvez créer un bloc d’état qui enregistre chaque modification d’état apportée par votre application.

Capturer un bloc d’état

Choisissez le type d’état que vous souhaitez capturer, puis créez un bloc d’état comme suit :

IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock );

IDirect3DDevice9::CreateStateBlock crée un bloc d’état et capture automatiquement l’état de l’appareil. L’état de l’appareil est spécifié par le type de bloc d’état dans le premier argument. Cet état peut être l’un des suivants : état de tous les appareils (voir Enregistrement de tous les états de l’appareil avec un StateBlock (Direct3D 9)), état de tous les pixels (voir Enregistrement de l’état des pixels avec un ÉtatBlock (Direct3D 9)) ou état de tous les sommets (voir Enregistrement des états de vertex avec un stateBlock (Direct3D 9)).

Le système d’effet utilise un bloc d’état pour enregistrer l’état. Une fois qu’ID3DXEffect::Begin est appelé, un bloc d’état est créé et l’état est capturé. Quand ID3DXEffect::End est appelé, l’état du bloc d’état est réapppliqué à l’appareil.

Capturer des états individuels

Pour enregistrer une séquence d’état personnalisée, encapsulez l’état que vous souhaitez enregistrer dans une paire IDirect3DDevice9::BeginStateBlock et IDirect3DDevice9::EndStateBlock . BeginStateBlock indique à l’appareil actuel de configurer un bloc d’état et d’y ajouter chaque changement d’état qui se produit jusqu’à l’appel de EndStateBlock. Voici un exemple :

IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->BeginStateBlock();
pd3dDevice->SetRenderState ( D3DRS_ZENABLE, true );
pd3dDevice->EndStateBlock( &pStateBlock );

Cela permet d’enregistrer n’importe quel nombre de modifications d’état dans n’importe quelle séquence dans un bloc d’état personnalisé. Plus tard, lorsque vous souhaitez utiliser le stateblock pour réinitialiser l’état de l’appareil, appelez IDirect3DStateBlock9::Apply. Cela remplace uniquement l’état de l’appareil qui a été capturé dans le bloc d’état. Tout autre état d’appareil qui n’a pas été capturé avec le bloc d’état personnalisé ne sera pas modifié. Une fois de plus, étant donné que l’objet stateblock est une interface, vous devez le libérer lorsque vous en avez terminé.

États (Direct3D 9)