rename texture to pattern and implement initial pattern settings
This commit is contained in:
@@ -240,20 +240,23 @@ void Canvas::stroke_draw_mix(const glm::vec2& bb_min, const glm::vec2& bb_sz)
|
||||
m_sampler.bind(0);
|
||||
m_sampler.bind(1);
|
||||
m_sampler.bind(2);
|
||||
const auto& b = m_current_stroke->m_brush;
|
||||
ShaderManager::use(kShader::CompDraw);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
//ShaderManager::u_int(kShaderUniform::TexA, 0);
|
||||
ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||
ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||
//ShaderManager::u_vec2(kShaderUniform::Resolution, m_size);
|
||||
//ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, m_current_stroke->m_brush->m_tip_opacity);
|
||||
ShaderManager::u_int(kShaderUniform::TexPattern, 3);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, b->m_tip_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::PatternAlpha, b->m_pattern_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, 1);
|
||||
ShaderManager::u_int(kShaderUniform::Lock, false/*m_layers[layer_index].m_alpha_locked*/);
|
||||
ShaderManager::u_int(kShaderUniform::Mask, false/*m_smask_active*/);
|
||||
ShaderManager::u_int(kShaderUniform::UseFragCoordUV2, false);
|
||||
ShaderManager::u_int(kShaderUniform::UseDual, false);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, m_current_stroke->m_brush->m_blend_mode);
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern, false);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
m_layers[layer_index].m_rtt[plane_index].bindTexture();
|
||||
@@ -486,12 +489,13 @@ void Canvas::stroke_draw()
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0); // brush
|
||||
if (!ShaderManager::ext_framebuffer_fetch)
|
||||
ShaderManager::u_int(kShaderUniform::TexBG, 1); // bg
|
||||
ShaderManager::u_int(kShaderUniform::TexStencil, 2); // stencil
|
||||
ShaderManager::u_int(kShaderUniform::TexPattern, 2); // pattern
|
||||
ShaderManager::u_int(kShaderUniform::TexMix, 3); // mixer
|
||||
//ShaderManager::u_int(kShaderUniform::TexMixA, 4); // mixer
|
||||
ShaderManager::u_vec2(kShaderUniform::Resolution, { m_width, m_height });
|
||||
ShaderManager::u_vec2(kShaderUniform::StencilOffset, stencil_offset);
|
||||
ShaderManager::u_float(kShaderUniform::StencilAlpha, brush->m_tip_stencil);
|
||||
ShaderManager::u_vec2(kShaderUniform::PatternOffset, stencil_offset);
|
||||
ShaderManager::u_float(kShaderUniform::PatternAlpha, brush->m_pattern_opacity);
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern, brush->m_pattern_enabled && brush->m_pattern_eachsample);
|
||||
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);
|
||||
@@ -502,10 +506,8 @@ void Canvas::stroke_draw()
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
brush->m_tip_texture->bind();
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
if (brush->m_stencil_texture)
|
||||
brush->m_stencil_texture->bind();
|
||||
else
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
if (brush->m_pattern_texture)
|
||||
brush->m_pattern_texture->bind();
|
||||
glActiveTexture(GL_TEXTURE3);
|
||||
m_mixer.bindTexture();
|
||||
auto frames = stroke_draw_compute(*m_current_stroke);
|
||||
@@ -533,23 +535,19 @@ void Canvas::stroke_draw()
|
||||
}
|
||||
glActiveTexture(GL_TEXTURE3);
|
||||
m_mixer.unbindTexture();
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
if (brush->m_stencil_texture)
|
||||
brush->m_stencil_texture->unbind();
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
brush->m_tip_texture->unbind();
|
||||
|
||||
// DRAW DUAL BRUSH
|
||||
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern, false);
|
||||
ShaderManager::u_float(kShaderUniform::MixAlpha, 0);
|
||||
ShaderManager::u_float(kShaderUniform::Wet, 0);
|
||||
ShaderManager::u_float(kShaderUniform::Noise, 0);
|
||||
if (brush->m_dual_enabled)
|
||||
{
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
dual_brush->m_tip_texture->bind();
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
if (dual_brush->m_stencil_texture)
|
||||
dual_brush->m_stencil_texture->bind();
|
||||
else
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
auto frames_dual = stroke_draw_compute(*m_dual_stroke);
|
||||
for (auto& f : frames_dual)
|
||||
{
|
||||
@@ -570,9 +568,6 @@ void Canvas::stroke_draw()
|
||||
m_dirty_box[i] = glm::clamp(box_union(m_dirty_box[i], rect), glm::vec4(0), glm::vec4(m_width));
|
||||
}
|
||||
}
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
if (dual_brush->m_stencil_texture)
|
||||
dual_brush->m_stencil_texture->unbind();
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
dual_brush->m_tip_texture->unbind();
|
||||
}
|
||||
@@ -719,6 +714,8 @@ void Canvas::stroke_commit()
|
||||
glViewport(0, 0, m_width, m_height);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
const auto& b = m_current_stroke->m_brush;
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
//m_dirty_box[i] = glm::vec4(0, 0, m_width, m_height); // reset bounding box
|
||||
@@ -755,7 +752,8 @@ void Canvas::stroke_commit()
|
||||
m_sampler.bind(0);
|
||||
m_sampler_bg.bind(1);
|
||||
m_sampler_mask.bind(2);
|
||||
m_sampler_stencil.bind(3);
|
||||
m_sampler.bind(3);
|
||||
m_sampler_stencil.bind(4);
|
||||
if (m_current_mode == kCanvasMode::Erase)
|
||||
{
|
||||
ShaderManager::use(kShader::CompErase);
|
||||
@@ -764,7 +762,7 @@ void Canvas::stroke_commit()
|
||||
ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||
ShaderManager::u_int(kShaderUniform::Mask, m_smask_active);
|
||||
ShaderManager::u_int(kShaderUniform::UseFragCoordUV2, false);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, m_current_stroke->m_brush->m_tip_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, b->m_tip_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, 1);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
|
||||
@@ -787,16 +785,19 @@ void Canvas::stroke_commit()
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||
ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||
ShaderManager::u_int(kShaderUniform::TexDual, 3);
|
||||
ShaderManager::u_int(kShaderUniform::TexPattern, 4);
|
||||
//ShaderManager::u_vec2(kShaderUniform::Resolution, m_size);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, m_current_stroke->m_brush->m_tip_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, b->m_tip_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::PatternAlpha, b->m_pattern_opacity);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, 1);
|
||||
ShaderManager::u_int(kShaderUniform::Mask, m_smask_active);
|
||||
ShaderManager::u_int(kShaderUniform::UseFragCoordUV2, false);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, m_current_stroke->m_brush->m_blend_mode);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
ShaderManager::u_int(kShaderUniform::TexDual, 3);
|
||||
ShaderManager::u_int(kShaderUniform::UseDual, m_current_stroke->m_brush->m_dual_enabled);
|
||||
ShaderManager::u_int(kShaderUniform::DualBlendMode, m_current_stroke->m_brush->m_dual_blend_mode);
|
||||
ShaderManager::u_int(kShaderUniform::UseDual, b->m_dual_enabled);
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern, b->m_pattern_enabled && !b->m_pattern_eachsample);
|
||||
ShaderManager::u_int(kShaderUniform::DualBlendMode, b->m_dual_blend_mode);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
m_tex2[i].bind();
|
||||
@@ -805,10 +806,14 @@ void Canvas::stroke_commit()
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
m_smask.m_rtt[i].bindTexture();
|
||||
glActiveTexture(GL_TEXTURE3);
|
||||
m_current_stroke->m_brush->m_dual_enabled ?
|
||||
m_tmp_dual[i].bindTexture() : glBindTexture(GL_TEXTURE_2D, 0);
|
||||
if (b->m_dual_enabled)
|
||||
m_tmp_dual[i].bindTexture();
|
||||
glActiveTexture(GL_TEXTURE4);
|
||||
if (b->m_pattern_texture)
|
||||
b->m_pattern_texture->bind();
|
||||
m_plane.draw_fill();
|
||||
if (m_current_stroke->m_brush->m_dual_enabled)
|
||||
glActiveTexture(GL_TEXTURE3);
|
||||
if (b->m_dual_enabled)
|
||||
m_tmp_dual[i].unbindTexture();
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
m_smask.m_rtt[i].unbindTexture();
|
||||
@@ -822,7 +827,7 @@ void Canvas::stroke_commit()
|
||||
// ShaderManager::use(kShader::StrokeLayer);
|
||||
// ShaderManager::u_int(kShaderUniform::TexBG, 1);
|
||||
// ShaderManager::u_int(kShaderUniform::Lock, m_layers[m_current_layer_idx].m_alpha_locked);
|
||||
// ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->brush->m_tip_opacity);
|
||||
// ShaderManager::u_float(kShaderUniform::Alpha, b->m_tip_opacity);
|
||||
//
|
||||
// ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
// ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
@@ -996,11 +1001,13 @@ void Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
||||
//ShaderManager::u_vec2(kShaderUniform::Resolution, m_size);
|
||||
ShaderManager::u_int(kShaderUniform::UseFragCoordUV2, false);
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, 1);
|
||||
ShaderManager::u_float(kShaderUniform::PatternAlpha, 0);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, m_layers[source_idx].m_opacity);
|
||||
ShaderManager::u_int(kShaderUniform::Lock, false);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, m_layers[source_idx].m_blend_mode);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
ShaderManager::u_int(kShaderUniform::UseDual, false);
|
||||
ShaderManager::u_int(kShaderUniform::UsePattern,false);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
m_tex2[i].bind();
|
||||
|
||||
Reference in New Issue
Block a user