SleakEngine 1.0.0
C++23 multi-backend game engine
Loading...
Searching...
No Matches
RendererFactory.cpp
Go to the documentation of this file.
2#include <cstring>
3#include <string>
4#include <memory>
5#include <stdexcept>
6#include "Core/Logger.hpp"
7
8namespace Sleak {
9namespace RenderEngine {
10
11// Define the static member variable
12RendererType RendererFactory::Renderertype = RendererType::Vulkan;
13
15 Renderertype = type;
16 switch (type) {
18 SLEAK_INFO("Used graphic API is Vulkan");
19 #define API_VULKAN
20 return new VulkanRenderer(window);
22 SLEAK_INFO("Used graphic API is OpenGL");
23 #define API_OPENGL
24 return new OpenGLRenderer(window);
25 #ifdef PLATFORM_WIN
27 SLEAK_INFO("Used graphic API is DirectX 11");
28 #define API_DIRECTX11
29 return new DirectX11Renderer(window);
31 if(DirectX12Renderer::IsSupport()) {
32 SLEAK_INFO("DirectX 12 is supported in this device");
33 #define API_DIRECTX12
34 return new DirectX12Renderer(window);
35 }
36 else {
37 SLEAK_WARN("The GPU does not support DirectX 12, using DirectX 11 instead");
39 }
40 #else
41 throw std::runtime_error("DirectX is supported on windows!");
42 #endif
43 default:
44 throw std::runtime_error("Unsupported renderer type");
45 }
46}
47
48Renderer* RendererFactory::ParseArg(std::string arg, Window* window) {
49 SLEAK_INFO("Passed renderer argument: {0}",arg)
50
51 if(arg == "v" || arg == "vulkan")
53 else if(arg == "o" || arg == "opengl")
55 else if(arg == "d11" || arg == "d3d11" || arg == "directx11")
57 else if(arg == "d12" || arg == "d3d12" || arg == "directx12")
59 else
60 throw std::runtime_error("Unsupported API has been requested!");
61}
62
63} // namespace RenderEngine
64} // namespace Sleak
#define SLEAK_INFO(...)
Definition Logger.hpp:20
#define SLEAK_WARN(...)
Definition Logger.hpp:21
OpenGL 3.3+ backend: deferred GBuffer pipeline, SSAO, shadow mapping, and baked IBL.
static Renderer * ParseArg(std::string arg, Window *window)
Resolves a CLI backend name (e.g. "-vulkan") to a Renderer instance.
static Renderer * CreateRenderer(RendererType type, Window *window)
Instantiates and returns the Renderer for the given backend, bound to a window.
Abstract render backend: swapchain, frame lifecycle, and post-effect toggles.
Definition Renderer.hpp:37
Backend-facing rendering layer shared by the four graphics backends.
RendererType
Selects which graphics API a Renderer instance targets.
Definition Renderer.hpp:13
Root namespace for everything the engine exposes.
Definition Camera.hpp:10