Win32:如何确定DirectDraw是否已启用?

问题描述 投票:5回答:3

在GDIPlus中使用CachedBitmaps时,如果Windows视频“硬件加速”降低太多,则会出现图形损坏 - 这样会禁用DirectDraw:

enter image description here

硬件加速有六个级别:

  • 禁用所有加速度
  • 禁用除基本加速之外的所有加速(服务器机器上的默认值)
  • 禁用所有DirectDraw和Direct3D加速,以及所有光标和高级加速
  • 禁用所有光标和高级绘图加速
  • 禁用光标和位图加速
  • 启用所有加速(桌面计算机上的默认值)

如果禁用DirectDraw,则在GDI +中使用DrawCachedBitmap将导致图形损坏。如果没有启用DirectDraw,我很容易使用较慢的DrawImage() API - 但我必须能够检测到DirectDraw被禁用。

我如何以编程方式检查是否启用了DirectDraw?


问题是:dxdiag如何做到这一点:

也可以看看

KB191660 - DirectDraw or Direct3D option is unavailablearchive

winapi gdi+ directdraw
3个回答
4
投票

如果你下载最新的DirectX SDK(我确定较老的sdk有类似的例子),有一个查询DXDIAG信息的例子。

该示例位于(SDK Root)\ Samples \ C ++ \ Misc \ DxDiagReport

在dxdiaginfo.cpp中注意方法

CDxDiagInfo::CDxDiagInfo
CDxDiagInfo::Init
CDxDiagInfo::QueryDxDiagViaDll    
CDxDiagInfo::GetDisplayInfo

如果您运行该程序,它会输出一个巨大的值列表。我认为你感兴趣的价值是qazxsw poi


0
投票

您可以检查注册表中的加速滑块值。

pDisplayInfo->m_szDDStatusEnglish

您可能需要遍历HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{'some hex string'}\0000\Acceleration.Level 中的所有文件夹,因为通常有多个条目。

Acceleration.Level Values

  • 5禁用所有加速度
  • 4禁用所有基本加速度。 (服务器机器上的默认值)
  • 3禁用所有DirectDraw和Direct3D加速,以及所有光标和高级加速
  • 2禁用所有光标和高级绘图加速度
  • 1禁用光标和位图加速
  • 0启用所有加速(桌面计算机上的默认值)

更新:

这是一个关于以编程方式更改/检查加速级别的旧线程。 qazxsw poi


0
投票

您可以查询Video并查看它的作用。我假设如果关闭硬件加速会失败,但您可能想要测试GetCaps()或TestCooperativeLevel()。

http://www.autoitscript.com/forum/topic/61185-hardware-acceleration/

不幸的是,SDK中不再包含DirectDraw文档。您可能需要较旧的版本来获取示例和头文件。

© www.soinside.com 2019 - 2024. All rights reserved.