Microsoft DirectX 8.0 (Visual Basic) |
Enum CONST_D3DCAPS2FLAGS D3DCAPS2_NO2DDURING3DSCENE = 2 D3DCAPS2_FULLSCREENGAMMA = 131072 (&H20000) D3DCAPS2_CANRENDERWINDOWED = 524288 (&H80000) D3DCAPS2_CANCALIBRATEGAMMA = 1048576 (&H100000) D3DCAPS2_RESERVED = 33554432 (&H2000000) End Enum
通常、この能力は、シーンをパーティション化し、シーン内の各パーティションをレンダリングするハードウェアによって設定される。パーティション化はドライバによって実行され、ハードウェアはイメージ パーティションのサイズに対応する小さな色および深度バッファを格納する。このタイプのレンダリング ハードウェアでは、通常、イメージの各部分がレンダリングされると、カラー バッファ内のデータはビデオ メモリに書き込まれ、深度バッファの内容は破棄される。また、3D レンダリングは EndScene が検出されるまで開始されないことに注意する。次に、シーンが領域ごとに処理される。この場合、処理の順序は保証されない。たとえば、処理される最初の領域 (通常ウィンドウの左上隅) が、フレームの最後の三角形を含んでいる場合がある。これと従来のグラフィックス システムを比較すると、一般的なシステムでは、各コマンドは送信された順に逐次処理される。2D 処理は、処理における特定の時点で行われることが想定されている。D3DCAPS2_NO2DDURING3DSCENE を設定するシステムでは、処理の順序は保証されないので、3D レンダリング中に検出された 2D 処理はディスプレイ アダプタによって破棄される場合がある。
一般的には、BeginScene と EndScene のペアの外側で 2D 処理を実行することを推奨する。2D 処理が BeginScene と EndScene のペアの間で実行される場合は、D3DCAPS2_NO2DDURING3DSCENE 能力をチェックする必要がある。この能力が設定されている場合、アプリケーションでは、BeginScene と EndScene の間にある 2D 処理は破棄されると考える必要がある。D3DCAPS2_NO2DDURING3DSCENE を設定するシステム用のアプリケーション作成の詳細については、「注意」を参照すること。
これらのフラグは、組み合わせて、D3DCAPS8 の Caps2 メンバで使用できる。
D3DCAPS2_NO2DDURING3DSCENE 能力フラグを設定するシステムの場合は、テクスチャを使用し、シーン中に変更するとパフォーマンスの問題が発生することがある。これはすべてのハードウェアに該当するが、D3DCAPS2_NO2DDURING3DSCENE 能力を公開するハードウェアでより深刻である。ハードウェアに D3DCAPS2_NO2DDURING3DSCENE が存在する場合、アプリケーション ベースのテクスチャ管理では、現在の BeginScene と EndScene ブロック内で使用されているテクスチャが、本当に必要でない限り、除外されないようにしなければならない。
シーン内で大量のテクスチャが使用されている場合、つまりシーン内で使用されているテクスチャを変更し、使用可能なテクスチャ メモリが不足している場合、その結果は不定である。このようなシステムでは、Z バッファの内容は EndScene で無効になる。アプリケーションは、このタイプのハードウェア上では、BeginScene と EndScene の間で、バック バッファへの、またはバック バッファからの Direct3DDevice8.CopyRects を呼び出すべきではない。さらに、D3DPRASTERCAPS_ZBUFFERLESSHSR 能力フラグが設定されている場合、アプリケーションは Z バッファにアクセスすべきではない。最後に、アプリケーションは BeginScene と EndScene のペアの間で、バック バッファまたは Z バッファをロックすべきではない。