Reduce retained stroke preview helper surface
This commit is contained in:
@@ -92,24 +92,6 @@ struct LegacyNodeStrokePreviewMixPassRequest {
|
||||
int blend_mode = 0;
|
||||
};
|
||||
|
||||
struct LegacyNodeStrokePreviewMixExecutionRequest {
|
||||
LegacyNodeStrokePreviewMixPassPlan::ShaderPlan shader {};
|
||||
int mixer_width = 0;
|
||||
int mixer_height = 0;
|
||||
int scissor_x = 0;
|
||||
int scissor_y = 0;
|
||||
int scissor_width = 0;
|
||||
int scissor_height = 0;
|
||||
std::function<void()> save_state;
|
||||
std::function<void(const LegacyNodeStrokePreviewMixPassPlan::ShaderPlan&)> setup_mix_shader;
|
||||
std::function<void()> bind_mixer_framebuffer;
|
||||
std::function<void(int, int, int, int, int, int)> configure_mix_target_state;
|
||||
std::function<void()> bind_mix_inputs;
|
||||
std::function<void()> draw_mix;
|
||||
std::function<void()> unbind_mixer_framebuffer;
|
||||
std::function<void()> restore_state;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline LegacyNodeStrokePreviewMixPassPlan plan_legacy_node_stroke_preview_mix_pass(
|
||||
const LegacyNodeStrokePreviewMixPassRequest& request) noexcept
|
||||
{
|
||||
@@ -153,80 +135,6 @@ struct LegacyNodeStrokePreviewMixExecutionRequest {
|
||||
return plan;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline bool execute_legacy_node_stroke_preview_mix_pass(
|
||||
const LegacyNodeStrokePreviewMixExecutionRequest& request)
|
||||
{
|
||||
if (request.mixer_width <= 0 ||
|
||||
request.mixer_height <= 0 ||
|
||||
!request.save_state ||
|
||||
!request.setup_mix_shader ||
|
||||
!request.bind_mixer_framebuffer ||
|
||||
!request.configure_mix_target_state ||
|
||||
!request.bind_mix_inputs ||
|
||||
!request.draw_mix ||
|
||||
!request.unbind_mixer_framebuffer ||
|
||||
!request.restore_state) {
|
||||
return false;
|
||||
}
|
||||
|
||||
request.save_state();
|
||||
request.setup_mix_shader(request.shader);
|
||||
request.bind_mixer_framebuffer();
|
||||
request.configure_mix_target_state(
|
||||
request.mixer_width,
|
||||
request.mixer_height,
|
||||
request.scissor_x,
|
||||
request.scissor_y,
|
||||
request.scissor_width,
|
||||
request.scissor_height);
|
||||
request.bind_mix_inputs();
|
||||
request.draw_mix();
|
||||
request.unbind_mixer_framebuffer();
|
||||
request.restore_state();
|
||||
return true;
|
||||
}
|
||||
|
||||
struct LegacyNodeStrokePreviewPassSequenceRequest {
|
||||
bool dual_pass_enabled = false;
|
||||
std::function<void()> prepare_dual_pass;
|
||||
std::function<void()> execute_dual_pass;
|
||||
std::function<void()> capture_background;
|
||||
std::function<void()> prepare_main_pass;
|
||||
std::function<void()> execute_main_pass;
|
||||
std::function<void()> finish_main_pass;
|
||||
std::function<void()> execute_final_composite;
|
||||
std::function<void()> copy_preview_result;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline bool execute_legacy_node_stroke_preview_pass_sequence(
|
||||
const LegacyNodeStrokePreviewPassSequenceRequest& request)
|
||||
{
|
||||
if (!request.capture_background ||
|
||||
!request.prepare_main_pass ||
|
||||
!request.execute_main_pass ||
|
||||
!request.finish_main_pass ||
|
||||
!request.execute_final_composite ||
|
||||
!request.copy_preview_result) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (request.dual_pass_enabled) {
|
||||
if (!request.prepare_dual_pass || !request.execute_dual_pass) {
|
||||
return false;
|
||||
}
|
||||
request.prepare_dual_pass();
|
||||
request.execute_dual_pass();
|
||||
}
|
||||
|
||||
request.capture_background();
|
||||
request.prepare_main_pass();
|
||||
request.execute_main_pass();
|
||||
request.finish_main_pass();
|
||||
request.execute_final_composite();
|
||||
request.copy_preview_result();
|
||||
return true;
|
||||
}
|
||||
|
||||
struct LegacyNodeStrokePreviewPassOrchestrationPlan {
|
||||
pp::paint_renderer::CanvasStrokeFeedbackPlan feedback {};
|
||||
pp::paint_renderer::CanvasStrokeMaterialPlan material {};
|
||||
@@ -244,69 +152,6 @@ struct LegacyNodeStrokePreviewMainPassTextureDispatch {
|
||||
std::function<void()> bind_mixer;
|
||||
};
|
||||
|
||||
struct LegacyNodeStrokePreviewFinalCompositeRequest {
|
||||
glm::vec2 resolution {};
|
||||
glm::vec2 pattern_scale {};
|
||||
const Brush* brush = nullptr;
|
||||
const pp::paint_renderer::CanvasStrokeCompositePassPlan* composite_pass = nullptr;
|
||||
std::function<void()> setup_composite_shader;
|
||||
std::function<void()> bind_composite_samplers;
|
||||
std::function<void()> bind_composite_inputs;
|
||||
std::function<void()> draw_composite;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline bool execute_legacy_node_stroke_preview_final_composite(
|
||||
const LegacyNodeStrokePreviewFinalCompositeRequest& request)
|
||||
{
|
||||
if (!request.brush ||
|
||||
!request.composite_pass ||
|
||||
!request.setup_composite_shader ||
|
||||
!request.bind_composite_samplers ||
|
||||
!request.bind_composite_inputs ||
|
||||
!request.draw_composite) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pp::panopainter::execute_legacy_stroke_preview_final_composite(
|
||||
[&] {
|
||||
request.setup_composite_shader();
|
||||
},
|
||||
[&] {
|
||||
request.bind_composite_samplers();
|
||||
},
|
||||
[&] {
|
||||
request.bind_composite_inputs();
|
||||
},
|
||||
[&] {
|
||||
request.draw_composite();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
struct LegacyNodeStrokePreviewCopyResultRequest {
|
||||
Texture2D* preview_texture = nullptr;
|
||||
glm::vec2 size {};
|
||||
std::function<void(int, int, int, int, int, int)> copy_framebuffer_to_texture;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline bool copy_legacy_node_stroke_preview_result(
|
||||
const LegacyNodeStrokePreviewCopyResultRequest& request)
|
||||
{
|
||||
if (!request.preview_texture || !request.copy_framebuffer_to_texture) {
|
||||
return false;
|
||||
}
|
||||
pp::panopainter::copy_legacy_stroke_preview_texture(
|
||||
[&] {
|
||||
request.preview_texture->bind();
|
||||
},
|
||||
request.copy_framebuffer_to_texture,
|
||||
pp::panopainter::LegacyStrokePreviewCopySize {
|
||||
.width = static_cast<int>(request.size.x),
|
||||
.height = static_cast<int>(request.size.y),
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline LegacyNodeStrokePreviewMainPassTextureDispatch make_legacy_node_stroke_preview_main_pass_texture_dispatch(
|
||||
std::function<void(int)> activate_texture_unit,
|
||||
std::function<void()> bind_brush_tip,
|
||||
|
||||
Reference in New Issue
Block a user