策略抽离

This commit is contained in:
2026-08-02 14:20:27 +08:00
parent 6d000f43b4
commit 2df8959ed6
87 changed files with 2454 additions and 1390 deletions
+9 -13
View File
@@ -22,7 +22,7 @@ struct Raster_Image_Input_Data : Latest_Input_Data {
struct Raster_Image_Render_State : Render_State, Raster_Image_Prop {};
struct Raster_Image_Private : Typed_Render_Data<Raster_Image, Raster_Image_Render_State, Raster_Image_Input_Data> {
Image image;
void prepare_data(const Plot_Render_Snapshot&) override {
void prepare_data(const Render_Frame_Snapshot&) override {
sync_state_pipeline();
Raster_Image_Input_Data* input = render_input_data();
input->read_all([this](const Image& value) {
@@ -30,7 +30,7 @@ struct Raster_Image_Private : Typed_Render_Data<Raster_Image, Raster_Image_Rende
});
clear_render_input();
}
void draw(Canvas& canvas, const Plot_Render_Snapshot&) override {
void draw(Canvas& canvas, const Render_Frame_Snapshot&) override {
Raster_Image_Render_State* s = render_state();
auto domain_axis = s->domain_axis.lock();
auto value_axis = s->value_axis.lock();
@@ -69,17 +69,13 @@ void Raster_Image::update_image_frame(const Image& image, Range domain_range, Ra
if (!ok())
return;
Raster_Image_Private* pd = d();
auto record = pd->state_control.try_acquire_role(State_Edit);
if (record.result != Triple_Buffer_Result::Success)
Render_Edit_Lease<Raster_Image_Private, Raster_Image_Render_State> edit(pd);
if (!edit)
return;
auto lease = record.lease;
Raster_Image_Render_State* state = reinterpret_cast<Raster_Image_Render_State*>(pd->state_by_index(lease.index));
state->domain_range = domain_range;
state->value_range = value_range;
state->source_rect = source_rect;
state->interpolation_mode = interpolation_mode;
++state->version;
pd->unmark_state(lease);
edit->domain_range = domain_range;
edit->value_range = value_range;
edit->source_rect = source_rect;
edit->interpolation_mode = interpolation_mode;
Render_Input_Lease<Raster_Image_Private, Raster_Image_Input_Data> input(pd);
input->push(image);
}
@@ -118,7 +114,7 @@ std::shared_ptr<Raster_Image> Raster_Image::Builder::build() {
auto ret = renderive::make_shared<Raster_Image>();
ret->init(parent);
Raster_Image_Private* pd = ret->d();
Raster_Image_Render_State* sc = reinterpret_cast<Raster_Image_Render_State*>(pd->state(State_Edit));
Raster_Image_Render_State* sc = reinterpret_cast<Raster_Image_Render_State*>(pd->edit_state());
PROP_R(std::weak_ptr<Abs_Axis>, domain_axis)
PROP_R(std::weak_ptr<Abs_Axis>, value_axis)
PROP_R(Range, domain_range)