我想测试不同的操作系统,Windows,Windows SP1,Windows SP2,Windows2012R2,Windows 7,Windows 8,Windows 10等,是否有可能使用Direct3D 11图形技术。
在msdn的某个地方发现,确保操作系统能够使用此技术的最佳方法是调用D3D11CreateDevice并检查结果。
如果在没有服务包的Windows上运行此代码,它甚至不会启动,因为没有d3d11.dll。原来要检查支持Direct3D 11图形技术,您需要相同的技术吗?
#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;
}也试过
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的可用性?
发布于 2018-08-19 16:51:30
您所列出的每个OSes都有一个基于操作系统编号的特定DirectX版本。除了两个特定的更新之外,您不能更改系统上的DirectX版本,因此在大多数情况下没有什么可“检测”的。运行DirectX最终用户运行时不会在任何这些OSes上更改DirectX版本。
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编号。
请参阅以下博客文章:没有那么直接的设置、版本号是什么?和显疯
几个脚注:
https://stackoverflow.com/questions/51919597
复制相似问题