#include #include #include #include #include "renderive/renderable/Renderable.hpp" #include "renderive/scene/Scene.hpp" struct Scene2D_Render_Order_State { std::vector render_order; }; struct Scene2D_Render_Order_Renderable : Renderable_Base { Scene2D_Render_Order_Renderable(Scene_Base& scene, Scene2D_Render_Order_State& state, std::uint64_t id) : Renderable_Base(scene, {.cache_enabled = false}), state(&state), id(id) {} void render(const Scene_Render_Context& context) override { state->render_order.push_back(id); dynamic_cast(*context.color_cache).append(id); } Scene2D_Render_Order_State* state; std::uint64_t id; }; TEST(scene2d_render_order_test, separates_dependency_order_from_display_order) { Scene2D_Context<> scene; Scene2D_Render_Order_State state; auto spectrum = std::make_shared(scene, state, 2); auto axis = std::make_shared(scene, state, 1); scene.attach_renderable(spectrum); scene.attach_renderable(axis); scene.set_dependency_parent(*spectrum, axis.get()); scene.set_display_parent(*axis, spectrum.get()); scene.render(); scene.wait_for_render(); EXPECT_EQ(state.render_order, (std::vector{1, 2})); std::vector final_values; scene.with_final_color_cache([&final_values](const Recording_Color_Cache& cache) { final_values.assign(cache.values.begin(), cache.values.end()); }); EXPECT_EQ(final_values.size(), 2); EXPECT_EQ(final_values.at(0), 2); EXPECT_EQ(final_values.at(1), 1); }