QOpenGLWidget不能使用多个sampler2D

时间:2017-02-27 19:55:18

标签: c++ qt opengl binding

我创建了一个非常基本的着色器:

static const char *frag_showImage =
"#version 150\n"
"uniform sampler2D textureSampler;\n"
"in mediump vec2 texc;\n"
"out highp vec4 fragColor;\n"
"void main() {\n"
"   fragColor = texture2D(textureSampler, texc.st);\n"
"}\n";

它按预期工作,现在有点复杂了:

"#version 150\n"
"uniform sampler2D textureSampler;\n"
"uniform sampler2D maskSampler;\n"
"in mediump vec2 texc;\n"
"out highp vec4 fragColor;\n"
"void main() {\n"
"   fragColor = texture2D(textureSampler, texc.st);\n"
"   fragColor.x = texture2D(maskSampler, texc.st).x;\n"
"   fragColor.y =0;\n"
"}\n";

它不起作用,但没有任何警告都没有错误:

在这两种情况下我都将第一个纹理绑定为:

QOpenGLFunctions *f =this->context()->functions();
f->glActiveTexture(GL_TEXTURE0);
glBaseTexture->bind();
m_program->setUniformValue("textureSampler", 0);

并将第二个纹理绑定为:

f->glActiveTexture(GL_TEXTURE1);    
glMaskTexture->bind();
m_program->setUniformValue("maskSampler", 1);

请注意,如果我为第一个着色器绑定glMaskTexture,它可以正常运行,因此问题不在于QOpenGlTexture。

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

Goblins:将maskSampler重命名为其他可以正常使用的名称,我不知道为什么会发生这种情况,因为" maskSampler"不会在代码的任何其他部分使用。