Extract Canvas draw_merge layer blend helper

This commit is contained in:
2026-06-13 11:26:48 +02:00
parent 51458ad0e7
commit 499747173b
5 changed files with 102 additions and 40 deletions

View File

@@ -64,6 +64,22 @@ struct LegacyCanvasDrawMergeShaderExecution {
std::function<void(kShaderUniform, const glm::mat4&)> set_mat4;
};
struct LegacyCanvasDrawMergeLayerBlendUniforms {
LegacyCanvasDrawMergeTextureBlendUniforms shader;
bool copy_destination = false;
};
struct LegacyCanvasDrawMergeLayerBlendExecution {
std::function<void()> unbind_merge_framebuffer;
std::function<void()> bind_samplers;
std::function<void()> bind_merge_texture;
std::function<void()> bind_destination_texture;
std::function<void()> copy_destination_framebuffer;
std::function<void()> draw;
std::function<void()> unbind_destination_texture;
std::function<void()> unbind_merge_texture;
};
[[nodiscard]] inline LegacyCanvasDrawMergeShaderExecution legacy_shader_manager_draw_merge_execution() noexcept
{
return {
@@ -218,4 +234,27 @@ inline void setup_legacy_canvas_draw_merge_texture_colorize_shader(
setup_legacy_canvas_draw_merge_texture_colorize_shader(uniforms, legacy_shader_manager_draw_merge_execution());
}
inline void execute_legacy_canvas_draw_merge_layer_blend(
const LegacyCanvasDrawMergeLayerBlendUniforms& uniforms,
const LegacyCanvasDrawMergeLayerBlendExecution& execution)
{
execution.unbind_merge_framebuffer();
execution.bind_samplers();
setup_legacy_canvas_draw_merge_texture_blend_shader(uniforms.shader);
execution.bind_merge_texture();
if (uniforms.copy_destination) {
execution.bind_destination_texture();
execution.copy_destination_framebuffer();
}
execution.draw();
if (uniforms.copy_destination) {
execution.unbind_destination_texture();
}
execution.unbind_merge_texture();
}
} // namespace pp::panopainter