Teste de tesoura (Direct3D 9)

O teste de tesoura corta pixels que estão fora do retângulo de tesoura, uma subescasão retangular definida pelo usuário do destino de renderização.

O retângulo de tesoura pode ser usado para indicar a área do destino 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.

Retângulos de tesoura não podem ser definidos maiores que o destino de renderização, mas podem ser definidos maiores que o visor.

O retângulo de tesoura é gerenciado por um estado de renderização do dispositivo. Um teste de tesoura está habilitado ou desabilitado definindo o renderstate como TRUE ou FALSE. Esse teste é executado depois que a cor do fragmento é computada, mas antes do teste alfa. IDirect3DDevice9::SetRenderTarget redefine o retângulo de tesoura para o destino de renderização completo, análogo à redefinição do visor. IDirect3DDevice9::SetScissorRect é registrado por stateblocks e IDirect3DDevice9::CreateStateBlock com a configuração de todo o estado (D3DSBT_ALL valor em D3DSTATEBLOCKTYPE). O teste de tesoura também afeta a operação IDirect3DDevice9::Clear do dispositivo.

// 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.

diagrama de quando o teste de tesoura é executado em relação a outras etapas

Pixel Pipeline