diff --git a/src/node_panel_stroke.cpp b/src/node_panel_stroke.cpp index 4febb70..e06ec3d 100644 --- a/src/node_panel_stroke.cpp +++ b/src/node_panel_stroke.cpp @@ -32,6 +32,7 @@ void NodePanelStroke::update_controls() m_tip_opacity->m_value = b->m_tip_opacity; m_tip_angle->m_value = b->m_tip_angle; m_tip_angle_smooth->m_value = b->m_tip_angle_smooth; + m_tip_mix->m_value = m_curves[m_tip_mix].to_slider(b->m_tip_mix); m_tip_wet->m_value = b->m_tip_wet; m_tip_noise->m_value = b->m_tip_noise; m_jitter_scale->m_value = b->m_jitter_scale; @@ -405,6 +406,10 @@ void NodePanelStroke::init_controls() [](float v) { return glm::pow(v, 2.f); }, [](float v) { return glm::pow(v, 1.f / 2.f); }, }; + SliderCurve curve_mix { + [](float v) { return glm::pow(v, 1.f / 10.f); }, + [](float v) { return glm::pow(v, 10.f); }, + }; SliderCurve curve_linear1k_perc { [](float v) { return v * 10.f; }, [](float v) { return v * 0.1f; }, @@ -459,6 +464,7 @@ void NodePanelStroke::init_controls() m_curves[m_dual_flow] = curve_quad; m_curves[m_pattern_scale] = curve_size1k_perc; m_curves[m_jitter_scatter] = curve_linear1k_perc; + m_curves[m_tip_mix] = curve_mix; m_tip_aspect_reset = find("tip-aspect-reset"); m_tip_aspect_reset->on_click = [this](Node*) { diff --git a/src/node_stroke_preview.cpp b/src/node_stroke_preview.cpp index 614614a..a9fd885 100644 --- a/src/node_stroke_preview.cpp +++ b/src/node_stroke_preview.cpp @@ -391,6 +391,18 @@ void NodeStrokePreview::draw_stroke_immediate() glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, size.x, size.y); } + // CHEKCERBOARD + + // copy background color to tex2 + ShaderManager::use(kShader::Checkerboard); + ShaderManager::u_int(kShaderUniform::Colorize, b->m_tip_mix > 0.f || b->m_blend_mode != 0); + float aspect = size.x / size.y; + ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f / aspect, .5f / aspect, -1.f, 1.f)); + m_plane.draw_fill(); + //m_rtt.clear({ .3f, .3f, .3f, 1.f }); + m_tex_background.bind(); + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, size.x, size.y); + // DRAW MAIN BRUSH ShaderManager::use(kShader::Stroke); @@ -435,18 +447,6 @@ void NodeStrokePreview::draw_stroke_immediate() m_tex.bind(); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, size.x, size.y); - // CHEKCERBOARD - - // copy background color to tex2 - ShaderManager::use(kShader::Checkerboard); - ShaderManager::u_int(kShaderUniform::Colorize, b->m_tip_mix > 0.f || b->m_blend_mode != 0); - float aspect = size.x / size.y; - ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f / aspect, .5f / aspect, -1.f, 1.f)); - m_plane.draw_fill(); - //m_rtt.clear({ .3f, .3f, .3f, 1.f }); - m_tex_background.bind(); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, size.x, size.y); - // COMPOSITE ShaderManager::use(kShader::CompDraw);