首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测DxDiag "Direct3D Acceleration“的C++函数

检测DxDiag "Direct3D Acceleration“的C++函数
EN

Stack Overflow用户
提问于 2009-12-14 23:13:48
回答 2查看 1.5K关注 0票数 2

微软DxDiag可以检测系统是否存在Direct3D加速。

如果系统没有此功能,DxDiag将写下"Direct3D Acceleration not available“,并在控制台中写道:"Direct3D functionality not available。您应该验证驱动程序是硬件制造商的最终版本。”

我希望使用C++函数也是如此。

我做了一些测试,下面的函数似乎可以完成这项工作。

还有其他更好的主意吗?

谢谢。

Alessandro

代码语言:javascript
复制
#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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-15 20:18:42

由于DirectDraw现在已弃用,因此使用Direct3D函数可能更可取。

如果目的是检测3D加速是否可用于应用程序,我会初始化Direct3D,然后检查HAL Device Type是否可用。

代码语言:javascript
复制
LPDIRECT3D9 d3d = Direct3DCreate9( D3D_SDK_VERSION );

D3DCAPS9 caps;

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

您可以通过选中Direct3D选项卡中的“仅软件”复选框,在DirectX控制面板中强制执行软件渲染,从而检查此代码的有效性。

在选中和不选中复选框的情况下测试代码,看看它是否适合您的需要。

票数 3
EN

Stack Overflow用户

发布于 2009-12-15 17:04:37

您可以通过IDXDiagContainerIDXDiagProvider访问DX诊断程序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1901464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档