我创建了一个非常基本的着色器:
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。
有什么想法吗?提前谢谢!
答案 0 :(得分:0)
Goblins:将maskSampler重命名为其他可以正常使用的名称,我不知道为什么会发生这种情况,因为" maskSampler"不会在代码的任何其他部分使用。