结构优化

This commit is contained in:
2026-08-13 15:17:02 +08:00
parent 65cf786e2d
commit e8e8b29806
25 changed files with 822 additions and 461 deletions
@@ -9,21 +9,22 @@
#include <string>
#include <thread>
#include "renderive/renderable/Renderable.hpp"
#include "renderive/renderable/Renderable_Test_Harness.hpp"
#include "renderive/scene/Scene.hpp"
#include "Scene_Test_Helpers.hpp"
namespace {
class Pipeline_Renderable : public Renderable_Base {
class Pipeline_Renderable : public Renderable_Test_Harness {
public:
explicit Pipeline_Renderable(bool cached = false)
: Renderable_Base({.cache_enabled = cached}) {}
: Renderable_Test_Harness({.cache_enabled = cached}) {}
std::function<void()> prepare_action;
std::function<void()> paint_action;
std::atomic<int> prepare_count{};
std::atomic<int> paint_count{};
protected:
void build_prepare_graph(Renderable_Graph_Builder& builder) override {
void build_prepare_graph_for_test(Renderable_Graph_Builder& builder) override {
builder.emplace("prepare", "Prepare",
[this](const Prepare_Render_Context&) {
++prepare_count;
@@ -31,7 +32,7 @@ protected:
prepare_action();
});
}
void build_paint_graph(Renderable_Graph_Builder& builder) override {
void build_paint_graph_for_test(Renderable_Graph_Builder& builder) override {
const auto paint = builder.emplace(
"paint", "Paint",
[this](const Paint_Render_Context&) {
@@ -43,18 +44,18 @@ protected:
}
};
class Dynamic_Renderable : public Renderable_Base {
class Dynamic_Renderable : public Renderable_Test_Harness {
public:
explicit Dynamic_Renderable() : Renderable_Base() {}
explicit Dynamic_Renderable() = default;
void set_chunk_count(std::size_t count) {
chunk_count_ = count;
rebuild_render_graph();
rebuild_render_graph_for_test();
}
std::shared_ptr<const Renderable_Graph> graph_snapshot() {
return render_graph();
return render_graph_for_test();
}
protected:
void build_prepare_graph(Renderable_Graph_Builder& builder) override {
void build_prepare_graph_for_test(Renderable_Graph_Builder& builder) override {
const auto root = builder.emplace("prepare", "Prepare",
[](const Prepare_Render_Context&) {});
for (std::size_t index = 0; index < chunk_count_; ++index) {
@@ -97,8 +98,8 @@ TEST(render_plan_execution_test, dependency_edges_connect_prepare_only_and_layer
with_attach_builder(scene, [&](auto& attach) {
attach.attach(parent);
attach.attach(child);
attach.set_parent(Scene_Base::Relationship::dependency, child, parent);
attach.set_parent(Scene_Base::Relationship::display, child, parent);
attach.set_dependency_parent(child, parent);
attach.set_display_parent(child, parent);
});
scene.render();
scene.wait_for_render();
@@ -169,7 +170,7 @@ TEST(render_plan_execution_test, dependent_prepare_does_not_wait_for_dependency_
with_attach_builder(scene, [&](auto& attach) {
attach.attach(parent);
attach.attach(child);
attach.set_parent(Scene_Base::Relationship::dependency, child, parent);
attach.set_dependency_parent(child, parent);
});
scene.render();
{
@@ -195,8 +196,8 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
attach_initial(scene, renderable);
scene.render();
scene.wait_for_render();
EXPECT_TRUE(renderable->prepare_cache_valid());
EXPECT_TRUE(renderable->paint_cache_valid());
EXPECT_TRUE(renderable->prepare_cache_valid_for_test());
EXPECT_TRUE(renderable->paint_cache_valid_for_test());
const auto first_plan = scene.render_plan_snapshot();
const Render_Node_Id prepare_id = node(*first_plan, renderable->renderable_id(),
Render_Node_Kind::prepare).node_id;
@@ -213,9 +214,9 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
value.kind != Render_Node_Kind::composite;
}), 0);
renderable->invalidate_paint();
EXPECT_TRUE(renderable->prepare_cache_valid());
EXPECT_FALSE(renderable->paint_cache_valid());
renderable->invalidate_paint_for_test();
EXPECT_TRUE(renderable->prepare_cache_valid_for_test());
EXPECT_FALSE(renderable->paint_cache_valid_for_test());
scene.render();
scene.wait_for_render();
const auto paint_plan = scene.render_plan_snapshot();
@@ -228,9 +229,9 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
value.kind == Render_Node_Kind::prepare;
}), 0);
renderable->invalidate_prepare();
EXPECT_FALSE(renderable->prepare_cache_valid());
EXPECT_FALSE(renderable->paint_cache_valid());
renderable->invalidate_prepare_for_test();
EXPECT_FALSE(renderable->prepare_cache_valid_for_test());
EXPECT_FALSE(renderable->paint_cache_valid_for_test());
scene.render();
scene.wait_for_render();
const auto rebuilt_plan = scene.render_plan_snapshot();
@@ -242,7 +243,7 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
}
TEST(render_plan_execution_test, logical_node_ids_are_stable_and_retired_ids_are_never_reused) {
Scene_Base scene;
Scene2D_Context<> scene;
auto renderable = renderive_Owner<Dynamic_Renderable>::make();
attach_initial(scene, renderable);
const auto first = renderable->graph_snapshot();