Estado de guardado y restauración de bloques de estado (Direct3D 9)

Un bloque de estado es un grupo de estados de dispositivo. El estado del dispositivo se compone de estado de representación, estado de vértice, estado de píxel o todo lo anterior. Un bloque de estado contiene una instantánea del estado actual de un dispositivo o puede crear un bloque de estado que registre cada cambio de estado que realiza la aplicación.

Capturar un bloque de estado

Elija el tipo de estado que desea capturar y cree un bloque de estado como este:

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

IDirect3DDevice9::CreateStateBlock crea un bloque de estado y captura automáticamente el estado del dispositivo. El estado del dispositivo lo especifica el tipo de bloque de estado en el primer argumento. Este estado puede ser uno de los siguientes: todo el estado del dispositivo (consulta Guardar todos los estados de dispositivo con un StateBlock (Direct3D 9)), todo el estado de píxel (consulta Guardar estado de píxel con un stateBlock (Direct3D 9)) o todo el estado de vértice (consulta Guardar estados de vértice con un stateBlock (Direct3D 9)).

El sistema de efectos usa un bloque de estado para guardar el estado. Después de llamar a ID3DXEffect::Begin , se crea un bloque de estado y se captura el estado. Cuando se llama a ID3DXEffect::End , el estado del bloque de estado se vuelve a aplicar al dispositivo.

Capturar estados individuales

Para guardar una secuencia de estado personalizada, ajuste el estado que desea guardar en un par IDirect3DDevice9::BeginStateBlock e IDirect3DDevice9::EndStateBlock . BeginStateBlock indica al dispositivo actual que configure un bloque de estado y agréguele todos los cambios de estado que se produzcan hasta que se llame a EndStateBlock. Este es un ejemplo:

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

Esto guardará cualquier número de cambios de estado en cualquier secuencia en un bloque de estado personalizado. Más adelante, cuando quieras usar el bloque de estado para restablecer el estado del dispositivo, llama a IDirect3DStateBlock9::Apply. Esto sobrescribirá solo el estado del dispositivo que se ha capturado en el bloque de estado. No se cambiará ningún otro estado de dispositivo que no se haya capturado con el bloque de estado personalizado. Una vez más, dado que el objeto stateblock es una interfaz, deberá liberarlo cuando haya terminado con él.

Estados (Direct3D 9)