剪刀测试 (Direct3D 9)

剪刀测试剔除剪刀矩形(呈现目标的用户定义矩形子部分)之外的像素。

剪刀矩形可用于指示绘制游戏世界的呈现目标区域。 矩形外部的区域被剔除,可以专用于游戏的 GUI。 剪刀测试无法剔除非矩形区域。

剪刀矩形不能设置为大于呈现器目标,但它们可以设置为大于视区。

剪刀矩形由设备呈现状态管理。 通过将 renderstate 设置为 TRUEFALSE,可以启用或禁用剪刀测试。 此测试在计算片段颜色之后执行,但在 alpha 测试之前执行。 IDirect3DDevice9::SetRenderTarget 将剪刀矩形重置为完整的呈现目标,类似于视区重置。 IDirect3DDevice9::SetScissorRect 由 stateblocks 记录, IDirect3DDevice9::CreateStateBlock 的所有状态设置 (D3DSBT_ALL 值在 D3DSTATEBLOCKTYPE) 。 剪刀测试还影响设备 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;

默认剪刀矩形是完整的视区。

剪刀测试是在像素着色器或固定函数管道完成像素处理后完成的,如下图所示。

相对于其他步骤执行剪刀测试的示意图

像素管道