Compartilhar via


Estado blocos salvar e restaurar estado (Direct3D 9)

Um bloco de estado é um grupo de estados do dispositivo. O estado do dispositivo é composto de estado de renderização, estado de vértice, estado de pixel ou todos os itens acima. Um bloco de estado contém uma instantâneo do estado atual de um dispositivo ou você pode criar um bloco de estado que registra cada alteração de estado que seu aplicativo faz.

Capturar um bloco de estado

Escolha o tipo de estado que você deseja capturar e crie um bloco de estado como este:

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

IDirect3DDevice9::CreateStateBlock cria um bloco de estado e captura automaticamente o estado do dispositivo. O estado do dispositivo é especificado pelo tipo de bloco de estado no primeiro argumento. Esse estado pode ser um dos seguintes: todo o estado do dispositivo (consulte Salvando todos os estados do dispositivo com um StateBlock (Direct3D 9)), todo o estado de pixel (consulte Salvando o estado do pixel com um StateBlock (Direct3D 9)) ou todo o estado do vértice (consulte Salvando estados de vértice com um StateBlock (Direct3D 9)).

O sistema de efeito usa um bloco de estado para salvar o estado. Depois que ID3DXEffect::Begin é chamado, um bloco de estado é criado e o estado é capturado. Quando ID3DXEffect::End é chamado, o estado do bloco de estado é reaplicado ao dispositivo.

Capturar estados individuais

Para salvar uma sequência de estado personalizada, encapsule o estado que você deseja salvar em um par IDirect3DDevice9::BeginStateBlock e IDirect3DDevice9::EndStateBlock . BeginStateBlock informa ao dispositivo atual para configurar um bloco de estado e adicionar a ele todas as alterações de estado que ocorrem até que EndStateBlock seja chamado. Veja um exemplo:

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

Isso salvará qualquer número de alterações de estado em qualquer sequência em um bloco de estado personalizado. Posteriormente, quando você quiser usar o stateblock para redefinir o estado do dispositivo, chame IDirect3DStateBlock9::Apply. Isso substituirá apenas o estado do dispositivo que foi capturado no bloco de estado. Qualquer outro estado do dispositivo que não foi capturado com o stateblock personalizado não será alterado. Mais uma vez, como o objeto stateblock é uma interface, você precisará liberá-lo quando terminar de usá-lo.

Estados (Direct3D 9)