添加 WinDeviceManger
This commit is contained in:
parent
53b1a99d3c
commit
2e4e55b4d3
@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.32802.440
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34322.80
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinDevice", "WinDevice\WinDevice.vcxproj", "{FC07175F-EC7A-4CE5-9F7F-976DC6AED04D}"
|
||||
EndProject
|
||||
|
@ -170,6 +170,42 @@ namespace WinDevice
|
||||
|
||||
bool WinDeviceManager::IsDirect3DAccelerationAvailable()
|
||||
{
|
||||
D3D_FEATURE_LEVEL featureLevel;
|
||||
|
||||
// 尝试创建硬件设备,如果失败,尝试创建支持较低特性级别的设备
|
||||
HRESULT hr = D3D11CreateDevice(
|
||||
nullptr,
|
||||
D3D_DRIVER_TYPE_HARDWARE,
|
||||
nullptr,
|
||||
0,
|
||||
nullptr,
|
||||
0,
|
||||
D3D11_SDK_VERSION,
|
||||
nullptr,
|
||||
&featureLevel,
|
||||
nullptr
|
||||
);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// 依次尝试创建支持较低特性级别的设备
|
||||
hr = D3D10CreateDevice(
|
||||
nullptr,
|
||||
D3D10_DRIVER_TYPE_HARDWARE,
|
||||
nullptr,
|
||||
0,
|
||||
D3D10_SDK_VERSION,
|
||||
nullptr
|
||||
);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION);
|
||||
|
||||
if (pD3D == nullptr)
|
||||
@ -177,7 +213,6 @@ namespace WinDevice
|
||||
// DirectX is not installed or not available
|
||||
return false;
|
||||
}
|
||||
|
||||
D3DCAPS9 caps;
|
||||
if (FAILED(pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps)))
|
||||
{
|
||||
@ -185,7 +220,6 @@ namespace WinDevice
|
||||
pD3D->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if Direct3D acceleration is supported
|
||||
const bool accelerationAvailable = (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0;
|
||||
|
||||
@ -193,53 +227,4 @@ namespace WinDevice
|
||||
|
||||
return accelerationAvailable;
|
||||
}
|
||||
|
||||
bool WinDeviceManager::IsDirectX12Available()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
// 初始化 COM 环境
|
||||
hr = CoInitialize(nullptr);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// 处理初始化失败的情况
|
||||
return false;
|
||||
}
|
||||
|
||||
// 创建 DXGI 工厂
|
||||
IDXGIFactory4* pFactory = nullptr;
|
||||
hr = CreateDXGIFactory1(__uuidof(IDXGIFactory4), reinterpret_cast<void**>(&pFactory));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// 处理工厂创建失败的情况
|
||||
CoUninitialize();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 枚举适配器
|
||||
IDXGIAdapter1* pAdapter = nullptr;
|
||||
for (UINT adapterIndex = 0; pFactory->EnumAdapters1(adapterIndex, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++adapterIndex)
|
||||
{
|
||||
// 检查适配器是否支持 DirectX 12
|
||||
D3D_FEATURE_LEVEL featureLevels[] = {D3D_FEATURE_LEVEL_12_0, D3D_FEATURE_LEVEL_12_1};
|
||||
for (const D3D_FEATURE_LEVEL featureLevel : featureLevels)
|
||||
{
|
||||
hr = D3D12CreateDevice(pAdapter, featureLevel, __uuidof(ID3D12Device), nullptr);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 找到支持 DirectX 12 的适配器
|
||||
pAdapter->Release();
|
||||
pFactory->Release();
|
||||
CoUninitialize();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
pAdapter->Release();
|
||||
}
|
||||
|
||||
// 未找到支持 DirectX 12 的适配器
|
||||
pFactory->Release();
|
||||
CoUninitialize();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ namespace WinDevice
|
||||
UserDeviceInfo GetUserDeviceInfo();
|
||||
static bool IsDirectDrawAccelerationAvailable();
|
||||
static bool IsDirect3DAccelerationAvailable();
|
||||
static bool IsDirectX12Available();
|
||||
|
||||
private:
|
||||
std::shared_ptr<OsInfo> osInfo;
|
||||
|
@ -23,7 +23,6 @@ int main()
|
||||
// ScreenManager sceen_manager;
|
||||
// sceen_manager.UpdateDisplayInfo();
|
||||
|
||||
spdlog::info("IsDirectX12Available: {0}", WinDevice::WinDeviceManager::IsDirectX12Available());
|
||||
spdlog::info("IsDirect3DAccelerationAvailable: {0}", WinDevice::WinDeviceManager::IsDirect3DAccelerationAvailable());
|
||||
spdlog::info("IsDirectDrawAccelerationAvailable: {0}", WinDevice::WinDeviceManager::IsDirectDrawAccelerationAvailable());
|
||||
getchar();
|
||||
|
1
WinDevice/WinDevice.def
Normal file
1
WinDevice/WinDevice.def
Normal file
@ -0,0 +1 @@
|
||||
LIBRARY
|
@ -99,7 +99,8 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d10.lib;d3d11.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>WinDevice.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
@ -117,7 +118,8 @@
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d10.lib;d3d11.lib;d3d12.lib;ddraw.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>WinDevice.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
@ -131,7 +133,8 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d10.lib;d3d11.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>WinDevice.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
@ -149,7 +152,8 @@
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;cfgmgr32.lib;d3d9.lib;d3d10.lib;d3d11.lib;d3d12.lib;ddraw.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>WinDevice.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
@ -175,6 +179,9 @@
|
||||
<ClInclude Include="Utils\TimeUtil.h" />
|
||||
<ClInclude Include="Video\ScreenManager.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="WinDevice.def" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
|
@ -75,4 +75,9 @@
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="WinDevice.def">
|
||||
<Filter>源文件</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -13,6 +13,8 @@
|
||||
#include <dxgi1_4.h>
|
||||
#include <d3d9.h>
|
||||
#include <d3d9caps.h>
|
||||
#include <d3d11.h>
|
||||
#include <d3d10_1.h>
|
||||
#include <d3d12.h>
|
||||
|
||||
#include <DirectXMath.h>
|
||||
|
Loading…
Reference in New Issue
Block a user