Partager via


Test scissor (Direct3D 9)

Le test ciseaux teste les pixels qui se trouvent en dehors du rectangle ciseaux, une sous-section rectangulaire définie par l’utilisateur de la cible de rendu.

Le rectangle ciseaux peut être utilisé pour indiquer la zone de la cible de rendu où le monde du jeu est dessiné. La zone en dehors du rectangle est abattue et peut être consacrée à l’interface utilisateur graphique d’un jeu. Le test ciseaux ne peut pas culler des zones non rectangulaires.

Les rectangles de ciseaux ne peuvent pas être définis plus grands que la cible de rendu, mais ils peuvent être définis plus grands que la fenêtre d’affichage.

Le rectangle ciseaux est géré par un état de rendu d’appareil. Un test de ciseaux est activé ou désactivé en définissant l’état de rendu sur TRUE ou FALSE. Ce test est effectué après la calcul de la couleur du fragment, mais avant le test alpha. IDirect3DDevice9 ::SetRenderTarget réinitialise le rectangle de ciseaux à la cible de rendu complète, analogue à la réinitialisation de la fenêtre d’affichage. IDirect3DDevice9 ::SetScisorRect est enregistré par des blocs d’état et IDirect3DDevice9 ::CreateStateBlock avec le paramètre d’état (valeur D3DSBT_ALL dans D3DSTATEBLOCKTYPE). Le test ciseaux affecte également l’appareil 'opération IDirect3DDevice9 ::Clear.

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

Le rectangle ciseaux par défaut est la fenêtre d’affichage complète.

Le test scissor est effectué juste après le traitement des pixels par un nuanceur de pixels ou le pipeline de fonction fixe, comme illustré dans le diagramme suivant.

diagramme du moment où le test de ciseaux est effectué par rapport à d’autres étapes

de pipeline de pixels