次の方法で共有


デバイスの種類 (Direct3D 9)

HAL デバイス

主なデバイスの種類は HAL デバイスで、ハードウェア アクセラレータによるラスタライズと、ハードウェアとソフトウェアの両方の頂点の処理をサポートします。 アプリが実行されているコンピューターに、Direct3D をサポートするディスプレイ アダプターが搭載されている場合、アプリケーションではディスプレイ アダプターを使用して Direct3D を操作する必要があります。 Direct3D HAL デバイスは、変換、照明、ラスタライズ モジュールのすべてまたは一部をハードウェアに実装します。

アプリケーションでは、グラフィックス アダプターに直接アクセスしないでください。 これらは、Direct3D の関数とメソッドを呼び出します。 Direct3D は、HAL を通じてハードウェアにアクセスします。 アプリケーションが実行されているコンピューターが HAL をサポートする場合、HAL デバイスを使用することにより最高のパフォーマンスを実現できます。

hal デバイスを作成するには、デバイスの種類として D3DDEVTYPE_HAL を使用して CreateDevice を 呼び出します。

参照デバイス

Direct3D では、参照デバイスまたはリファレンス ラスタライザーと呼ばれる、追加のデバイスの種類がサポートされています。 ソフトウェア デバイスとは異なり、リファレンス ラスタライザーは、すべての Direct3D の機能をサポートします。 このデバイスは、デバッグの目的で使用されるため、DirectX SDK がインストールされているコンピューターでのみ利用できます。 これらの機能は、速度ではなく精度のために実装され、ソフトウェアに実装されるため、結果はそれほど高速ではありません。 リファレンス ラスタライザーは、可能な場合は常に CPU の特殊な命令を使用しますが、これは製品版のアプリケーションで使用することを意図していません。 リファレンス ラスタライザーは、機能のテストやデモの目的でのみ使用してください。 参照デバイスを作成するには、デバイスの種類として D3DDEVTYPE_REF を使用して CreateDevice メソッドを呼び出します。

HAL および REF デバイス

HAL (ハードウェア アブストラクション レイヤー) デバイスおよび REF (リファレンス ラスタライザー) デバイスは、Direct3D デバイスの 2 つの主要な種類です。前者は、ハードウェア サポートに基づいており、非常に高速ですが、すべてがサポートされているわけではありません。後者は、ハードウェア アクセラレータを使用しないため、非常に低速ですが、Direct3D の機能セット全体を適切な方法でサポートすることが保証されています。 一般的に、使用する必要があるのは HAL デバイスのみですが、グラフィックス カードがサポートしていない一部の高度な機能を使用している場合は、REF へのフォールバックが必要になることもあります。

REF を使用することが必要になるその他の機会として、HAL デバイスが奇妙な結果が生成する場合があります。つまり、コードが正しいことが確実であるにもかかわらず、結果が予期したものではない場合です。 REF デバイスは正しく動作することが保証されているため、REF デバイス上でアプリケーションをテストし、奇妙な動作が引き続き発生するかどうかを確認できます。 発生しない場合は、(a) アプリケーションが、グラフィックス カードでサポートしていない機能をサポートしていると想定しているか、(b) ドライバーのバグです。 REF デバイスでもはっせいする場合は、アプリケーションのバグです。

ハードウェアとソフトウェアでの頂点の処理

ハードウェアとソフトウェアによる頂点処理は、実際には HAL デバイスにのみ適用されます。 パイプラインで頂点をプッシュする場合、頂点を変換 (ワールド、ビュー、プロジェクション マトリックス) し、照明を適用する (D3D の組み込みライトによる) 必要があります。この処理の段階を T&L (変換と照明) と呼びます。 ハードウェアによる頂点処理は、ハードウェアがサポートしている場合、この処理がハードウェアで行われることを意味し、ソフトウェアによる頂点処理は、ソフトウェアで行われます。 一般的には、最初にハードウェア T&L デバイスを作成し、それが失敗した場合は混在を試します。それでも失敗した場合はソフトウェアを試します。 (ソフトウェアが失敗した場合は、あきらめてエラーで終了します)。

Direct3D デバイス