Teste de tesoura (Direct3D 9)
O teste de tesoura elimina pixels que estão fora do retângulo de tesoura, uma subseção retangular definida pelo usuário do destino de renderização.
O retângulo de tesoura pode ser usado para indicar a área do alvo de renderização onde o mundo do jogo é desenhado. A área fora do retângulo é abatida e pode ser dedicada à GUI de um jogo. O teste de tesoura não pode abater áreas não retangulares.
Os retângulos de tesoura não podem ser definidos maiores do que o destino de renderização, mas podem ser definidos maiores do que o visor.
O retângulo de tesoura é gerenciado por um estado de renderização do dispositivo. Um teste de tesoura é habilitado ou desabilitado definindo o renderstate como TRUE ou FALSE. Este teste é realizado depois que a cor do fragmento é calculada, mas antes do teste alfa. IDirect3DDevice9::SetRenderTarget redefine o retângulo de tesoura para o destino de renderização completo, análogo à redefinição da janela de visualização. IDirect3DDevice9::SetScissorRect é registrado por stateblocks e IDirect3DDevice9::CreateStateBlock com a configuração all state (valor D3DSBT_ALL em D3DSTATEBLOCKTYPE). O teste de tesoura também afeta o dispositivo IDirect3DDevice9::Limpar operação.
// Methods
HRESULT IDirect3DDevice9::SetScissorRect(CONST RECT* pRect);
HRESULT IDirect3DDevice9::GetScissorRect(RECT* pRect);
// New RenderState, values are TRUE or FALSE
D3DRS_SCISSORTESTENABLE
// New hardware cap
D3D9CAPS.RasterCaps -> D3DPRASTERCAPS_SCISSORTEST;
O retângulo de tesoura padrão é o visor completo.
O teste de tesoura é feito logo após o processamento de pixels ser concluído por um sombreador de pixel ou pelo pipeline de função fixa, conforme mostrado no diagrama a seguir.
Tópicos relacionados