Xbox360 と WinXP のマルチプラットフォーム コードベースを維持しています。XP 側で、Xbox360 バージョンの D3DRS_VIEWPORTENABLE に関連しているように見える問題が見られますが、WinXP D3D9 には同等のものはありません。この記事には興味深いアイデアがありましたが、恒等行列を構築する唯一の方法は、D3DVIEWPORT9::X と D3DVIEWPORT9::Height に負の数を指定することですが、これらは符号なしの数値です。(とにかく負の数を入力しようとしましたが、何も興味深いことはありませんでした。)
では、WinXP/D3D9 で D3DRS_VIEWPORTENABLE の動作をエミュレートするにはどうすればよいでしょうか?
(明確にするために、私が見ている結果は、Xbox360 では 2D 画面に合わせたクワッドが正常に動作するが、WinXP ではオフセット/ストレッチされているということです。実際、(0, 0) は、WinXP ではなく、画面の中央から始まります。ビューポート変換を適用した結果、Xbox360 のように左下隅に表示されます)。
更新: この質問を書いた時点では Xbox360 devkit を持っていませんでしたが、その後入手しました。D3DRS_VIEWPORTENABLE 状態の無効化をコメントアウトしたところ、WinXP ビルドとまったく同じ動作が Xbox360 でも発生しました。したがって、WinXP でオフになっている D3DRS_VIEWPORTENABLE をエミュレートするために、このギャップを埋める DirectX マジックが必要です。