在WebGL上多纹理GL_TEXTURE1问题

4
我正在学习如何在WebGL上使用多纹理。以下是我的着色器代码片段:
uniform int flag;

uniform sampler2D texture0;
uniform sampler2D texture1;

varying vec2 v_texCoord;

void main()
{
    vec2 texCoord = vec2(v_texCoord.s, 1.0 - v_texCoord.t);

    vec4 texel0 = texture2D(texture0, texCoord);
    vec4 texel1 = texture2D(texture1, texCoord);

    if (1 == flag) 
    {
        gl_FragColor = texel1;

    } else
    {
        gl_FragColor = texel0;
    }
}

此外,我的JavaScript代码片段:

gl.uniform1i(gl.getUniformLocation(gl.program, "flag"), 1);
gl.uniform1i(gl.getUniformLocation(gl.program, "texture0"), 0);     // Texture Unit 0
gl.uniform1i(gl.getUniformLocation(gl.program, "texture1"), 1);     // Texture Unit 1
// Activate 2 textures
gl.enable(gl.TEXTURE_2D);

gl.activeTexture(gl.GL_TEXTURE0);    
gl.bindTexture(gl.TEXTURE_2D, photoTexture0);

gl.activeTexture(gl.GL_TEXTURE1);    
gl.bindTexture(gl.TEXTURE_2D, photoTexture1);

照片纹理1(纹理1)在屏幕上只显示黑色。我可以正确地显示照片纹理0(纹理0)。看来照片纹理1(纹理1)在着色器中不可见。
由于上述代码无法正常工作,而我是新手,我想知道是否做错了什么和/或是否误解了多重纹理的概念。
感谢您的帮助。请注意:跨贴到http://www.khronos.org/message_boards/viewtopic.php?f=43&t=3357&p=8858#p8858
1个回答

5
我找到并修复了问题。
gl.activeTexture(gl.TEXTURE0);   // remove the "GL_" on GL_TEXTURE0
gl.bindTexture(gl.TEXTURE_2D, photoTexture0);

gl.uniform1i(gl.getUniformLocation(gl.program, "texture1"), 0);
gl.activeTexture(gl.TEXTURE1);     // remove the "GL_" on GL_TEXTURE1

我从一份用C语言编写的示例中复制并粘贴了GL_TEXTURE0。


WebGL不在TEXTURE0、TEXTURE1等上使用前缀“GL_”。请参阅WebGL规范https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/WebGL-spec.html。 - pion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接