2

Microsoft DxDiag は、システムに「Direct3D アクセラレーション」があるかどうかを検出できます。

システムにその機能がない場合、DxDiag は「Direct3D アクセラレーションが利用できません」と表示し、コンソールに「Direct3D 機能が利用できません。ドライバーがハードウェアの製造元から提供された最終バージョンであることを確認する必要があります」と表示します。

C++ 関数でも同じようにしたいと思います。

いくつかのテストを行いましたが、次の関数が機能しているようです。

他に良いアイデアはありますか?

ありがとうございました。

アレッサンドロ

#include <ddraw.h>
#include <atlbase.h>

bool has3D()
{
   CComPtr< IDirectDraw > dd;
   HRESULT hr = ::DirectDrawCreate( 0, &dd, 0 );
   if ( hr != DD_OK ) return false;

   DDCAPS hel_caps, hw_caps;
   ::ZeroMemory( &hel_caps, sizeof( DDCAPS ) );
   ::ZeroMemory( &hw_caps, sizeof( DDCAPS ) );
   hw_caps.dwSize = sizeof( DDCAPS );
   hel_caps.dwSize = sizeof( DDCAPS );
   hr = dd->GetCaps( &hw_caps, &hel_caps );
   if ( hr != DD_OK ) return false;

   return (hw_caps.dwCaps & DDCAPS_3D) && (hel_caps.dwCaps & DDCAPS_3D);
}
4

2 に答える 2

0

IDXDiagContainerおよびIDXDiagProviderを介して DX Diag にアクセスできます。

于 2009-12-15T09:04:37.410 に答える