我正在为 Xbox360 和 WinXP 维护一个多平台代码库。我在 XP 方面看到一个问题,该问题似乎与 Xbox360 版本上的 D3DRS_VIEWPORTENABLE 相关,但在 WinXP D3D9 上没有等效项。本文有一个有趣的想法,但构造单位矩阵的唯一方法是向 D3DVIEWPORT9::X 和 D3DVIEWPORT9::Height 提供负数,但它们是无符号数。(无论如何我都尝试输入负数,但没有发生任何有趣的事情。)
那么,如何在 WinXP/D3D9 下模拟 D3DRS_VIEWPORTENABLE 的行为呢?
(为了清楚起见,我看到的结果是 2d 屏幕对齐四边形在 Xbox360 上工作正常,但在 WinXP 上偏移/拉伸。事实上, (0, 0) 在 WinXP 上从屏幕中心开始,而不是由于应用了视口变换,在左下角,就像在 Xbox360 上一样。)
更新:在我写这个问题的时候,我没有 Xbox360 开发套件,但后来我得到了一个。我注释掉了禁用 D3DRS_VIEWPORTENABLE 状态,并且在 Xbox360 上产生了与在 WinXP 构建上完全相同的行为。因此,必须有一些 DirectX 魔法来弥补这里的差距,以便在 WinXP 上模拟 D3DRS_VIEWPORTENABLE 被关闭。