reworked the general update strategy interface

This commit is contained in:
2021-04-28 19:38:25 +02:00
parent b8a5cd7cf4
commit efad254193
53 changed files with 756 additions and 889 deletions

View File

@ -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");

View File

@ -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);
};

View File

@ -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);

View File

@ -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;

View File

@ -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>());