修改一些

This commit is contained in:
2026-08-18 10:50:14 +08:00
parent 4581b3fc05
commit 182fa2232a
26 changed files with 695 additions and 126 deletions
@@ -1,4 +1,5 @@
#include "render_2D/scene/Render_Scene_2D.h"
#include <renderive/renderable/Renderable_Build.hpp>
#include <gtest/gtest.h>
#include <memory>
@@ -13,7 +14,7 @@ std::unique_ptr<Render_Scene_2D> make_scene(
.configure([&](Render_Scene_2D::Properties& properties) {
properties = state;
})
.build();
.build().value();
}
TEST(RenderScene2DFramePipeline, BuilderOwnsConstructionAndState) {
@@ -25,6 +26,72 @@ TEST(RenderScene2DFramePipeline, BuilderOwnsConstructionAndState) {
EXPECT_EQ(scene->root_renderable()->object_name(), "root");
}
TEST(RenderScene2DFramePipeline, SceneBuilderOwnsRenderableGroupAndObjectNames) {
auto builder = Render_Scene_2D::Builder(
std::make_shared<Manual_Render_Scene_2D_Strategy>());
const auto root = builder.root_renderable();
auto child = detail::make_renderable_group(false, "child");
Renderable_Build_Topology topology;
topology.dependency.push_back(
detail::build_relationship(child, root));
topology.display.push_back(
detail::build_relationship(child, root));
detail::Renderable_Build_Access::set_topology(*child, std::move(topology));
builder.add_renderable(child);
auto built_scene = builder.build();
ASSERT_TRUE(built_scene);
ASSERT_TRUE(*built_scene);
EXPECT_EQ(child->object_name(), "child");
EXPECT_EQ((*built_scene)->observer().renderable_count, 2U);
}
TEST(RenderScene2DFramePipeline, SceneBuilderRejectsMissingDependencyEndpoint) {
auto builder = Render_Scene_2D::Builder(
std::make_shared<Manual_Render_Scene_2D_Strategy>());
const auto root = builder.root_renderable();
auto external = detail::make_renderable_group(false, "external");
auto child = detail::make_renderable_group(false, "child");
Renderable_Build_Topology topology;
topology.dependency.push_back(
detail::build_relationship(child, external));
topology.display.push_back(
detail::build_relationship(child, root));
detail::Renderable_Build_Access::set_topology(*child, std::move(topology));
builder.add_renderable(child);
auto built_scene = builder.build();
ASSERT_FALSE(built_scene);
EXPECT_EQ(built_scene.error(),
Scene_Build_Result::dependency_endpoint_missing);
}
TEST(RenderScene2DFramePipeline, SceneBuilderRejectsDependencyCycle) {
auto builder = Render_Scene_2D::Builder(
std::make_shared<Manual_Render_Scene_2D_Strategy>());
auto first = detail::make_renderable_group(false, "first");
auto second = detail::make_renderable_group(false, "second");
Renderable_Build_Topology first_topology;
first_topology.dependency.push_back(
detail::build_relationship(first, second));
detail::Renderable_Build_Access::set_topology(
*first, std::move(first_topology));
Renderable_Build_Topology second_topology;
second_topology.dependency.push_back(
detail::build_relationship(second, first));
detail::Renderable_Build_Access::set_topology(
*second, std::move(second_topology));
builder.add_renderable(first);
builder.add_renderable(second);
auto built_scene = builder.build();
ASSERT_FALSE(built_scene);
EXPECT_EQ(built_scene.error(), Scene_Build_Result::dependency_cycle);
}
TEST(RenderScene2DFramePipeline, SceneValidityDoesNotGateStrategyProgress) {
Render_Scene_2D::State state;
state.viewport = {80, 45};
@@ -13,7 +13,7 @@ TEST(RenderScene2DIntegration, BuilderStatePublishesAtFrameBoundary) {
.configure([&](Render_Scene_2D::Properties& properties) {
properties = initial;
})
.build();
.build().value();
scene->activate_view();
ASSERT_EQ(scene->render_frame().value(), Plot_Render_Status::rendered);
ASSERT_EQ(scene->wait_for_render(), Scene_Render_Result::none);
@@ -28,7 +28,7 @@ TEST(RenderScene2DIntegration, FrameImageMatchesConfiguredViewport) {
.configure([&](Render_Scene_2D::Properties& properties) {
properties = state;
})
.build();
.build().value();
scene->activate_view();
ASSERT_EQ(scene->render_frame().value(), Plot_Render_Status::rendered);
ASSERT_EQ(scene->wait_for_render(), Scene_Render_Result::none);
@@ -47,7 +47,7 @@ TEST(RenderScene2DIntegration, FrameStrategyIsReplacedInsideRenderableEdit) {
.configure([&](Render_Scene_2D::Properties& properties) {
properties = state;
})
.build();
.build().value();
const auto operation = scene->edit_renderables(
[](Scene_2D_Base::Renderable_Editor& editor) {
editor.replace_frame_control_strategy(