SleakEngine
0.1.0
C++23 multi-backend game engine
Toggle main menu visibility
Loading...
Searching...
No Matches
RendererFactory.cpp
Go to the documentation of this file.
1
#include "
../../include/private/Graphics/Common/RendererFactory.hpp
"
2
#include <cstring>
3
#include <string>
4
#include <memory>
5
#include <stdexcept>
6
#include "
Core/Logger.hpp
"
7
8
namespace
Sleak
{
9
namespace
RenderEngine
{
10
11
// Define the static member variable
12
RendererType
RendererFactory::Renderertype =
RendererType::Vulkan
;
13
14
Renderer
*
RendererFactory::CreateRenderer
(
RendererType
type,
Window
* window) {
15
Renderertype = type;
16
switch
(type) {
17
case
RendererType::Vulkan
:
18
SLEAK_INFO
(
"Used graphic API is Vulkan"
);
19
#define API_VULKAN
20
return
new
VulkanRenderer
(window);
21
case
RendererType::OpenGL
:
22
SLEAK_INFO
(
"Used graphic API is OpenGL"
);
23
#define API_OPENGL
24
return
new
OpenGLRenderer
(window);
25
#ifdef PLATFORM_WIN
26
case
RendererType::DirectX11
:
27
SLEAK_INFO
(
"Used graphic API is DirectX 11"
);
28
#define API_DIRECTX11
29
return
new
DirectX11Renderer(window);
30
case
RendererType::DirectX12
:
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"
);
38
return
CreateRenderer
(
RendererType::DirectX11
, window);
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
48
Renderer
*
RendererFactory::ParseArg
(std::string arg,
Window
* window) {
49
SLEAK_INFO
(
"Passed renderer argument: {0}"
,arg)
50
51
if
(arg ==
"v"
|| arg ==
"vulkan"
)
52
return
CreateRenderer
(
RendererType::Vulkan
, window);
53
else
if
(arg ==
"o"
|| arg ==
"opengl"
)
54
return
CreateRenderer
(
RendererType::OpenGL
, window);
55
else
if
(arg ==
"d11"
|| arg ==
"d3d11"
|| arg ==
"directx11"
)
56
return
CreateRenderer
(
RendererType::DirectX11
, window);
57
else
if
(arg ==
"d12"
|| arg ==
"d3d12"
|| arg ==
"directx12"
)
58
return
CreateRenderer
(
RendererType::DirectX12
, window);
59
else
60
throw
std::runtime_error(
"Unsupported API has been requested!"
);
61
}
62
63
}
// namespace RenderEngine
64
}
// namespace Sleak
Logger.hpp
SLEAK_INFO
#define SLEAK_INFO(...)
Definition
Logger.hpp:20
SLEAK_WARN
#define SLEAK_WARN(...)
Definition
Logger.hpp:21
RendererFactory.hpp
Sleak::RenderEngine::OpenGLRenderer::OpenGLRenderer
OpenGLRenderer(Window *window)
Registers this backend's buffer/shader/texture factories with ResourceManager.
Definition
OpenGLRenderer.cpp:28
Sleak::RenderEngine::RendererFactory::ParseArg
static Renderer * ParseArg(std::string arg, Window *window)
Resolves a CLI backend name (e.g. "-vulkan") to a Renderer instance.
Definition
RendererFactory.cpp:48
Sleak::RenderEngine::RendererFactory::CreateRenderer
static Renderer * CreateRenderer(RendererType type, Window *window)
Instantiates and returns the Renderer for the given backend, bound to a window.
Definition
RendererFactory.cpp:14
Sleak::RenderEngine::Renderer
Abstract render backend: swapchain, frame lifecycle, and post-effect toggles.
Definition
Renderer.hpp:37
Sleak::RenderEngine::VulkanRenderer::VulkanRenderer
VulkanRenderer(Window *window)
Definition
VulkanRenderer.cpp:44
Sleak::Window
Definition
Window.hpp:18
Sleak::RenderEngine
Backend-facing rendering layer shared by the four graphics backends.
Definition
Application.hpp:60
Sleak::RenderEngine::RendererType
RendererType
Selects which graphics API a Renderer instance targets.
Definition
Renderer.hpp:13
Sleak::RenderEngine::RendererType::Vulkan
@ Vulkan
Definition
Renderer.hpp:14
Sleak::RenderEngine::RendererType::DirectX12
@ DirectX12
Definition
Renderer.hpp:17
Sleak::RenderEngine::RendererType::OpenGL
@ OpenGL
Definition
Renderer.hpp:15
Sleak::RenderEngine::RendererType::DirectX11
@ DirectX11
Definition
Renderer.hpp:16
Sleak
Root namespace for everything the engine exposes.
Definition
Camera.hpp:10
src
Graphics
Common
RendererFactory.cpp
Generated on
for SleakEngine by
1.18.0