start template refactor

This commit is contained in:
2026-02-07 11:45:43 -06:00
parent 8b0192c9b8
commit 9a89ab3bbc
8 changed files with 475 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
#ifndef RENDERER_IMPL
#define RENDERER_IMPL
#include "pch.hpp"
namespace Archimedes {
template <typename T>
class RendererImpl {
public:
typedef void renderCmd();
RendererImpl() {};
~RendererImpl() {};
bool init(void* p) {
return false;
};
void render(std::list<std::function<void()>> cmdList, int& w, int& h) {
for(auto f : cmdList)
f();
}
private:
T rendererImpl;
};
}
#endif

View File

@@ -0,0 +1,36 @@
#ifndef RENDERER_OPENGL
#define RENDERER_OPENGL
#include "pch.hpp"
#define GLEW_STATIC
#include <GL/glew.h>
namespace Archimedes {
class RendererOpenGL {
public:
typedef void renderCmd();
RendererOpenGL() {};
~RendererOpenGL() {};
bool init(void* p) {
return glewInit() == GLEW_OK;
};
void render(std::list<std::function<void()>> cmdList, int& w, int& h) {
glViewport(0, 0, w, h);
glClearColor(0.2, 0.2, 0.4, 1);
glClear(GL_COLOR_BUFFER_BIT);
for(auto f : cmdList)
f();
}
};
}
#endif

View File

@@ -0,0 +1,41 @@
#ifndef RENDERER_SDL3
#define RENDERER_SDL3
#include "pch.hpp"
#include <SDL3/SDL.h>
namespace Archimedes {
class RendererSDL3 {
public:
typedef void renderCmd();
RendererSDL3() {};
~RendererSDL3() { SDL_DestroyRenderer(renderer); };
bool init(void* window) {
renderer = SDL_CreateRenderer((SDL_Window*) window, nullptr);
SDL_SetRenderVSync(renderer, 1);
return renderer != nullptr;
};
void render(std::list<std::function<void()>> cmdList, int& w, int& h) {
//SDL_SetRenderScale(renderer, w, h);
SDL_RenderClear(renderer);
for(auto f : cmdList)
f();
SDL_RenderPresent(renderer);
}
SDL_Renderer* renderer = nullptr;
};
}
#endif

View File

@@ -0,0 +1,21 @@
#ifndef RENDERER_CONCEPTS
#define RENDERER_CONCEPTS
#include "pch.hpp"
namespace Archimedes {
class RendererOpenGL;
class RendererSDL3;
template <class RendererImpl>
concept allowed_renderers = requires (RendererImpl r) {
#ifndef CUSTOM_RENDERER
requires std::same_as<RendererImpl, RendererOpenGL>
|| std::same_as<RendererImpl, RendererSDL3>;
#endif
};
}
#endif