2009-12-14 117 views
2

微軟輸入dxdiag可以檢測系統是否有「Direct3D加速」。C++函數來完成輸入dxdiag「Direct3D加速」檢測

如果系統沒有能力,DxDiag將寫入「Direct3D Acceleration not available」,並將在控制檯中寫入「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); 
} 

回答

3

訪問DX Diag(診斷)和DirectDraw現在已經過時了,它也許最好使用Direct3D的功能。

如果目的是檢測3D加速可用於應用程序,我會初始化Direct3D和再檢查HAL Device Type可用。

LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION); 

D3DCAPS9 caps; 

if (FAILED(d3d->GetDeviceCaps(D3DADAPTER_DEFAULT , D3DDEVTYPE_HAL, &caps))) 
{ 
    return false;  
} 

您可以通過檢查的Direct3D標籤中的「軟件只有」複選框強制的DirectX控制面板中的軟件渲染檢查這個代碼的有效性。
檢查和不檢查複選框的代碼,看看它是否適合您的需求。