This commit is contained in:
2026-08-27 14:54:06 +08:00
parent ecf24cbe50
commit 63bb406a27
34 changed files with 690 additions and 1296 deletions
+30 -34
View File
@@ -63,7 +63,7 @@ TEST(spectrum_data, publishes_samples_through_tagged_frame_buffer) {
const double samples[]{-100.0, -50.0, 0.0};
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
spectrum->mark_dirty<Prepare_Data_Tag>();
spectrum->mark_dirty<Render_Graph_Tag>();
spectrum->advance();
EXPECT_EQ(spectrum->current_buffer<Spectrum_Frame_Tag>().samples,
(std::vector<Spectrum_Power>{-100.0, -50.0, 0.0}));
@@ -126,67 +126,64 @@ TEST(render_scene_2d, composites_axes_and_spectrum_into_final_frame) {
const double samples[]{-90.0, -65.0, -20.0, -45.0, -75.0};
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
spectrum->mark_dirty<Prepare_Data_Tag>();
spectrum->mark_dirty<Render_Graph_Tag>();
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
scene->set<&Render_Scene_2D::Prop::background>(Color::transparent());
scene->activate_view();
const auto prepare_graph = scene->pending_dependency_graph<Prepare_Data_Tag>();
EXPECT_TRUE(prepare_graph.depends_on(spectrum.get(), scene.get()));
EXPECT_TRUE(prepare_graph.depends_on(spectrum.get(), frequency.get()));
EXPECT_TRUE(prepare_graph.depends_on(spectrum.get(), power.get()));
const auto paint_graph = scene->pending_dependency_graph<Paint_Tag>();
EXPECT_TRUE(paint_graph.depends_on(frequency.get(), spectrum.get()));
EXPECT_TRUE(paint_graph.depends_on(power.get(), spectrum.get()));
const auto cache_graph = scene->pending_dependency_graph<Paint_Cache_Tag>();
const auto render_graph = scene->pending_dependency_graph<Render_Graph_Tag>();
EXPECT_FALSE(render_graph.depends_on(spectrum.get(), scene.get()));
EXPECT_FALSE(render_graph.depends_on(spectrum.get(), frequency.get()));
EXPECT_FALSE(render_graph.depends_on(spectrum.get(), power.get()));
EXPECT_TRUE(render_graph.depends_on(frequency.get(), spectrum.get()));
EXPECT_TRUE(render_graph.depends_on(power.get(), spectrum.get()));
const auto cache_graph = scene->pending_dependency_graph<Render_Cache_Tag>();
EXPECT_TRUE(cache_graph.depends_on(spectrum.get(), scene.get()));
EXPECT_TRUE(cache_graph.depends_on(spectrum.get(), frequency.get()));
EXPECT_TRUE(cache_graph.depends_on(spectrum.get(), power.get()));
auto output_frame = render_frame(scene.get());
EXPECT_GT(spectrum->read_state<Spectrum::Base_Tag>().rendered_point_count, 0u);
const auto& render_state = spectrum->read_state<Renderable::Base_Tag>();
EXPECT_EQ(render_state.prepare_task_count, 4u);
EXPECT_EQ(render_state.paint_task_count, 5u);
EXPECT_EQ(render_state.task_count, 9u);
const Image_View frame = output_frame->image();
ASSERT_FALSE(frame.empty());
EXPECT_TRUE(contains_color(frame));
EXPECT_FALSE(spectrum->dirty<Paint_Cache_Tag>());
EXPECT_FALSE(spectrum->dirty<Paint_Tag>());
EXPECT_FALSE(frequency->dirty<Paint_Tag>());
EXPECT_FALSE(power->dirty<Paint_Tag>());
EXPECT_FALSE(spectrum->dirty<Render_Cache_Tag>());
EXPECT_FALSE(spectrum->dirty<Render_Graph_Tag>());
EXPECT_FALSE(frequency->dirty<Render_Graph_Tag>());
EXPECT_FALSE(power->dirty<Render_Graph_Tag>());
EXPECT_FALSE(spectrum->read_prop<Renderable_2D::Base_Tag>().cache_enabled);
spectrum->set<&Renderable_2D::Prop::cache_enabled>(true);
output_frame = render_frame(scene.get());
EXPECT_TRUE(contains_color(output_frame->image()));
frequency->set<&Numeric_Axis::Prop::precision>(3);
EXPECT_FALSE(spectrum->dirty<Paint_Cache_Tag>());
EXPECT_FALSE(spectrum->dirty<Render_Cache_Tag>());
output_frame = render_frame(scene.get());
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().paint_executed);
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().paint_executed);
EXPECT_TRUE(power->read_state<Renderable::Base_Tag>().paint_executed);
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().render_executed);
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().render_executed);
EXPECT_TRUE(power->read_state<Renderable::Base_Tag>().render_executed);
EXPECT_TRUE(contains_color(output_frame->image()));
frequency->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 120.0});
EXPECT_TRUE(spectrum->dirty<Paint_Cache_Tag>());
EXPECT_TRUE(spectrum->dirty<Render_Cache_Tag>());
output_frame = render_frame(scene.get());
EXPECT_FALSE(spectrum->dirty<Paint_Cache_Tag>());
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().prepare_executed);
EXPECT_FALSE(spectrum->dirty<Render_Cache_Tag>());
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().render_executed);
spectrum->set<&Spectrum::Prop::partition_count>(2u);
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
spectrum->mark_dirty<Prepare_Data_Tag>();
spectrum->mark_dirty<Render_Graph_Tag>();
output_frame = render_frame(scene.get());
const auto& rebuilt_state = spectrum->read_state<Renderable::Base_Tag>();
EXPECT_TRUE(rebuilt_state.prepare_graph_rebuilt);
EXPECT_EQ(rebuilt_state.prepare_task_count, 3u);
EXPECT_TRUE(rebuilt_state.graph_rebuilt);
EXPECT_EQ(rebuilt_state.task_count, 7u);
EXPECT_TRUE(contains_color(output_frame->image()));
const Size resized_canvas{200, 140};
scene->set<&Render_Scene_2D::Prop::viewport>(resized_canvas);
EXPECT_TRUE(spectrum->dirty<Paint_Cache_Tag>());
EXPECT_FALSE(frequency->dirty<Prepare_Data_Tag>());
EXPECT_FALSE(power->dirty<Prepare_Data_Tag>());
EXPECT_TRUE(spectrum->dirty<Render_Cache_Tag>());
EXPECT_FALSE(frequency->dirty<Render_Graph_Tag>());
EXPECT_FALSE(power->dirty<Render_Graph_Tag>());
output_frame = render_frame(scene.get());
EXPECT_EQ(scene->read_prop<Render_Scene_2D::Base_Tag>().viewport, resized_canvas);
EXPECT_FALSE(frequency->read_state<Renderable::Base_Tag>().prepare_executed);
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().paint_executed);
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().render_executed);
const Image_View resized_frame = output_frame->image();
EXPECT_EQ(resized_frame.width, resized_canvas.width);
EXPECT_EQ(resized_frame.height, resized_canvas.height);
@@ -223,13 +220,12 @@ TEST(spectrum_data, repeatedly_publishes_new_samples_during_long_running_render)
samples[peak] = -15.0;
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
Spectrum_Frame{std::move(samples)};
spectrum->mark_dirty<Prepare_Data_Tag>();
spectrum->mark_dirty<Render_Graph_Tag>();
auto frame = render_frame(scene.get());
const auto hash = image_hash(frame->image());
if (frame_index != 0 && hash != previous_hash) ++changed_frames;
previous_hash = hash;
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().prepare_executed);
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().paint_executed);
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().render_executed);
EXPECT_EQ(spectrum->read_state<Spectrum::Base_Tag>().sample_count, 128u);
}
EXPECT_GT(changed_frames, 700u);