feat(RHI): 添加 RHIFactory 工厂类
- 新增 RHIFactory 头文件和实现,支持通过 RHIType 或字符串创建设备 - 修复 D3D12Buffer 缺失的 Map/Unmap/SetData 实现 - 添加 RHI 工厂测试用例 - 更新 CMakeLists.txt 添加新文件
This commit is contained in:
@@ -38,6 +38,7 @@ add_subdirectory(memory)
|
||||
add_subdirectory(threading)
|
||||
add_subdirectory(debug)
|
||||
add_subdirectory(D3D12)
|
||||
add_subdirectory(RHI)
|
||||
add_subdirectory(RHI/D3D12)
|
||||
add_subdirectory(RHI/OpenGL)
|
||||
add_subdirectory(Resources)
|
||||
|
||||
43
tests/RHI/CMakeLists.txt
Normal file
43
tests/RHI/CMakeLists.txt
Normal file
@@ -0,0 +1,43 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
project(RHIEngineTests)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../.. ABSOLUTE)
|
||||
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR}/tests/OpenGL/package/include/)
|
||||
include_directories(${PROJECT_ROOT_DIR}/engine/include)
|
||||
include_directories(${PROJECT_ROOT_DIR}/engine/src)
|
||||
|
||||
link_directories(${CMAKE_SOURCE_DIR}/tests/OpenGL/package/lib/)
|
||||
|
||||
find_package(GTest REQUIRED)
|
||||
|
||||
set(TEST_SOURCES
|
||||
test_factory.cpp
|
||||
)
|
||||
|
||||
add_executable(rhi_engine_tests ${TEST_SOURCES})
|
||||
|
||||
target_link_libraries(rhi_engine_tests PRIVATE
|
||||
opengl32
|
||||
glfw3
|
||||
d3d12
|
||||
dxgi
|
||||
d3dcompiler
|
||||
XCEngine
|
||||
GTest::gtest
|
||||
GTest::gtest_main
|
||||
)
|
||||
|
||||
target_include_directories(rhi_engine_tests PRIVATE
|
||||
${PROJECT_ROOT_DIR}/engine/include
|
||||
${PROJECT_ROOT_DIR}/engine/src
|
||||
)
|
||||
|
||||
enable_testing()
|
||||
add_test(NAME RHIEngineTests COMMAND rhi_engine_tests)
|
||||
44
tests/RHI/test_factory.cpp
Normal file
44
tests/RHI/test_factory.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "XCEngine/RHI/RHIFactory.h"
|
||||
#include "XCEngine/RHI/D3D12/D3D12Device.h"
|
||||
|
||||
using namespace XCEngine::RHI;
|
||||
|
||||
TEST(RHIFactory, CreateD3D12Device_ReturnsValidPointer) {
|
||||
RHIDevice* device = RHIFactory::CreateRHIDevice(RHIType::D3D12);
|
||||
|
||||
ASSERT_NE(device, nullptr);
|
||||
|
||||
delete device;
|
||||
}
|
||||
|
||||
TEST(RHIFactory, CreateD3D12DeviceByName_ReturnsValidPointer) {
|
||||
RHIDevice* device = RHIFactory::CreateRHIDevice("D3D12");
|
||||
|
||||
ASSERT_NE(device, nullptr);
|
||||
|
||||
delete device;
|
||||
}
|
||||
|
||||
TEST(RHIFactory, CreateInvalidDevice_ReturnsNullptr) {
|
||||
RHIDevice* device = RHIFactory::CreateRHIDevice("InvalidAPI");
|
||||
|
||||
ASSERT_EQ(device, nullptr);
|
||||
}
|
||||
|
||||
TEST(RHIFactory, CreateInvalidType_ReturnsNullptr) {
|
||||
RHIDevice* device = RHIFactory::CreateRHIDevice(RHIType::Vulkan);
|
||||
|
||||
ASSERT_EQ(device, nullptr);
|
||||
}
|
||||
|
||||
TEST(D3D12DeviceCreation, DirectCreation_Success) {
|
||||
D3D12Device* device = new D3D12Device();
|
||||
|
||||
ASSERT_NE(device, nullptr);
|
||||
|
||||
delete device;
|
||||
}
|
||||
Reference in New Issue
Block a user