Freigeben über


Scherentest (Direct3D 9)

Die Schere testet Pixel außerhalb des Scherenrechtecks, einem benutzerdefinierten rechteckigen Unterabschnitt des Renderziels.

Das Scherenrechteck könnte verwendet werden, um den Bereich des Renderziels anzugeben, in dem die Spielwelt gezeichnet wird. Der Bereich außerhalb des Rechtecks wird gekullt und könnte der GUI eines Spiels gewidmet werden. Der Scherentest kann keine nicht rechteckigen Bereiche ausräumen.

Scherenrechtecke können nicht größer als das Renderziel festgelegt werden, aber sie können größer als der Viewport festgelegt werden.

Das Scherenrechteck wird von einem Geräterenderungszustand verwaltet. Ein Scherentest ist aktiviert oder deaktiviert, indem der Renderstatus auf TRUE oder FALSE-festgelegt wird. Dieser Test wird ausgeführt, nachdem die Fragmentfarbe berechnet wurde, aber vor Alphatests. IDirect3DDevice9::SetRenderTarget setzt das Scherenrechteck auf das vollständige Renderziel zurück, analog zum Viewport zurücksetzen. IDirect3DDevice9::SetScissorRect wird von Zustandsblocks aufgezeichnet, und IDirect3DDevice9::CreateStateBlock mit der Einstellung für den gesamten Zustand (D3DSBT_ALL Wert in D3DSTATEBLOCKTYPE). Der Scherentest wirkt sich auch auf das Gerät IDirect3DDevice9::Clear-Vorgang 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 Scherenrechteck ist der vollständige Viewport.

Scissor-Tests erfolgen direkt nach Abschluss der Pixelverarbeitung durch einen Pixelshader oder die Pipeline mit fester Funktion, wie im folgenden Diagramm dargestellt.

Diagramm der Durchführung von Scherentests relativ zu anderen Schritten

Pixelpipeline-