fix color bleeding
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user