【发布时间】:2018-08-20 00:58:18
【问题描述】:
我想在不同的操作系统上进行测试,Windows Vista、Windows Vista SP1、Windows Vista SP2、Windows 2012R2、Windows 7、Windows 8、Windows 10 等,是否有可能使用 Direct3D 11 图形技术。
在 msdn 上某处发现确保操作系统可以使用此技术的最佳方法是调用 D3D11CreateDevice 并检查结果。
如果您在没有服务包的 Windows Vista 上运行此代码,它甚至不会启动,因为没有 d3d11.dll。原来要检查是否支持 Direct3D 11 Graphics 技术,你需要同样的技术吗?
#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));
}
使用来自 directx sdk 的 dsetup.h、dsetup.lib。但是当我朗姆酒 .exe 时,它会显示未找到 dsetup.dll 的通知。
如何摆脱这种情况并检查 Windows Vista 的可用性?
【问题讨论】:
-
正确的方法是在你的安装程序中检查这类东西
-
@AlanBirtles,如果此选项不可用?