add handlers to allow imgui code with no access to main loop
This commit is contained in:
parent
f6c04bbc78
commit
afc12c44f8
|
|
@ -8,6 +8,7 @@
|
|||
#include <NazaraImgui/Config.hpp>
|
||||
|
||||
#include <imgui.h>
|
||||
#include <unordered_set>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
|
|
@ -19,6 +20,12 @@ namespace Nz
|
|||
class Texture;
|
||||
class Window;
|
||||
|
||||
struct ImguiHandler
|
||||
{
|
||||
public:
|
||||
virtual void OnRenderImgui() = 0;
|
||||
};
|
||||
|
||||
class Imgui : public Nz::ModuleBase<Imgui>
|
||||
{
|
||||
friend ModuleBase;
|
||||
|
|
@ -34,6 +41,10 @@ namespace Nz
|
|||
void Update(Nz::Window& window, float dt);
|
||||
void Render(Nz::RenderWindow& window, Nz::RenderFrame& frame);
|
||||
|
||||
// User-defined
|
||||
void AddHandler(ImguiHandler* handler);
|
||||
void RemoveHandler(ImguiHandler* handler);
|
||||
|
||||
// Clipboard functions
|
||||
static void SetClipboardText(void* userData, const char* text);
|
||||
static const char* GetClipboardText(void* userData);
|
||||
|
|
@ -79,6 +90,8 @@ namespace Nz
|
|||
std::shared_ptr<Nz::RenderBuffer> m_uboBuffer;
|
||||
std::shared_ptr<Nz::Texture> m_fontTexture;
|
||||
|
||||
std::unordered_set<ImguiHandler*> m_handlers;
|
||||
|
||||
static Imgui* s_instance;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -312,10 +312,23 @@ namespace Nz
|
|||
|
||||
void Imgui::Render(Nz::RenderWindow& window, Nz::RenderFrame& frame)
|
||||
{
|
||||
for (auto* handler : m_handlers)
|
||||
handler->OnRenderImgui();
|
||||
|
||||
ImGui::Render();
|
||||
RenderDrawLists(window, frame, ImGui::GetDrawData());
|
||||
}
|
||||
|
||||
void Imgui::AddHandler(ImguiHandler* handler)
|
||||
{
|
||||
m_handlers.insert(handler);
|
||||
}
|
||||
|
||||
void Imgui::RemoveHandler(ImguiHandler* handler)
|
||||
{
|
||||
m_handlers.erase(handler);
|
||||
}
|
||||
|
||||
void Imgui::SetClipboardText(void* userData, const char* text)
|
||||
{
|
||||
Imgui* backend = static_cast<Imgui*>(userData);
|
||||
|
|
|
|||
Loading…
Reference in New Issue