Microsoft DirectX 8.0 (C++)

パラメータの妥当性検査

パフォーマンス上の理由から、Microsoft® Direct3D® ランタイムのデバッグ バージョンでは、リテール バージョンの場合より多くのパラメータの妥当性検査を行う。リテール バージョンでは、妥当性検査がまったく行われないこともある。これを使用することで、アプリケーションでは低速なデバッグ ランタイム コンポーネントによって安定したデバッギングを実行でき、その後で高速なリテール バージョンを使用してパフォーマンスを調整し、最終的なリリースに備えることができる。

Direct3D のいくつかのメソッドでは、使用できる値に制限があるが、この制限は Direct3D ランタイムのデバッグ バージョンによってチェックされて実施されるだけであることが多い。アプリケーションはこの制限に従う必要がある。これに従っていないと、Direct3D のリテール バージョンで実行したときに、予想外の好ましくない結果が生じる可能性がある。たとえば、IDirect3Ddevice8::DrawPrimitive メソッドでは、このメソッドでレンダリングするプリミティブの個数を示すパラメータ (PrimitiveCount) を使用する。このメソッドで使用できる値の範囲は 0 〜 D3DMAXNUMPRIMITIVES である。Direct3D のデバッグ バージョンで、D3DMAXNUMPRIMITIVES 個より多くのプリミティブを渡した場合、メソッドは異常終了し、エラー ログにエラー メッセージを出力して、アプリケーションにエラー値を返す。逆に、ランタイムのリテール バージョンで実行している場合にアプリケーションで同じエラーが発生したときは、動作は不定である。パフォーマンス上の理由から、メソッドはパラメータの妥当性検査を行わない。したがって、パラメータが有効でない場合には、その状況に依存した予想外の動作が生じる。場合によっては、呼び出しが行われることもある。また、場合によっては、その呼び出しに起因して Direct3D でメモリ障害が発生することもある。無効な呼び出しが特定のハードウェア構成と DirectX のバージョンで一貫して機能したとしても、ほかのハードウェアや DirectX の今後のリリースで機能することは保証されない。

リテール Direct3D ランタイム ファイルでアプリケーションを実行している場合に、説明できない障害が発生したときは、デバッグ バージョンに対してテストを行い、アプリケーションで無効なパラメータを渡している箇所がないかどうかを慎重に調べること。