剪刀测试 (Direct3D 9)

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

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

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

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

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

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

剪刀测试相对于其他步骤执行时的关系图

像素管道