大重构改完

This commit is contained in:
2026-08-12 21:31:02 +08:00
parent 7c00b8565d
commit 15c3d21f2d
73 changed files with 4303 additions and 1727 deletions
@@ -8,7 +8,7 @@
static_assert(std::same_as<decltype(std::declval<const Scene2D_Context<>&>().topology_snapshot()), Scene_Base::Topology_Snapshot>);
struct Scene2D_Context_Test_Renderable : Renderable_Base {
explicit Scene2D_Context_Test_Renderable(Scene_Base& scene) : Renderable_Base(scene, {.cache_enabled = false}) {}
void render(const Scene_Render_Context& context) override {
void prepare(const Scene_Render_Context& context) override {
++render_count;
scene_is_2d = dynamic_cast<Scene_2D_Base*>(context.scene) != nullptr;
render_thread = std::this_thread::get_id();
@@ -38,7 +38,7 @@ TEST(scene2d_context_test, swaps_renderable_cache_and_renders_in_background) {
}
struct Scene2D_Final_Cache_Blocking_Renderable : Renderable_Base {
explicit Scene2D_Final_Cache_Blocking_Renderable(Scene_Base& scene) : Renderable_Base(scene, {.cache_enabled = false}) {}
void render(const Scene_Render_Context&) override {
void prepare(const Scene_Render_Context&) override {
while (!release.load(std::memory_order_acquire)) {
started.store(true, std::memory_order_release);
std::this_thread::yield();
@@ -73,9 +73,14 @@ TEST(scene2d_context_test, final_color_cache_access_waits_for_render_completion)
}
struct Scene2D_Cached_Renderable : Renderable_Base {
Scene2D_Cached_Renderable(Scene_Base& scene, std::uint64_t value) : Renderable_Base(scene, {.cache_enabled = true}), value(value) {}
void render(const Scene_Render_Context& context) override {
void prepare(const Scene_Render_Context&) override {
++render_count;
}
void build_paint_graph(Renderable_Graph_Builder& graph) override {
graph.emplace("paint", "Paint", Render_Node_Kind::paint,
[this](const Scene_Render_Context& context) {
dynamic_cast<Recording_Color_Cache&>(*context.color_cache).append(value);
});
}
std::uint64_t value;
int render_count{};
@@ -131,11 +136,11 @@ TEST(scene2d_context_test, multiple_dependency_parents_invalidate_cached_child)
scene.render();
scene.wait_for_render();
EXPECT_EQ(child->render_count, 1);
first_parent->invalidate_cache();
first_parent->invalidate_prepare();
scene.render();
scene.wait_for_render();
EXPECT_EQ(child->render_count, 2);
second_parent->invalidate_cache();
second_parent->invalidate_prepare();
scene.render();
scene.wait_for_render();
EXPECT_EQ(child->render_count, 3);