首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows操作系统上directx版本的C++验证

Windows操作系统上directx版本的C++验证
EN

Stack Overflow用户
提问于 2018-08-19 16:17:22
回答 1查看 757关注 0票数 1

我想测试不同的操作系统,Windows,Windows SP1,Windows SP2,Windows2012R2,Windows 7,Windows 8,Windows 10等,是否有可能使用Direct3D 11图形技术。

在msdn的某个地方发现,确保操作系统能够使用此技术的最佳方法是调用D3D11CreateDevice并检查结果。

如果在没有服务包的Windows上运行此代码,它甚至不会启动,因为没有d3d11.dll。原来要检查支持Direct3D 11图形技术,您需要相同的技术吗?

代码语言:javascript
复制
#include "stdafx.h"
#include "windows.h"
#include "dxgi.h"
#include "d3d11.h"

BOOL IsDirectx11Available()
{
    D3D_FEATURE_LEVEL lvl[] = {
        D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
        D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1 };

    DWORD createDeviceFlags = 0;

    ID3D11Device *device;
    ID3D11DeviceContext *context;
    D3D_FEATURE_LEVEL fl;

    HRESULT hr = D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr,
        createDeviceFlags, lvl, _countof(lvl),
        D3D11_SDK_VERSION, &device, &fl, &context);

    if (hr == E_INVALIDARG)
    {
    hr = D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr,
        createDeviceFlags, &lvl[1], _countof(lvl) - 1,
        D3D11_SDK_VERSION, &device, &fl, &context);

    return false;
}

return true;
}
int main()
{
if (IsDirectx11Available())
{
    printf("Directx api available\n");
}

system("PAUSE");
return 0;
}

也试过

代码语言:javascript
复制
DWORD dwVersion;
DWORD dwRevision;
if (DirectXSetupGetVersion(&dwVersion, &dwRevision))
{
    printf("DirectX version is %d.%d.%d.%d\n",
           HIWORD(dwVersion), LOWORD(dwVersion),
           HIWORD(dwRevision), LOWORD(dwRevision));
}

使用dsetup.h,来自directx的dsetup.lib。但是当我选择.exe时,它会显示没有找到dsetup.dll的通知。

如何摆脱这种情况并检查Windows的可用性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 16:51:30

您所列出的每个OSes都有一个基于操作系统编号的特定DirectX版本。除了两个特定的更新之外,您不能更改系统上的DirectX版本,因此在大多数情况下没有什么可“检测”的。运行DirectX最终用户运行时不会在任何这些OSes上更改DirectX版本。

代码语言:javascript
复制
Windows XP SP2     |     DirectX 9.0c
Windows XP SP3     |     DirectX 9.0c
Windows Vista RTM  |     DirectX 10.0
Windows Vista SP1  |     DirectX 10.1
Windows Vista SP2  |     DirectX 10.1 or DirectX 11.0 (KB 971644)
Windows 7 RTM      |     DirectX 11.0
Windows 7 SP1      |     DirectX 11.0 or DirectX 11.1 (KB 2670838)
Windows 8          |     DirectX 11.1
Windows 8.1        |     DirectX 11.2
Windows 10         |     DirectX 12 (build number will determine specifics)

从Windows 2003 SP1开始,服务器OS等价物是相同的(并且具有相同的版本号)。

请记住,这只是告诉您什么操作系统软件API是存在的。您必须尝试创建一个Direct3D设备,并检测它的Direct3D硬件功能级别,以了解与系统相连的显卡/驱动程序的任何信息。见Direct3D特征级

要解决未更新的Windows系统中缺少d3d11.dll LoadLibrary**) 的问题,需要使用显式DLL链接(即.、或 [DLL delay loading](https://msdn.microsoft.com/en-us/library/151kt790.aspx).** ])。

dsetup.dll只存在于遗留的DirectX SDK中,并且是被废弃的DirectX终端用户运行时包中并行处理的一部分。这就是为什么它没有出现在你所有的机器上。见MSDN。遗留的DirectSetup API从未为DirectX 10或更高版本更新过,因此它仍然报告了与以前相同的9.0c编号。

请参阅以下博客文章:没有那么直接的设置版本号是什么?显疯

几个脚注:

  • 在Windows或更高版本中,不存在Direct3D保留模式、DirectPlay语音或DX7/DX8 Visual支持,作为后面运行时中包含的"DirectX 9.0c“组件的一部分。
  • 在Windows8.1或更高版本中,默认情况下没有安装DirectPlay。这是一个必须启用的Windows可选特性。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51919597

复制
相关文章

相似问题

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