添加 WinDeviceManger
This commit is contained in:
parent
53b1a99d3c
commit
2e4e55b4d3
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 16.0.32802.440
|
VisualStudioVersion = 17.8.34322.80
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinDevice", "WinDevice\WinDevice.vcxproj", "{FC07175F-EC7A-4CE5-9F7F-976DC6AED04D}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinDevice", "WinDevice\WinDevice.vcxproj", "{FC07175F-EC7A-4CE5-9F7F-976DC6AED04D}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -170,6 +170,42 @@ namespace WinDevice
|
|||||||
|
|
||||||
bool WinDeviceManager::IsDirect3DAccelerationAvailable()
|
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);
|
IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION);
|
||||||
|
|
||||||
if (pD3D == nullptr)
|
if (pD3D == nullptr)
|
||||||
@ -177,7 +213,6 @@ namespace WinDevice
|
|||||||
// DirectX is not installed or not available
|
// DirectX is not installed or not available
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
D3DCAPS9 caps;
|
D3DCAPS9 caps;
|
||||||
if (FAILED(pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps)))
|
if (FAILED(pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps)))
|
||||||
{
|
{
|
||||||
@ -185,7 +220,6 @@ namespace WinDevice
|
|||||||
pD3D->Release();
|
pD3D->Release();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if Direct3D acceleration is supported
|
// Check if Direct3D acceleration is supported
|
||||||
const bool accelerationAvailable = (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0;
|
const bool accelerationAvailable = (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0;
|
||||||
|
|
||||||
@ -193,53 +227,4 @@ namespace WinDevice
|
|||||||
|
|
||||||
return accelerationAvailable;
|
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();
|
UserDeviceInfo GetUserDeviceInfo();
|
||||||
static bool IsDirectDrawAccelerationAvailable();
|
static bool IsDirectDrawAccelerationAvailable();
|
||||||
static bool IsDirect3DAccelerationAvailable();
|
static bool IsDirect3DAccelerationAvailable();
|
||||||
static bool IsDirectX12Available();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<OsInfo> osInfo;
|
std::shared_ptr<OsInfo> osInfo;
|
||||||
|
@ -23,7 +23,6 @@ int main()
|
|||||||
// ScreenManager sceen_manager;
|
// ScreenManager sceen_manager;
|
||||||
// sceen_manager.UpdateDisplayInfo();
|
// sceen_manager.UpdateDisplayInfo();
|
||||||
|
|
||||||
spdlog::info("IsDirectX12Available: {0}", WinDevice::WinDeviceManager::IsDirectX12Available());
|
|
||||||
spdlog::info("IsDirect3DAccelerationAvailable: {0}", WinDevice::WinDeviceManager::IsDirect3DAccelerationAvailable());
|
spdlog::info("IsDirect3DAccelerationAvailable: {0}", WinDevice::WinDeviceManager::IsDirect3DAccelerationAvailable());
|
||||||
spdlog::info("IsDirectDrawAccelerationAvailable: {0}", WinDevice::WinDeviceManager::IsDirectDrawAccelerationAvailable());
|
spdlog::info("IsDirectDrawAccelerationAvailable: {0}", WinDevice::WinDeviceManager::IsDirectDrawAccelerationAvailable());
|
||||||
getchar();
|
getchar();
|
||||||
|
1
WinDevice/WinDevice.def
Normal file
1
WinDevice/WinDevice.def
Normal file
@ -0,0 +1 @@
|
|||||||
|
LIBRARY
|
@ -99,7 +99,8 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@ -117,7 +118,8 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
@ -131,7 +133,8 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
@ -149,7 +152,8 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<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>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -175,6 +179,9 @@
|
|||||||
<ClInclude Include="Utils\TimeUtil.h" />
|
<ClInclude Include="Utils\TimeUtil.h" />
|
||||||
<ClInclude Include="Video\ScreenManager.h" />
|
<ClInclude Include="Video\ScreenManager.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="WinDevice.def" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
@ -75,4 +75,9 @@
|
|||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="WinDevice.def">
|
||||||
|
<Filter>源文件</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -13,6 +13,8 @@
|
|||||||
#include <dxgi1_4.h>
|
#include <dxgi1_4.h>
|
||||||
#include <d3d9.h>
|
#include <d3d9.h>
|
||||||
#include <d3d9caps.h>
|
#include <d3d9caps.h>
|
||||||
|
#include <d3d11.h>
|
||||||
|
#include <d3d10_1.h>
|
||||||
#include <d3d12.h>
|
#include <d3d12.h>
|
||||||
|
|
||||||
#include <DirectXMath.h>
|
#include <DirectXMath.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user