更新三缓冲 彻底
This commit is contained in:
@@ -63,9 +63,13 @@ TEST(plottable_migration, curve_plots_share_partitioned_rendering) {
|
||||
auto sweep = build_object<Sweep>(frequency.get(), power.get());
|
||||
trace->set<&Frequency_Trace::Prop::partition_mode>(Plot_Partition_Mode::fixed);
|
||||
trace->set<&Frequency_Trace::Prop::partition_count>(2u);
|
||||
trace->append_sample(time->append_time({1'000}), 10.0);
|
||||
trace->append_sample(time->append_time({2'000}), 50.0);
|
||||
trace->append_sample(time->append_time({3'000}), 90.0);
|
||||
trace->submit_stream<Frequency_Trace_Stream_Tag>(
|
||||
Frequency_Trace_Sample{time->append_time({1'000}), 10.0});
|
||||
trace->submit_stream<Frequency_Trace_Stream_Tag>(
|
||||
Frequency_Trace_Sample{time->append_time({2'000}), 50.0});
|
||||
trace->submit_stream<Frequency_Trace_Stream_Tag>(
|
||||
Frequency_Trace_Sample{time->append_time({3'000}), 90.0});
|
||||
trace->mark_dirty<Prepare_Data_Tag>();
|
||||
sweep->set<&Sweep_Spectrum::Prop::frequency_range>(Axis_Range{0.0, 100.0});
|
||||
sweep->set<&Sweep_Spectrum::Prop::block_count>(2u);
|
||||
sweep->set<&Sweep_Spectrum::Prop::partition_mode>(Plot_Partition_Mode::fixed);
|
||||
@@ -73,25 +77,25 @@ TEST(plottable_migration, curve_plots_share_partitioned_rendering) {
|
||||
const std::array<Plot_Value, 4> first_block{-90.0, -60.0, -30.0, -10.0};
|
||||
const std::array<Plot_Value, 4> second_block{-80.0, -50.0, -20.0, -5.0};
|
||||
const std::array<Plot_Value, 4> replacement_block{-70.0, -40.0, -15.0, -2.0};
|
||||
sweep->append_block(first_block);
|
||||
sweep->append_block(second_block);
|
||||
sweep->submit_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(first_block.begin(), first_block.end()));
|
||||
sweep->submit_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(second_block.begin(), second_block.end()));
|
||||
sweep->mark_dirty<Prepare_Data_Tag>();
|
||||
auto scene = build_scene<Scene>(trace.get(), sweep.get());
|
||||
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
|
||||
scene->activate_view();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(trace->sample_count(), 3u);
|
||||
EXPECT_GT(trace->rendered_point_count(), 0u);
|
||||
EXPECT_EQ(sweep->stored_block_count(), 2u);
|
||||
EXPECT_GT(sweep->rendered_point_count(), 0u);
|
||||
const auto completed_sweep_points = sweep->rendered_point_count();
|
||||
sweep->append_block(replacement_block);
|
||||
EXPECT_EQ(trace->access_rendering_stream<Frequency_Trace_Stream_Tag>(
|
||||
[](std::span<Frequency_Trace_Sample> samples) { return samples.size(); }), 3u);
|
||||
EXPECT_EQ(sweep->access_rendering_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const std::vector<Plot_Value>>> blocks) { return blocks.size(); }), 2u);
|
||||
sweep->submit_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(replacement_block.begin(), replacement_block.end()));
|
||||
sweep->mark_dirty<Prepare_Data_Tag>();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(sweep->stored_block_count(), 2u);
|
||||
EXPECT_EQ(sweep->rendered_point_count(), completed_sweep_points);
|
||||
const auto& sweep_prop = sweep->read_prop<Sweep_Spectrum::Base_Tag>();
|
||||
EXPECT_EQ(sweep_prop.blocks[0], std::vector<Plot_Value>(replacement_block.begin(), replacement_block.end()));
|
||||
EXPECT_EQ(sweep_prop.blocks[1], std::vector<Plot_Value>(second_block.begin(), second_block.end()));
|
||||
EXPECT_EQ(sweep_prop.next_block_index, 1u);
|
||||
EXPECT_EQ(sweep->access_query_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
[](std::span<const std::shared_ptr<const std::vector<Plot_Value>>> blocks) { return blocks.size(); }), 2u);
|
||||
}
|
||||
|
||||
TEST(plottable_migration, raster_plots_share_partitioned_color_blocks) {
|
||||
@@ -119,17 +123,22 @@ TEST(plottable_migration, raster_plots_share_partitioned_color_blocks) {
|
||||
waterfall->set<&Waterfall::Prop::frequency_range>(Axis_Range{0.0, 100.0});
|
||||
waterfall->set<&Waterfall::Prop::power_range>(Axis_Range{-100.0, 0.0});
|
||||
const std::array<Plot_Value, 4> row{-90.0, -60.0, -30.0, -10.0};
|
||||
glow->append_spectrum(row);
|
||||
waterfall->append_row(time->append_time({1'000}), row);
|
||||
waterfall->append_row(time->append_time({2'000}), row);
|
||||
glow->submit_stream<Afterglow_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(row.begin(), row.end()));
|
||||
glow->mark_dirty<Prepare_Data_Tag>();
|
||||
waterfall->submit_stream<Waterfall_Stream_Tag>(std::make_shared<const Waterfall_Row>(
|
||||
Waterfall_Row{time->append_time({1'000}), {row.begin(), row.end()}}));
|
||||
waterfall->submit_stream<Waterfall_Stream_Tag>(std::make_shared<const Waterfall_Row>(
|
||||
Waterfall_Row{time->append_time({2'000}), {row.begin(), row.end()}}));
|
||||
waterfall->mark_dirty<Prepare_Data_Tag>();
|
||||
auto scene = build_scene<Scene>(glow.get(), waterfall.get());
|
||||
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
|
||||
scene->activate_view();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(glow->history_count(), 1u);
|
||||
EXPECT_GT(glow->rendered_cell_count(), 0u);
|
||||
EXPECT_EQ(waterfall->row_count(), 2u);
|
||||
EXPECT_GT(waterfall->rendered_cell_count(), 0u);
|
||||
EXPECT_EQ(glow->access_rendering_stream<Afterglow_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const std::vector<Plot_Value>>> spectra) { return spectra.size(); }), 1u);
|
||||
EXPECT_EQ(waterfall->access_rendering_stream<Waterfall_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const Waterfall_Row>> rows) { return rows.size(); }), 2u);
|
||||
}
|
||||
|
||||
TEST(plottable_migration, direct_overlay_and_constellation_build_and_render) {
|
||||
@@ -149,12 +158,15 @@ TEST(plottable_migration, direct_overlay_and_constellation_build_and_render) {
|
||||
auto overlay = build_object<Overlay>(horizontal.get(), vertical.get());
|
||||
diagram->set<&Constellation_Diagram::Prop::i_range>(Axis_Range{-1.0, 1.0});
|
||||
diagram->set<&Constellation_Diagram::Prop::q_range>(Axis_Range{-1.0, 1.0});
|
||||
diagram->append_point({0.25, -0.25});
|
||||
diagram->submit_stream<Constellation_Stream_Tag>(
|
||||
Constellation_Point{{0.25, -0.25}, monotonic_milliseconds()});
|
||||
diagram->mark_dirty<Prepare_Data_Tag>();
|
||||
auto scene = build_scene<Scene>(diagram.get(), overlay.get());
|
||||
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
|
||||
scene->activate_view();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(diagram->point_count(), 1u);
|
||||
EXPECT_EQ(diagram->access_rendering_stream<Constellation_Stream_Tag>(
|
||||
[](std::span<Constellation_Point> points) { return points.size(); }), 1u);
|
||||
EXPECT_EQ(overlay->read_state<Renderable::Base_Tag>().prepare_task_count, 0u);
|
||||
EXPECT_EQ(overlay->read_state<Renderable::Base_Tag>().paint_task_count, 1u);
|
||||
}
|
||||
@@ -182,16 +194,16 @@ TEST(selection_overlay, control_extends_selection_and_plain_click_clears_it) {
|
||||
press->position = first;
|
||||
press->button = Mouse_Button::left;
|
||||
press->modifiers = modifiers;
|
||||
scene->dispatch_event(press);
|
||||
scene->submit_stream<Scene_Event_Stream_Tag>(press);
|
||||
auto move = scene->make_event<Pointer_Event>(Event_Type::pointer_move);
|
||||
move->position = second;
|
||||
move->modifiers = modifiers;
|
||||
scene->dispatch_event(move);
|
||||
scene->submit_stream<Scene_Event_Stream_Tag>(move);
|
||||
auto release = scene->make_event<Pointer_Event>(Event_Type::pointer_release);
|
||||
release->position = second;
|
||||
release->button = Mouse_Button::left;
|
||||
release->modifiers = modifiers;
|
||||
scene->dispatch_event(release);
|
||||
scene->submit_stream<Scene_Event_Stream_Tag>(release);
|
||||
render_once(scene.get());
|
||||
};
|
||||
drag({30.0, 90.0}, {60.0, 60.0}, Keyboard_Modifier::none);
|
||||
@@ -226,14 +238,14 @@ TEST(selection_overlay, time_axis_selection_keeps_axis_coordinates_while_window_
|
||||
auto press = scene->make_event<Pointer_Event>(Event_Type::pointer_press);
|
||||
press->position = {92.0, 88.0};
|
||||
press->button = Mouse_Button::left;
|
||||
scene->dispatch_event(press);
|
||||
scene->submit_stream<Scene_Event_Stream_Tag>(press);
|
||||
auto move = scene->make_event<Pointer_Event>(Event_Type::pointer_move);
|
||||
move->position = {116.0, 56.0};
|
||||
scene->dispatch_event(move);
|
||||
scene->submit_stream<Scene_Event_Stream_Tag>(move);
|
||||
auto release = scene->make_event<Pointer_Event>(Event_Type::pointer_release);
|
||||
release->position = {116.0, 56.0};
|
||||
release->button = Mouse_Button::left;
|
||||
scene->dispatch_event(release);
|
||||
scene->submit_stream<Scene_Event_Stream_Tag>(release);
|
||||
render_once(scene.get());
|
||||
ASSERT_EQ(overlay->selected_regions().size(), 1u);
|
||||
const Axis_Rectangle selected = overlay->selected_regions().front();
|
||||
|
||||
Reference in New Issue
Block a user