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:
@@ -208,21 +208,27 @@ void OpenGLWorker::RunNodeAccelerated(const Node *node, const NodeValueDatabase
|
|||||||
|
|
||||||
functions_->glActiveTexture(GL_TEXTURE0 + input_texture_count);
|
functions_->glActiveTexture(GL_TEXTURE0 + input_texture_count);
|
||||||
|
|
||||||
if (texture) {
|
GLuint tex_id = texture ? texture->texture() : 0;
|
||||||
functions_->glBindTexture(GL_TEXTURE_2D, texture->texture());
|
functions_->glBindTexture(GL_TEXTURE_2D, tex_id);
|
||||||
} else {
|
|
||||||
functions_->glBindTexture(GL_TEXTURE_2D, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set value to bound texture
|
// Set value to bound texture
|
||||||
shader->setUniformValue(variable_location, input_texture_count);
|
shader->setUniformValue(variable_location, input_texture_count);
|
||||||
|
|
||||||
// Set texture resolution if shader wants it
|
// Set enable flag if shader wants it
|
||||||
int res_param_location = shader->uniformLocation(QStringLiteral("%1_resolution").arg(input->id()));
|
int enable_param_location = shader->uniformLocation(QStringLiteral("%1_enabled").arg(input->id()));
|
||||||
if (res_param_location > -1) {
|
if (enable_param_location > -1) {
|
||||||
shader->setUniformValue(res_param_location,
|
shader->setUniformValue(enable_param_location,
|
||||||
static_cast<GLfloat>(texture->width()),
|
tex_id > 0);
|
||||||
static_cast<GLfloat>(texture->height()));
|
}
|
||||||
|
|
||||||
|
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_);
|
olive::gl::PrepareToDraw(functions_);
|
||||||
|
|||||||
@@ -4,10 +4,23 @@ varying vec2 ove_texcoord;
|
|||||||
|
|
||||||
uniform sampler2D base_in;
|
uniform sampler2D base_in;
|
||||||
uniform sampler2D blend_in;
|
uniform sampler2D blend_in;
|
||||||
|
uniform bool base_in_enabled;
|
||||||
|
uniform bool blend_in_enabled;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
vec4 base_col = texture2D(base_in, ove_texcoord);
|
vec4 base_col = texture2D(base_in, ove_texcoord);
|
||||||
vec4 blend_col = texture2D(blend_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 *= 1.0 - blend_col.a;
|
||||||
base_col += blend_col;
|
base_col += blend_col;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user