Files
XCEngine/engine/src/RHI/RHIFactory.cpp

48 lines
1.3 KiB
C++

#include "XCEngine/RHI/RHIFactory.h"
#include "XCEngine/RHI/D3D12/D3D12Device.h"
#ifdef XCENGINE_SUPPORT_OPENGL
#include "XCEngine/RHI/OpenGL/OpenGLDevice.h"
#endif
#ifdef XCENGINE_SUPPORT_VULKAN
#include "XCEngine/RHI/Vulkan/VulkanDevice.h"
#endif
namespace XCEngine {
namespace RHI {
RHIDevice* RHIFactory::CreateRHIDevice(RHIType type) {
switch (type) {
case RHIType::D3D12:
return new D3D12Device();
#ifdef XCENGINE_SUPPORT_OPENGL
case RHIType::OpenGL:
return new OpenGLDevice();
#endif
#ifdef XCENGINE_SUPPORT_VULKAN
case RHIType::Vulkan:
return new VulkanDevice();
#endif
case RHIType::Metal:
default:
return nullptr;
}
}
RHIDevice* RHIFactory::CreateRHIDevice(const std::string& typeName) {
if (typeName == "D3D12" || typeName == "d3d12") {
return new D3D12Device();
#ifdef XCENGINE_SUPPORT_OPENGL
} else if (typeName == "OpenGL" || typeName == "opengl" || typeName == "GL") {
return new OpenGLDevice();
#endif
#ifdef XCENGINE_SUPPORT_VULKAN
} else if (typeName == "Vulkan" || typeName == "vulkan" || typeName == "VK" || typeName == "vk") {
return new VulkanDevice();
#endif
}
return nullptr;
}
} // namespace RHI
} // namespace XCEngine