48 lines
1.3 KiB
C++
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
|