builder 和 运行时修改隔离开
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user