仍然闪烁

This commit is contained in:
2026-08-02 18:58:35 +08:00
parent ffaca5b05f
commit 9a39f88427
54 changed files with 2257 additions and 2424 deletions
+10 -7
View File
@@ -44,14 +44,15 @@ struct Point_Set_Render_State : Render_State, Point_Set_Prop {};
struct Point_Set_Private : Typed_Render_Data<Point_Set, Point_Set_Render_State, Point_Set_Input_Data> {
std::pmr::vector<PointF> data_points{memory_resource(Memory_Domain::Point_Set)};
std::pmr::vector<Color> data_colors{memory_resource(Memory_Domain::Point_Set)};
void prepare_data(const Render_Frame_Snapshot&) override {
sync_state_pipeline();
Point_Set_Input_Data* input = render_input_data();
void prepare_data(const Render_Frame_Snapshot&, const Renderable_Frame_View& frame_view) override {
Point_Set_Input_Data* input = render_input_data(frame_view);
if (!input)
return;
input->read_all([this](std::pmr::vector<PointF>& points, std::pmr::vector<Color>& colors) {
data_points.swap(points);
data_colors.swap(colors);
});
clear_render_input();
frame_view.consume_input();
}
void draw_point(Canvas& canvas, const PointF& point, const Point_Set_Render_State* s) {
double half = s->size / 2.0;
@@ -66,13 +67,15 @@ struct Point_Set_Private : Typed_Render_Data<Point_Set, Point_Set_Render_State,
canvas.draw_line(PointF{point.x, point.y - half}, PointF{point.x, point.y + half});
}
}
void draw(Canvas& canvas, const Render_Frame_Snapshot&) override {
Point_Set_Render_State* s = render_state();
void draw(Canvas& canvas, const Render_Frame_Snapshot& snapshot, const Renderable_Frame_View& frame_view) override {
Point_Set_Render_State* s = render_state(frame_view);
if (!s)
return;
auto domain_axis = s->domain_axis.lock();
auto value_axis = s->value_axis.lock();
if (!domain_axis || !value_axis || data_points.empty())
return;
Axis_Mapping_2D mapping = Axis_Render_Access::mapping(domain_axis.get(), value_axis.get());
Axis_Mapping_2D mapping = Axis_Render_Access::mapping(domain_axis.get(), value_axis.get(), snapshot);
std::pmr::vector<PointF> points(frame_memory_resource());
points.reserve(data_points.size());
for (int i = 0; i < data_points.size(); ++i) {