Added texture managment and overridable init/cleanup functions.

This commit is contained in:
2025-03-04 00:16:57 +01:00
parent 53efca4729
commit 08ea619a8e
5 changed files with 253 additions and 120 deletions

View File

@@ -40,15 +40,35 @@ private:
SDL_GLContext mGLContext = nullptr;
mijin::StackedFileSystemAdapter mFS;
std::unordered_map<fs::path, ImTextureID> mTextures;
bool mRunning = true;
ImGuiWindowFlags mMainWindowFlags = DEFAULT_MAIN_WINDOW_FLAGS;
using glClear_fn_t = void (*)(std::uint32_t);
using glClearColor_fn_t = void (*)(float, float, float, float);
using GLbitfield = std::uint32_t;
using GLint = std::int32_t;
using GLuint = std::uint32_t;
using GLsizei = std::int32_t;
using GLenum = std::uint32_t;
using GLfloat = float;
using glClear_fn_t = void (*)(GLbitfield);
using glClearColor_fn_t = void (*)(GLfloat, GLfloat, GLfloat, GLfloat);
using glGenTextures_fn_t = void (*)(GLsizei, GLuint*);
using glBindTexture_fn_t = void (*)(GLenum, GLuint);
using glTexParameteri_fn_t = void (*)(GLenum, GLenum, GLint);
using glPixelStorei_fn_t = void (*)(GLenum, GLint);
using glTexImage2D_fn_t = void (*)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
using glDeleteTextures_fn_t = void (*)(GLsizei, const GLuint*);
glClear_fn_t glClear;
glClearColor_fn_t glClearColor;
glGenTextures_fn_t glGenTextures;
glBindTexture_fn_t glBindTexture;
glTexParameteri_fn_t glTexParameteri;
glPixelStorei_fn_t glPixelStorei;
glTexImage2D_fn_t glTexImage2D;
glDeleteTextures_fn_t glDeleteTextures;
public:
virtual ~Application() = default;
@@ -64,6 +84,9 @@ public:
[[nodiscard]]
bool loadFont(const fs::path& path);
[[nodiscard]]
ImTextureID getOrLoadTexture(fs::path path);
protected:
virtual void render() = 0;
virtual std::string getFolderName() = 0;
@@ -123,11 +146,12 @@ protected:
std::string text = fmt::format(format, std::forward<TArg>(arg), std::forward<TArgs>(args)...);
msgError(text);
}
virtual bool init();
virtual void cleanup();
private:
bool initSDL();
bool initGL();
bool initImGui();
void cleanup();
void handleSDLEvents();
void loadImGuiConfig();
void saveImGuiConfig();
@@ -152,7 +176,7 @@ private:
std::string mFolderName;
std::string mWindowTitle;
public:
void init(QuickAppOptions options);
void preInit(QuickAppOptions options);
void render() override;
std::string getFolderName() override;
std::string getWindowTitle() override;