BACKENDS: Move setImGuiRenderCallback in OSystem and hide implementation

This avoids dynamic casts and having a variable defined in
backends not supporting ImGui
This commit is contained in:
Le Philousophe 2024-04-28 17:42:32 +02:00 committed by Eugene Sandulenko
parent 8b64e9a61a
commit 3822d9d644
7 changed files with 36 additions and 13 deletions

View file

@ -48,6 +48,9 @@ public:
virtual int getDefaultGraphicsMode() const { return 0; }
virtual bool setGraphicsMode(int mode, uint flags = OSystem::kGfxModeNoFlags) { return (mode == 0); }
virtual int getGraphicsMode() const { return 0; }
#if defined(USE_IMGUI)
virtual void setImGuiRenderCallback(void(*render)()) { }
#endif
virtual bool setShader(const Common::Path &fileName) { return false; }
virtual const OSystem::GraphicsMode *getSupportedStretchModes() const {
static const OSystem::GraphicsMode noStretchModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
@ -113,11 +116,6 @@ public:
virtual void saveScreenshot() {}
virtual bool lockMouse(bool lock) { return false; }
virtual void setImGuiRenderCallback(void(*render)()) { _imGuiRender = render; }
protected:
void(*_imGuiRender)() = nullptr;
};
#endif

View file

@ -205,6 +205,15 @@ protected:
private:
void toggleFullScreen();
#if defined(USE_IMGUI) && SDL_VERSION_ATLEAST(2, 0, 0)
public:
void setImGuiRenderCallback(void(*render)()) override { _imGuiRender = render; }
protected:
void(*_imGuiRender)() = nullptr;
#endif
};
#endif

View file

@ -73,6 +73,12 @@ int ModularGraphicsBackend::getGraphicsMode() const {
return _graphicsManager->getGraphicsMode();
}
#if defined(USE_IMGUI)
void ModularGraphicsBackend::setImGuiRenderCallback(void(*render)()) {
_graphicsManager->setImGuiRenderCallback(render);
}
#endif
bool ModularGraphicsBackend::setShader(const Common::Path &fileName) {
return _graphicsManager->setShader(fileName);
}

View file

@ -67,6 +67,9 @@ public:
int getDefaultGraphicsMode() const override;
bool setGraphicsMode(int mode, uint flags = kGfxModeNoFlags) override;
int getGraphicsMode() const override;
#if defined(USE_IMGUI)
void setImGuiRenderCallback(void(*render)()) override final;
#endif
bool setShader(const Common::Path &name) override final;
const GraphicsMode *getSupportedStretchModes() const override final;
int getDefaultStretchMode() const override final;

View file

@ -907,6 +907,17 @@ public:
virtual void *getOpenGLProcAddress(const char *name) const { return nullptr; }
#endif
#if defined(USE_IMGUI)
/**
* Set the address for ImGui rendering callback
*
* This is only supported on select backends desktop oriented
*
* @param render The function pointer called while rendering on screen
*/
virtual void setImGuiRenderCallback(void(*render)()) { }
#endif
/**
* Load the specified shader.
*

View file

@ -291,10 +291,7 @@ Common::Error DirectorEngine::run() {
#ifdef USE_IMGUI
onImGuiInit();
ModularGraphicsBackend *gfxBackend = dynamic_cast<ModularGraphicsBackend *>(_system);
if (gfxBackend) {
gfxBackend->getGraphicsManager()->setImGuiRenderCallback(onImGuiRender);
}
_system->setImGuiRenderCallback(onImGuiRender);
#endif
bool loop = true;
@ -324,6 +321,7 @@ Common::Error DirectorEngine::run() {
}
#ifdef USE_IMGUI
_system->setImGuiRenderCallback(nullptr);
onImGuiCleanup();
#endif

View file

@ -874,10 +874,7 @@ Common::Error TwpEngine::run() {
#ifdef USE_IMGUI
onImGuiInit();
ModularGraphicsBackend *gfxBackend = dynamic_cast<ModularGraphicsBackend *>(_system);
if (gfxBackend) {
gfxBackend->getGraphicsManager()->setImGuiRenderCallback(onImGuiRender);
}
_system->setImGuiRenderCallback(onImGuiRender);
#endif
// Simple event handling loop
@ -1105,6 +1102,7 @@ Common::Error TwpEngine::run() {
}
#ifdef USE_IMGUI
_system->setImGuiRenderCallback(nullptr);
onImGuiCleanup();
#endif