#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