Platform SDK: DirectX |
注 : ここでは、C または C++ でのアプリケーション開発について説明する。
パフォーマンス上の理由により、Direct3D 直接モードのデバッグ バージョンはリテール バージョンより頻繁に、実行時のパラメータ妥当性検証を行う。リテール バージョンは妥当性検証をまったく行わないこともある。Debug 版の妥当性検証を利用すれば、低速のデバッグ ランタイム コンポーネントで堅牢なデバッグを実行した後で、Retail 版を使用してパフォーマンスを調整し、最終リリースを実現できる。
いくつかの Direct3D 直接モード メソッドが受け取ることができる値には制限があるにもかかわらず、これらの制限は Direct3D 直接モード ランタイムのデバッグ バージョンがチェックし強制するだけであることが多い。アプリケーションは、これらの制限を順守しなければならない。そうしないと、Direct3D のリテール バージョンを実行したときに、予期できない (また、非常に好ましくない) 結果が発生することがある。たとえば、IDirect3DDevice7::DrawPrimitive メソッドが受け取るパラメータ (dwVertexCount) は、メソッドがレンダリングする頂点の数を示す。メソッドが受け取ることができるのは 0 から 65,535 (0x0000 から 0xFFFF) の間の値だけである。Direct3D のデバッグ バージョンで 65,536 (制限より 1 大きい) を渡すと、メソッドは失敗し、エラー ログにエラー メッセージを書き出し、アプリケーションにエラー値を返す。しかし、リテール バージョン ランタイムを実行中に同じエラーが発生した場合は、動作は予測できない。パフォーマンス上の理由により、メソッドはパラメータを検証しないため、パラメータが有効でない場合は、結果は完全な状況依存で予測できない動作となる。ある場合には呼び出しが動作し、別の場合には呼び出しによって Direct3D のメモリに障害が発生する。無効な呼び出しが特定のハードウェア構成と DirectX バージョンで正常に動作することもあるが、他のハードウェアまたは将来のリリースの DirectX でも機能が継続する保証はない。
Retail 版の Direct3D 直接モード ランタイムでの実行中に、説明できないようなエラーが発生した場合は、Debug 版でテストして、アプリケーションが無効なパラメータを渡していないかどうかを詳しく調べる。