我正在为D3D11渲染编写一个模块化类,我需要使用的一个要求是始终启用剪刀测试。这意味着当设置视口时,我不想在输出合并阶段剔除任何东西,我需要将剪刀矩形设置为视口的大小。对于大多数情况来说,这不是一个问题,但我想知道角落情况,其中视口可以为其尺寸采用FLOAT值,剪刀矩形仅需要LONG。这种不匹配似乎是D3D11中的一个小设计缺陷,但这不是重点。当我有一个分数视口时,我想知道我应该设置我的剪刀矩形是什么?看起来我们有两个选择:
scissorRect.right= static_cast<LONG>(viewport.TopLeftX + viewport.Width))
直接施放到LONG并失去精度:这意味着场景的一小部分将被不必要地剔除。
scissorRect.right= static_cast<LONG>(ceil(viewport.TopLeftX + viewport.Width)))
在转换为LONG之前将浮点值置于平台或ceil:这意味着特定渲染操作的剪刀矩可能超出预期界限,甚至超出窗口大小。
我倾向于采用后一种选择,因为它似乎不会造成任何伤害,因为视口将限制渲染操作的界限,所以我们不会透支或在外面画画窗户。你们觉得怎么样?
请告诉我。 感谢。