fix color bleeding

This commit is contained in:
2019-07-21 00:27:34 +02:00
parent 02fda636ab
commit 85d9c057f8
15 changed files with 258 additions and 221 deletions

View File

@@ -18,7 +18,7 @@ void NodeCanvas::init()
m_canvas->m_node = this;
m_sampler.create();
m_sampler.set_filter(GL_LINEAR, GL_NEAREST);
//m_sampler.set_filter(GL_LINEAR, GL_NEAREST);
m_sampler_nearest.create(GL_NEAREST);
@@ -80,11 +80,6 @@ void NodeCanvas::draw()
m_canvas->m_box = box;
m_canvas->m_vp = c;
m_sampler.bind(0);
m_sampler.bind(1);
m_sampler.bind(2);
m_sampler.bind(3);
m_sampler_stencil.bind(4);
auto blend = glIsEnabled(GL_BLEND);
auto depth = glIsEnabled(GL_DEPTH_TEST);
@@ -152,24 +147,15 @@ void NodeCanvas::draw()
glm::translate(glm::vec3(0, 0, -1));
m_sampler.bind(0);
m_sampler_linear.bind(1);
ShaderManager::use(kShader::TextureAlphaSep);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_int(kShaderUniform::TexA, 1);
ShaderManager::u_float(kShaderUniform::Alpha, 1.f);
ShaderManager::u_int(kShaderUniform::Highlight, false);
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
glActiveTexture(GL_TEXTURE0);
m_canvas->m_layers_merge.m_rtt[plane_index].bindTexture();
glActiveTexture(GL_TEXTURE1);
m_canvas->m_layers_merge.m_rtt[plane_index].bindTexture();
m_face_plane.draw_fill();
glActiveTexture(GL_TEXTURE1);
m_canvas->m_layers_merge.m_rtt[plane_index].unbindTexture();
glActiveTexture(GL_TEXTURE0);
m_canvas->m_layers_merge.m_rtt[plane_index].unbindTexture();
}
}
@@ -237,6 +223,9 @@ void NodeCanvas::draw()
if (m_canvas->m_current_stroke && m_canvas->m_current_mode == kCanvasMode::Erase && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
{
m_sampler.bind(0);
m_sampler.bind(1);
m_sampler.bind(2);
ShaderManager::use(kShader::CompErase);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_int(kShaderUniform::TexStroke, 1);
@@ -259,10 +248,14 @@ void NodeCanvas::draw()
glActiveTexture(GL_TEXTURE0);
m_canvas->m_layers[layer_index]->m_rtt[plane_index].unbindTexture();
}
else if(m_canvas->m_current_stroke && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
else if(!App::I->keys[(int)kKey::KeyQ] && m_canvas->m_current_stroke && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
{
m_sampler.bind(0);
m_sampler.bind(1);
m_sampler.bind(2);
m_sampler.bind(3);
m_sampler_stencil.bind(4);
glm::vec2 patt_scale = glm::vec2(b->m_pattern_scale);
if (b->m_pattern_flipx) patt_scale.x *= -1.f;
if (b->m_pattern_flipy) patt_scale.y *= -1.f;
@@ -318,25 +311,18 @@ void NodeCanvas::draw()
}
else
{
m_sampler.bind(0);
m_sampler_linear.bind(1);
ShaderManager::use(kShader::TextureAlphaSep);
if (App::I->keys[(int)kKey::KeyQ])
glDisable(GL_BLEND);
m_canvas->m_cam_fov < 20.f ? m_sampler_nearest.bind(0) : m_sampler.bind(0);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_int(kShaderUniform::TexA, 1);
ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_layers[layer_index]->m_opacity);
ShaderManager::u_int(kShaderUniform::Highlight, m_canvas->m_layers[layer_index]->m_hightlight);
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
glActiveTexture(GL_TEXTURE0);
m_canvas->m_layers[layer_index]->m_rtt[plane_index].bindTexture();
glActiveTexture(GL_TEXTURE1);
m_canvas->m_layers[layer_index]->m_rtt[plane_index].bindTexture();
m_face_plane.draw_fill();
glActiveTexture(GL_TEXTURE1);
m_canvas->m_layers[layer_index]->m_rtt[plane_index].unbindTexture();
glActiveTexture(GL_TEXTURE0);
m_canvas->m_layers[layer_index]->m_rtt[plane_index].unbindTexture();
}
@@ -349,12 +335,10 @@ void NodeCanvas::draw()
if (use_blend)
{
m_sampler.bind(0);
m_sampler_linear.bind(1);
m_sampler.bind(2);
ShaderManager::use(kShader::TextureBlend);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_int(kShaderUniform::TexA, 1);
if (!ShaderManager::ext_framebuffer_fetch)
ShaderManager::u_int(kShaderUniform::TexBG, 2);
ShaderManager::u_int(kShaderUniform::BlendMode, m_canvas->m_layers[layer_index]->m_blend_mode);
@@ -363,8 +347,6 @@ void NodeCanvas::draw()
glActiveTexture(GL_TEXTURE0);
m_blender_rtt.bindTexture();
glActiveTexture(GL_TEXTURE1);
m_blender_rtt.bindTexture();
if (!ShaderManager::ext_framebuffer_fetch)
{
glActiveTexture(GL_TEXTURE2);
@@ -380,8 +362,6 @@ void NodeCanvas::draw()
glActiveTexture(GL_TEXTURE2);
m_blender_bg.unbind();
}
glActiveTexture(GL_TEXTURE1);
m_blender_rtt.unbindTexture();
glActiveTexture(GL_TEXTURE0);
m_blender_rtt.unbindTexture();
}