diff --git a/app/render/backend/opengl/openglworker.cpp b/app/render/backend/opengl/openglworker.cpp index 560b76f95..62bca4a94 100644 --- a/app/render/backend/opengl/openglworker.cpp +++ b/app/render/backend/opengl/openglworker.cpp @@ -208,21 +208,27 @@ void OpenGLWorker::RunNodeAccelerated(const Node *node, const NodeValueDatabase functions_->glActiveTexture(GL_TEXTURE0 + input_texture_count); - if (texture) { - functions_->glBindTexture(GL_TEXTURE_2D, texture->texture()); - } else { - functions_->glBindTexture(GL_TEXTURE_2D, 0); - } + GLuint tex_id = texture ? texture->texture() : 0; + functions_->glBindTexture(GL_TEXTURE_2D, tex_id); // Set value to bound texture shader->setUniformValue(variable_location, input_texture_count); - // Set texture resolution if shader wants it - int res_param_location = shader->uniformLocation(QStringLiteral("%1_resolution").arg(input->id())); - if (res_param_location > -1) { - shader->setUniformValue(res_param_location, - static_cast(texture->width()), - static_cast(texture->height())); + // Set enable flag if shader wants it + int enable_param_location = shader->uniformLocation(QStringLiteral("%1_enabled").arg(input->id())); + if (enable_param_location > -1) { + shader->setUniformValue(enable_param_location, + tex_id > 0); + } + + if (tex_id > 0) { + // Set texture resolution if shader wants it + int res_param_location = shader->uniformLocation(QStringLiteral("%1_resolution").arg(input->id())); + if (res_param_location > -1) { + shader->setUniformValue(res_param_location, + static_cast(texture->width()), + static_cast(texture->height())); + } } olive::gl::PrepareToDraw(functions_); diff --git a/app/shaders/alphaover.frag b/app/shaders/alphaover.frag index 0699bb0b9..a5467e0a3 100644 --- a/app/shaders/alphaover.frag +++ b/app/shaders/alphaover.frag @@ -4,10 +4,23 @@ varying vec2 ove_texcoord; uniform sampler2D base_in; uniform sampler2D blend_in; +uniform bool base_in_enabled; +uniform bool blend_in_enabled; void main(void) { vec4 base_col = texture2D(base_in, ove_texcoord); vec4 blend_col = texture2D(blend_in, ove_texcoord); + + if (!base_in_enabled) { + gl_FragColor = blend_col; + return; + } + + if (!blend_in_enabled) { + gl_FragColor = base_col; + return; + } + base_col *= 1.0 - blend_col.a; base_col += blend_col;