builder 和 运行时修改隔离开

This commit is contained in:
2026-08-13 11:25:38 +08:00
parent 9e598a0318
commit 4a48e62aea
57 changed files with 1512 additions and 2592 deletions
@@ -18,8 +18,8 @@ struct Scene2D_Render_Order_State {
std::vector<std::uint64_t> 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) {}
Scene2D_Render_Order_Renderable(Scene2D_Render_Order_State& state, std::uint64_t id)
: Renderable_Base({.cache_enabled = false}), state(&state), id(id) {}
void prepare(const Prepare_Render_Context&) override {
state->append(id);
}
@@ -35,12 +35,15 @@ struct Scene2D_Render_Order_Renderable : Renderable_Base {
TEST(scene2d_render_order_test, separates_dependency_order_from_display_order) {
Scene2D_Context<> scene;
Scene2D_Render_Order_State state;
auto spectrum = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 2);
auto axis = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 1);
scene.attach_renderable(spectrum);
scene.attach_renderable(axis);
scene.set_parent(Scene_Base::Relationship::dependency, spectrum, axis);
scene.set_parent(Scene_Base::Relationship::display, axis, spectrum);
auto spectrum = renderive_Owner<Scene2D_Render_Order_Renderable>::make(state, 2);
auto axis = renderive_Owner<Scene2D_Render_Order_Renderable>::make(state, 1);
{
auto attach = scene.attach_builder();
attach.attach(spectrum);
attach.attach(axis);
attach.set_parent(Scene_Base::Relationship::dependency, spectrum, axis);
attach.set_parent(Scene_Base::Relationship::display, axis, spectrum);
}
scene.render();
scene.wait_for_render();
EXPECT_EQ(state.snapshot(), (std::vector<std::uint64_t>{1, 2}));
@@ -55,16 +58,19 @@ TEST(scene2d_render_order_test, separates_dependency_order_from_display_order) {
TEST(scene2d_render_order_test, shared_overlay_waits_for_every_display_parent) {
Scene2D_Context<> scene;
Scene2D_Render_Order_State state;
auto first_plot = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 2);
auto axis = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 1);
auto second_plot = std::make_shared<Scene2D_Render_Order_Renderable>(scene, state, 3);
scene.attach_renderable(first_plot);
scene.attach_renderable(axis);
scene.attach_renderable(second_plot);
scene.add_parent(Scene_Base::Relationship::dependency, first_plot, axis);
scene.add_parent(Scene_Base::Relationship::dependency, second_plot, axis);
scene.add_parent(Scene_Base::Relationship::display, axis, first_plot);
scene.add_parent(Scene_Base::Relationship::display, axis, second_plot);
auto first_plot = renderive_Owner<Scene2D_Render_Order_Renderable>::make(state, 2);
auto axis = renderive_Owner<Scene2D_Render_Order_Renderable>::make(state, 1);
auto second_plot = renderive_Owner<Scene2D_Render_Order_Renderable>::make(state, 3);
{
auto attach = scene.attach_builder();
attach.attach(first_plot);
attach.attach(axis);
attach.attach(second_plot);
attach.add_parent(Scene_Base::Relationship::dependency, first_plot, axis);
attach.add_parent(Scene_Base::Relationship::dependency, second_plot, axis);
attach.add_parent(Scene_Base::Relationship::display, axis, first_plot);
attach.add_parent(Scene_Base::Relationship::display, axis, second_plot);
}
scene.render();
scene.wait_for_render();
const auto render_order = state.snapshot();