Partilhar via


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.

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

Pipeline de Pixel