Isolate legacy stroke shader setup
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "app.h"
|
||||
#include "legacy_gl_renderbuffer_dispatch.h"
|
||||
#include "legacy_canvas_stroke_execution_services.h"
|
||||
#include "legacy_canvas_stroke_shader_services.h"
|
||||
#include "legacy_canvas_stroke_services.h"
|
||||
#include "legacy_ui_gl_dispatch.h"
|
||||
#include "legacy_ui_overlay_services.h"
|
||||
@@ -675,27 +676,27 @@ void Canvas::stroke_draw()
|
||||
const auto stroke_material = canvas_stroke_material_plan(*brush, copy_stroke_destination);
|
||||
|
||||
apply_canvas_capability(blend_state(), false);
|
||||
ShaderManager::use(kShader::Stroke);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0); // brush
|
||||
if (stroke_material.stroke_pass.uses_destination_feedback)
|
||||
ShaderManager::u_int(kShaderUniform::TexBG, 1); // bg
|
||||
ShaderManager::u_int(kShaderUniform::TexPattern, 2); // pattern
|
||||
ShaderManager::u_int(kShaderUniform::TexMix, 3); // mixer
|
||||
//ShaderManager::u_int(kShaderUniform::TexMixA, 4); // mixer
|
||||
ShaderManager::u_float(kShaderUniform::Opacity, brush->m_tip_opacity);
|
||||
ShaderManager::u_vec2(kShaderUniform::Resolution, { m_width, m_height });
|
||||
ShaderManager::u_vec2(kShaderUniform::PatternScale, patt_scale);
|
||||
ShaderManager::u_float(kShaderUniform::PatternInvert, brush->m_pattern_invert);
|
||||
ShaderManager::u_float(kShaderUniform::PatternBright, brush->m_pattern_brightness);
|
||||
ShaderManager::u_float(kShaderUniform::PatternContrast, brush->m_pattern_contrast);
|
||||
ShaderManager::u_float(kShaderUniform::PatternDepth, brush->m_pattern_depth);
|
||||
ShaderManager::u_int(kShaderUniform::PatternBlendMode, brush->m_pattern_blend_mode);
|
||||
ShaderManager::u_vec2(kShaderUniform::PatternOffset, m_pattern_offset);
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern, stroke_material.stroke_pass.uses_pattern);
|
||||
ShaderManager::u_float(kShaderUniform::MixAlpha, brush->m_tip_mix);
|
||||
ShaderManager::u_float(kShaderUniform::Wet, brush->m_tip_wet);
|
||||
ShaderManager::u_float(kShaderUniform::Noise, brush->m_tip_noise);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, ortho_proj);
|
||||
pp::panopainter::setup_legacy_stroke_shader(
|
||||
pp::panopainter::LegacyStrokeShaderSetupUniforms {
|
||||
.resolution = glm::vec2(static_cast<float>(m_width), static_cast<float>(m_height)),
|
||||
.pattern = {
|
||||
.scale = patt_scale,
|
||||
.invert = static_cast<float>(brush->m_pattern_invert),
|
||||
.brightness = brush->m_pattern_brightness,
|
||||
.contrast = brush->m_pattern_contrast,
|
||||
.depth = brush->m_pattern_depth,
|
||||
.blend_mode = brush->m_pattern_blend_mode,
|
||||
.offset = m_pattern_offset,
|
||||
},
|
||||
.mvp = ortho_proj,
|
||||
.uses_destination_feedback = stroke_material.stroke_pass.uses_destination_feedback,
|
||||
.uses_pattern = stroke_material.stroke_pass.uses_pattern,
|
||||
.mix_alpha = brush->m_tip_mix,
|
||||
.wet = brush->m_tip_wet,
|
||||
.noise = brush->m_tip_noise,
|
||||
.set_opacity = true,
|
||||
.opacity = brush->m_tip_opacity,
|
||||
});
|
||||
|
||||
// DRAW MAIN BRUSH
|
||||
|
||||
@@ -731,10 +732,13 @@ void Canvas::stroke_draw()
|
||||
|
||||
m_tmp[i].bindFramebuffer();
|
||||
|
||||
ShaderManager::use(kShader::Stroke);
|
||||
ShaderManager::u_vec4(kShaderUniform::Col, f.col);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, f.flow);
|
||||
ShaderManager::u_float(kShaderUniform::Opacity, f.opacity);
|
||||
pp::panopainter::use_legacy_stroke_shader();
|
||||
pp::panopainter::apply_legacy_stroke_sample_uniforms(
|
||||
pp::panopainter::LegacyStrokeSampleUniforms {
|
||||
.color = f.col,
|
||||
.alpha = f.flow,
|
||||
.opacity = f.opacity,
|
||||
});
|
||||
auto box_sample = stroke_draw_samples(i, P, copy_stroke_destination);
|
||||
|
||||
m_tmp[i].unbindFramebuffer();
|
||||
@@ -812,11 +816,7 @@ void Canvas::stroke_draw()
|
||||
|
||||
if (stroke_material.dual_pass.enabled)
|
||||
{
|
||||
ShaderManager::use(kShader::Stroke);
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern, stroke_material.dual_pass.uses_pattern);
|
||||
ShaderManager::u_float(kShaderUniform::MixAlpha, 0);
|
||||
ShaderManager::u_float(kShaderUniform::Wet, 0);
|
||||
ShaderManager::u_float(kShaderUniform::Noise, 0);
|
||||
pp::panopainter::setup_legacy_stroke_dual_shader(stroke_material.dual_pass.uses_pattern);
|
||||
|
||||
set_active_texture_unit(0);
|
||||
dual_brush->m_tip_texture ?
|
||||
@@ -825,9 +825,12 @@ void Canvas::stroke_draw()
|
||||
auto frames_dual = stroke_draw_compute(*m_dual_stroke);
|
||||
for (auto& f : frames_dual)
|
||||
{
|
||||
ShaderManager::u_vec4(kShaderUniform::Col, f.col);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, f.flow);
|
||||
ShaderManager::u_float(kShaderUniform::Opacity, f.opacity);
|
||||
pp::panopainter::apply_legacy_stroke_sample_uniforms(
|
||||
pp::panopainter::LegacyStrokeSampleUniforms {
|
||||
.color = f.col,
|
||||
.alpha = f.flow,
|
||||
.opacity = f.opacity,
|
||||
});
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
auto& P = f.shapes[i];
|
||||
|
||||
Reference in New Issue
Block a user