mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-18 18:56:36 +02:00
adopt engine stuff to new update strategy
This commit is contained in:
@ -10,6 +10,7 @@
|
||||
#include <mm/opengl/texture_loader.hpp>
|
||||
#include "../opengl/res/default_texture.h" // data
|
||||
#include "../opengl/res/errig_texture.h" // data
|
||||
#include "mm/update_strategies/update_strategy.hpp"
|
||||
|
||||
#include <tracy/Tracy.hpp>
|
||||
#ifndef MM_OPENGL_3_GLES
|
||||
@ -67,18 +68,6 @@ bool OpenGLRenderer::enable(Engine& engine) {
|
||||
targets["display"]->_resize = false; // its done for us
|
||||
}
|
||||
|
||||
_render_handle = engine.addUpdate([this](Engine& e){ this->render(e); });
|
||||
if (_render_handle.expired()) {
|
||||
LOG_ERROR("couldn't add update function!");
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
auto tmp_lock = _render_handle.lock();
|
||||
tmp_lock->priority = -10;
|
||||
tmp_lock->name = "render";
|
||||
}
|
||||
|
||||
_sdl_event_handle = sdl_s.addEventHandler([this, &engine](const SDL_Event& e) -> bool {
|
||||
if (e.type == SDL_WINDOWEVENT) {
|
||||
if (e.window.event == SDL_WINDOWEVENT_RESIZED || e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||
@ -138,12 +127,7 @@ bool OpenGLRenderer::enable(Engine& engine) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void OpenGLRenderer::disable(Engine& engine) {
|
||||
if (!_render_handle.expired()) {
|
||||
engine.removeUpdate(_render_handle);
|
||||
_render_handle.reset();
|
||||
}
|
||||
|
||||
void OpenGLRenderer::disable(Engine&) {
|
||||
// TODO: do we need this??
|
||||
targets.clear();
|
||||
render_tasks.clear();
|
||||
@ -152,6 +136,17 @@ void OpenGLRenderer::disable(Engine& 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");
|
||||
|
||||
|
@ -28,7 +28,6 @@ namespace MM::Services {
|
||||
}
|
||||
|
||||
private:
|
||||
Engine::FunctionDataHandle _render_handle;
|
||||
SDLService::EventHandlerHandle _sdl_event_handle = nullptr;
|
||||
|
||||
public:
|
||||
@ -37,6 +36,9 @@ namespace MM::Services {
|
||||
|
||||
const char* name(void) override { return "OpenGLRendererService"; }
|
||||
|
||||
std::vector<UpdateStrategies::UpdateCreationInfo> registerUpdates(void) override;
|
||||
|
||||
|
||||
private:
|
||||
void render(Engine& engine);
|
||||
};
|
||||
|
@ -116,11 +116,11 @@ TEST(blur_render_task, it) {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
auto e = scene.create();
|
||||
auto& t = scene.emplace<MM::Components::Transform2D>(e);
|
||||
t.position.x = i * 9.f - 40;
|
||||
t.position.x = float(i) * 9.f - 40.f;
|
||||
t.scale = {5,5};
|
||||
|
||||
auto& v = scene.emplace<MM::Components::Velocity2D>(e);
|
||||
v.rotation = i * 0.3f;
|
||||
v.rotation = float(i) * 0.3f;
|
||||
|
||||
if (mt() % 2) {
|
||||
auto& col = scene.emplace<MM::Components::Color>(e);
|
||||
@ -132,12 +132,6 @@ TEST(blur_render_task, it) {
|
||||
|
||||
}
|
||||
|
||||
engine.addUpdate(
|
||||
[&](MM::Engine&) {
|
||||
ImGui::ColorEdit4("rect_col", &bsrr_rend.default_color[0]);
|
||||
}
|
||||
);
|
||||
|
||||
engine.run();
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include "mm/services/service.hpp"
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <mm/engine.hpp>
|
||||
@ -7,6 +8,8 @@
|
||||
#include <mm/services/imgui_s.hpp>
|
||||
#include <mm/opengl/render_tasks/imgui.hpp>
|
||||
|
||||
#include <entt/core/hashed_string.hpp>
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
|
||||
TEST(imgui_render_task, demowindow) {
|
||||
@ -22,19 +25,26 @@ TEST(imgui_render_task, demowindow) {
|
||||
engine.addService<MM::Services::ImGuiService>();
|
||||
ASSERT_TRUE(engine.enableService<MM::Services::ImGuiService>());
|
||||
|
||||
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(); }
|
||||
}};
|
||||
}
|
||||
|
||||
};
|
||||
engine.addService<ImGuiDemoWindowService>();
|
||||
ASSERT_TRUE(engine.enableService<ImGuiDemoWindowService>());
|
||||
|
||||
rs.addRenderTask<MM::OpenGL::RenderTasks::ImGuiRT>(engine);
|
||||
|
||||
auto handle = engine.addUpdate([](MM::Engine&) {
|
||||
ImGui::ShowDemoWindow();
|
||||
}
|
||||
);
|
||||
|
||||
{
|
||||
auto tmp_lock = handle.lock();
|
||||
tmp_lock->priority = 0;
|
||||
tmp_lock->name = "imgui demo window";
|
||||
}
|
||||
|
||||
engine.run();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user