mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-18 18:56:36 +02:00
reworked the general update strategy interface
This commit is contained in:
@ -43,7 +43,7 @@ OpenGLRenderer::OpenGLRenderer(void) {
|
||||
OpenGLRenderer::~OpenGLRenderer(void) {
|
||||
}
|
||||
|
||||
bool OpenGLRenderer::enable(Engine& engine) {
|
||||
bool OpenGLRenderer::enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& task_array) {
|
||||
if (!engine.tryService<SDLService>()) {
|
||||
LOG_ERROR("OpenGLRenderer requires SDLService");
|
||||
return false;
|
||||
@ -126,6 +126,14 @@ bool OpenGLRenderer::enable(Engine& engine) {
|
||||
}
|
||||
}
|
||||
|
||||
{ // add task
|
||||
task_array.push_back(
|
||||
UpdateStrategies::TaskInfo{"OpenGLRenderer::render"}
|
||||
.phase(UpdateStrategies::update_phase_t::POST)
|
||||
.fn([this](Engine& e){ this->render(e); })
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -138,17 +146,6 @@ void OpenGLRenderer::disable(Engine&) {
|
||||
MM::ResourceManager<MM::OpenGL::Texture>::ref().clear();
|
||||
}
|
||||
|
||||
std::vector<UpdateStrategies::UpdateCreationInfo> OpenGLRenderer::registerUpdates(void) {
|
||||
return {
|
||||
{
|
||||
"OpenGLRenderer::render"_hs,
|
||||
"OpenGLRenderer::render",
|
||||
[this](Engine& e){ this->render(e); },
|
||||
UpdateStrategies::update_phase_t::POST
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void OpenGLRenderer::render(Engine& engine) {
|
||||
ZoneScopedN("MM::Services::OpenGLRenderer::render");
|
||||
|
||||
|
@ -31,14 +31,11 @@ namespace MM::Services {
|
||||
SDLService::EventHandlerHandle _sdl_event_handle = nullptr;
|
||||
|
||||
public:
|
||||
bool enable(Engine& engine) override;
|
||||
bool enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& task_array) override;
|
||||
void disable(Engine& engine) override;
|
||||
|
||||
const char* name(void) override { return "OpenGLRendererService"; }
|
||||
|
||||
std::vector<UpdateStrategies::UpdateCreationInfo> registerUpdates(void) override;
|
||||
|
||||
|
||||
private:
|
||||
void render(Engine& engine);
|
||||
};
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
namespace MM::Services {
|
||||
|
||||
bool ImGuiOpenGLRendererTools::enable(Engine& engine) {
|
||||
bool ImGuiOpenGLRendererTools::enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& task_array) {
|
||||
auto& menu_bar = engine.getService<MM::Services::ImGuiMenuBar>();
|
||||
|
||||
menu_bar.menu_tree["OpenGL"]["RenderTasks"] = [this](Engine&) {
|
||||
@ -21,6 +21,13 @@ bool ImGuiOpenGLRendererTools::enable(Engine& engine) {
|
||||
ImGui::MenuItem("Texture Cache (legacy)", NULL, &_show_texture_cache_legacy);
|
||||
};
|
||||
|
||||
// add task
|
||||
task_array.push_back(
|
||||
UpdateStrategies::TaskInfo{"ImGuiOpenGLRendererTools::render"}
|
||||
.fn([this](Engine& e) { renderImGui(e); })
|
||||
.succeed("ImGuiMenuBar::render")
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -31,22 +38,6 @@ void ImGuiOpenGLRendererTools::disable(Engine& engine) {
|
||||
menu_bar.menu_tree["OpenGL"].erase("TextureCacheLegacy");
|
||||
}
|
||||
|
||||
std::vector<UpdateStrategies::UpdateCreationInfo> ImGuiOpenGLRendererTools::registerUpdates(void) {
|
||||
using namespace entt::literals;
|
||||
return {
|
||||
{
|
||||
"ImGuiOpenGLRendererTools::render"_hs,
|
||||
"ImGuiOpenGLRendererTools::render",
|
||||
[this](Engine& e) { renderImGui(e); },
|
||||
UpdateStrategies::update_phase_t::MAIN,
|
||||
true,
|
||||
{
|
||||
"ImGuiMenuBar::render"_hs
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void ImGuiOpenGLRendererTools::renderImGui(Engine& engine) {
|
||||
if (_show_render_tasks) {
|
||||
renderRenderTasks(engine);
|
||||
|
@ -8,11 +8,9 @@ namespace MM::Services {
|
||||
public:
|
||||
const char* name(void) override { return "ImGuiOpenGLRendererTools"; }
|
||||
|
||||
bool enable(Engine& engine) override;
|
||||
bool enable(Engine& engine, std::vector<UpdateStrategies::TaskInfo>& task_array) override;
|
||||
void disable(Engine& engine) override;
|
||||
|
||||
std::vector<UpdateStrategies::UpdateCreationInfo> registerUpdates(void) override;
|
||||
|
||||
private:
|
||||
bool _show_render_tasks = false;
|
||||
bool _show_texture_cache_legacy = false;
|
||||
|
@ -30,17 +30,16 @@ TEST(imgui_render_task, demowindow) {
|
||||
class ImGuiDemoWindowService : public MM::Services::Service {
|
||||
public:
|
||||
const char* name(void) override { return "ImGuiDemoWindowService"; }
|
||||
bool enable(MM::Engine&) override { return true; }
|
||||
void disable(MM::Engine&) override {}
|
||||
|
||||
std::vector<MM::UpdateStrategies::UpdateCreationInfo> registerUpdates(void) override {
|
||||
return {{
|
||||
"ImGuiDemoWindow"_hs,
|
||||
"ImGuiDemoWindow",
|
||||
[](MM::Engine&) { ImGui::ShowDemoWindow(); }
|
||||
}};
|
||||
bool enable(MM::Engine&, std::vector<MM::UpdateStrategies::TaskInfo>& task_array) override {
|
||||
task_array.push_back(
|
||||
MM::UpdateStrategies::TaskInfo{"ImGuiDemoWindow"}
|
||||
.fn([](MM::Engine&) { ImGui::ShowDemoWindow(); })
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
void disable(MM::Engine&) override {}
|
||||
};
|
||||
engine.addService<ImGuiDemoWindowService>();
|
||||
ASSERT_TRUE(engine.enableService<ImGuiDemoWindowService>());
|
||||
|
Reference in New Issue
Block a user