Extract preview final composite orchestration
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "legacy_canvas_stroke_shader_services.h"
|
||||
#include "legacy_canvas_stroke_services.h"
|
||||
#include "paint_renderer/compositor.h"
|
||||
#include "texture.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
@@ -242,6 +243,69 @@ 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