diff --git a/src/node_stroke_preview.cpp b/src/node_stroke_preview.cpp index 7ab29cd..702df77 100644 --- a/src/node_stroke_preview.cpp +++ b/src/node_stroke_preview.cpp @@ -205,63 +205,69 @@ pp::panopainter::LegacyNodeStrokePreviewMixExecutionRequest make_stroke_preview_ }; } +pp::panopainter::LegacyNodeStrokePreviewFinalCompositeRequest make_stroke_preview_final_composite_request( + const StrokePreviewCompositePassInputs& inputs) +{ + return pp::panopainter::LegacyNodeStrokePreviewFinalCompositeRequest { + .resolution = inputs.resolution, + .pattern_scale = inputs.pattern_scale, + .brush = &inputs.brush, + .composite_pass = &inputs.composite_pass, + .setup_composite_shader = [&] { + pp::panopainter::setup_legacy_stroke_composite_shader( + pp::panopainter::LegacyStrokeCompositeUniforms { + .resolution = inputs.resolution, + .pattern = { + .scale = inputs.pattern_scale, + .invert = static_cast(inputs.brush.m_pattern_invert), + .brightness = inputs.brush.m_pattern_brightness, + .contrast = inputs.brush.m_pattern_contrast, + .depth = inputs.brush.m_pattern_depth, + .blend_mode = inputs.composite_pass.pattern_blend_mode, + .offset = glm::vec2(inputs.brush.m_pattern_rand_offset ? 0.5f : 0.0f), + }, + .mvp = glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f), + .layer_alpha = 1.0f, + .alpha_lock = false, + .mask_enabled = false, + .use_fragcoord = false, + .blend_mode = inputs.brush.m_blend_mode, + .use_dual = inputs.composite_pass.use_dual, + .dual_blend_mode = inputs.composite_pass.dual_blend_mode, + .dual_alpha = inputs.composite_pass.dual_alpha, + .use_pattern = inputs.composite_pass.use_pattern, + }); + }, + .bind_composite_samplers = [&] { + inputs.linear_sampler.bind(stroke_preview_composite_slots::kBackground); + inputs.linear_sampler.bind(stroke_preview_composite_slots::kStroke); + inputs.linear_sampler.bind(2U); + inputs.linear_sampler.bind(stroke_preview_composite_slots::kDual); + inputs.repeat_sampler.bind(stroke_preview_composite_slots::kPattern); + }, + .bind_composite_inputs = [&] { + set_active_texture_unit(stroke_preview_composite_slots::kBackground); + inputs.background_texture.bind(); + set_active_texture_unit(stroke_preview_composite_slots::kStroke); + inputs.stroke_texture.bind(); + set_active_texture_unit(stroke_preview_composite_slots::kDual); + inputs.dual_texture.bind(); + set_active_texture_unit(stroke_preview_composite_slots::kPattern); + inputs.brush.m_pattern_texture ? + inputs.brush.m_pattern_texture->bind() : + unbind_texture_2d(); + }, + .draw_composite = [&] { + inputs.draw_composite(); + }, + }; +} + void execute_stroke_preview_final_composite_pass(const StrokePreviewCompositePassInputs& inputs) { [[maybe_unused]] const bool composite_ok = pp::panopainter::execute_legacy_node_stroke_preview_final_composite( - pp::panopainter::LegacyNodeStrokePreviewFinalCompositeRequest { - .resolution = inputs.resolution, - .pattern_scale = inputs.pattern_scale, - .brush = &inputs.brush, - .composite_pass = &inputs.composite_pass, - .setup_composite_shader = [&] { - pp::panopainter::setup_legacy_stroke_composite_shader( - pp::panopainter::LegacyStrokeCompositeUniforms { - .resolution = inputs.resolution, - .pattern = { - .scale = inputs.pattern_scale, - .invert = static_cast(inputs.brush.m_pattern_invert), - .brightness = inputs.brush.m_pattern_brightness, - .contrast = inputs.brush.m_pattern_contrast, - .depth = inputs.brush.m_pattern_depth, - .blend_mode = inputs.composite_pass.pattern_blend_mode, - .offset = glm::vec2(inputs.brush.m_pattern_rand_offset ? 0.5f : 0.0f), - }, - .mvp = glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f), - .layer_alpha = 1.0f, - .alpha_lock = false, - .mask_enabled = false, - .use_fragcoord = false, - .blend_mode = inputs.brush.m_blend_mode, - .use_dual = inputs.composite_pass.use_dual, - .dual_blend_mode = inputs.composite_pass.dual_blend_mode, - .dual_alpha = inputs.composite_pass.dual_alpha, - .use_pattern = inputs.composite_pass.use_pattern, - }); - }, - .bind_composite_samplers = [&] { - inputs.linear_sampler.bind(stroke_preview_composite_slots::kBackground); - inputs.linear_sampler.bind(stroke_preview_composite_slots::kStroke); - inputs.linear_sampler.bind(2U); - inputs.linear_sampler.bind(stroke_preview_composite_slots::kDual); - inputs.repeat_sampler.bind(stroke_preview_composite_slots::kPattern); - }, - .bind_composite_inputs = [&] { - set_active_texture_unit(stroke_preview_composite_slots::kBackground); - inputs.background_texture.bind(); - set_active_texture_unit(stroke_preview_composite_slots::kStroke); - inputs.stroke_texture.bind(); - set_active_texture_unit(stroke_preview_composite_slots::kDual); - inputs.dual_texture.bind(); - set_active_texture_unit(stroke_preview_composite_slots::kPattern); - inputs.brush.m_pattern_texture ? - inputs.brush.m_pattern_texture->bind() : - unbind_texture_2d(); - }, - .draw_composite = [&] { - inputs.draw_composite(); - }, - }); + make_stroke_preview_final_composite_request(inputs)); assert(composite_ok); }