Scissor-Test (Direct3D 9)
Der Scissor-Test zullt Pixel, die sich außerhalb des Scissor-Rechtecks befinden, einem benutzerdefinierten rechteckigen Unterabschnitt des Renderziels.
Das Scissor-Rechteck kann verwendet werden, um den Bereich des Renderziels anzugeben, in dem die Spielwelt gezeichnet wird. Der Bereich außerhalb des Rechtecks wird gecullt und kann der GRAFISCHEN Benutzeroberfläche eines Spiels widmen. Der Scissor-Test kann nicht rechteckige Bereiche nicht cullen.
Scissor-Rechtecke können nicht größer als das Renderziel, aber größer als der Viewport festgelegt werden.
Das Scissor-Rechteck wird von einem Geräterenderingzustand verwaltet. Ein Scissor-Test wird aktiviert oder deaktiviert, indem der Renderzustand auf TRUE oder FALSE festgelegt wird. Dieser Test wird ausgeführt, nachdem die Fragmentfarbe berechnet wurde, aber vor dem Alphatest. IDirect3DDevice9::SetRenderTarget setzt das Scissor-Rechteck analog zum Zurücksetzen des Viewports auf das vollständige Renderziel zurück. IDirect3DDevice9::SetScissorRect wird von stateblocks aufgezeichnet, und IDirect3DDevice9::CreateStateBlock mit der Einstellung all state (D3DSBT _ ALL-Wert in D3DSTATEBLOCKTYPE). Der Scissor-Test wirkt sich auch auf den IDirect3DDevice9::Clear-Vorgang des Geräts aus.
// 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;
Das Standardmäßige Scissor-Rechteck ist der vollständige Viewport.
Scissor-Tests werden direkt nach Abschluss der Pixelverarbeitung durch einen Pixel-Shader oder die Feste Funktionspipeline durchgeführt, wie im folgenden Diagramm dargestellt.
