implement texture null check flag on shaders

Sets a flag if the texture being sent to the shader is null
This commit is contained in:
itsmattkc
2019-12-10 01:20:57 +11:00
parent c35a6d009d
commit 92776b877d
2 changed files with 30 additions and 11 deletions
+17 -11
View File
@@ -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<GLfloat>(texture->width()),
static_cast<GLfloat>(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<GLfloat>(texture->width()),
static_cast<GLfloat>(texture->height()));
}
}
olive::gl::PrepareToDraw(functions_);
+13
View File
@@ -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;