#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace entt::literals; const char* argv0; TEST(blur_render_task, it) { MM::Engine engine; auto& sdl_ss = engine.addService(); ASSERT_TRUE(engine.enableService()); sdl_ss.createGLWindow("blur_render_task_test", 1280, 720); engine.addService(); ASSERT_TRUE(engine.enableService()); bool provide_ret = engine.provide(); ASSERT_TRUE(provide_ret); auto& scene = engine.tryService()->getScene(); engine.addService(argv0, "blur_render_task_test"); ASSERT_TRUE(engine.enableService()); engine.addService(); ASSERT_TRUE(engine.enableService()); auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); //rs.addRenderTask(engine).target_fbo = "game_view"; rs.addRenderTask(engine).target_fbo = "blur_io"; MM::OpenGL::RenderTasks::SimpleRect& bsrr_rend = rs.addRenderTask(engine); bsrr_rend.target_fbo = "blur_io"; MM::OpenGL::RenderTasks::Blur& blur_rend = rs.addRenderTask(engine); blur_rend.io_tex = "blur_io"; blur_rend.temp_tex = "blur_temp"; blur_rend.io_fbo = "blur_io"; blur_rend.temp_fbo = "blur_temp"; // render to display auto& ctfb = rs.addRenderTask(engine); ctfb.src_tex = "blur_io"; ctfb.target_fbo = "display"; rs.addRenderTask(engine); auto [w, h] = sdl_ss.getWindowSize(); auto& rm_t = MM::ResourceManager::ref(); { // setup textures rm_t.load( "blur_io", GL_RGB, w, h, GL_RGB, GL_UNSIGNED_BYTE ); rm_t.load( "blur_temp", GL_RGB, w, h, GL_RGB, GL_UNSIGNED_BYTE ); } { // setup fbo s //rs.targets["game_view"] = MM::OpenGL::FBOBuilder::start() //.attachTexture(MM::OpenGL::Texture::createEmpty(GL_RGB, w, h, GL_RGB, GL_UNSIGNED_BYTE)) //.finish(); rs.targets["blur_io"] = MM::OpenGL::FBOBuilder::start() .attachTexture(rm_t.get("blur_io"_hs)) .setResize(true) .finish(); rs.targets["blur_temp"] = MM::OpenGL::FBOBuilder::start() .attachTexture(rm_t.get("blur_temp"_hs)) .setResize(true) .finish(); } // setup v system MM::AddSystemToScene(scene, MM::Systems::SimpleVelocity); std::mt19937 mt(42); for (int i = 0; i < 10; i++) { auto e = scene.create(); auto& t = scene.emplace(e); t.position.x = float(i) * 9.f - 40.f; t.scale = {5,5}; auto& v = scene.emplace(e); v.rotation = float(i) * 0.3f; if (mt() % 2) { auto& col = scene.emplace(e); auto rc = [&mt]() -> float { return (mt() % 1001) / 1000.f ; }; col.color = {rc(),rc(),rc(),1}; } } engine.run(); } int main(int argc, char** argv) { argv0 = argv[0]; ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }