yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
renderer_factory.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GFX_BACKEND_RENDERER_FACTORY_H_
2#define YAZE_APP_GFX_BACKEND_RENDERER_FACTORY_H_
3
4#include <memory>
5
6#if defined(__APPLE__)
7#include <TargetConditionals.h>
8#endif
9
12
13#ifdef YAZE_USE_SDL3
15#endif
16
17#if defined(__APPLE__)
19#endif
20
22
23namespace yaze {
24namespace gfx {
25
31 SDL2,
32 SDL3,
33 Metal,
34 Null,
35 kDefault,
37};
38
44 public:
45 static std::unique_ptr<IRenderer> Create(
47 switch (type) {
49#ifndef YAZE_USE_SDL3
50 return std::make_unique<SDL2Renderer>();
51#else
52 return nullptr;
53#endif
54
56#ifdef YAZE_USE_SDL3
57 return std::make_unique<SDL3Renderer>();
58#else
59 return std::make_unique<SDL2Renderer>();
60#endif
61
63#if defined(__APPLE__)
64 return std::make_unique<MetalRenderer>();
65#else
66 return nullptr;
67#endif
68
70 return std::make_unique<NullRenderer>();
71
74 default:
75#if defined(__APPLE__) && (TARGET_OS_IPHONE == 1 || TARGET_IPHONE_SIMULATOR == 1)
76 return std::make_unique<MetalRenderer>();
77#elif defined(YAZE_USE_SDL3)
78 return std::make_unique<SDL3Renderer>();
79#else
80 return std::make_unique<SDL2Renderer>();
81#endif
82 }
83 }
84
86 switch (type) {
88 return true;
90#ifdef YAZE_USE_SDL3
91 return true;
92#else
93 return false;
94#endif
96#if defined(__APPLE__)
97 return true;
98#else
99 return false;
100#endif
102 return true;
105 return true;
106 default:
107 return false;
108 }
109 }
110
111 static const char* GetBackendName(RendererBackendType type) {
112 switch (type) {
114 return "SDL2";
116 return "SDL3";
118 return "Metal";
120 return "Null";
122 return "Default";
124 return "AutoDetect";
125 default:
126 return "Unknown";
127 }
128 }
129
131#if defined(__APPLE__) && (TARGET_OS_IPHONE == 1 || TARGET_IPHONE_SIMULATOR == 1)
133#elif defined(YAZE_USE_SDL3)
135#else
137#endif
138 }
139};
140
141} // namespace gfx
142} // namespace yaze
143
144#endif // YAZE_APP_GFX_BACKEND_RENDERER_FACTORY_H_
Factory class for creating IRenderer instances.
static RendererBackendType GetDefaultBackendType()
static std::unique_ptr< IRenderer > Create(RendererBackendType type=RendererBackendType::kDefault)
static const char * GetBackendName(RendererBackendType type)
static bool IsBackendAvailable(RendererBackendType type)
RendererBackendType
Enumeration of available rendering backend types.
@ SDL3
SDL3 renderer backend.
@ SDL2
SDL2 renderer backend.
@ kAutoDetect
Automatically select the best available backend.
@ kDefault
Use the default backend based on build configuration.
@ Null
Null renderer for headless/server mode.
@ Metal
Metal renderer backend (Apple platforms)