Partager via


Test ciseaux (Direct3D 9)

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

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

Les rectangles en 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 de 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 le 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, de manière analogue à la réinitialisation de la fenêtre d’affichage. IDirect3DDevice9::SetScissorRect est enregistré par stateblocks et IDirect3DDevice9::CreateStateBlock avec le paramètre all state (D3DSBT_ALL valeur dans D3DSTATEBLOCKTYPE). Le test ciseau affecte également l’opération IDirect3DDevice9::Clear de l’appareil.

// 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 de ciseaux par défaut est la fenêtre d’affichage complète.

Les tests de ciseaux sont effectués 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

Pipeline de pixels