Мультитекстура GL_TEXTURE1 проблема на WebGL - PullRequest
4 голосов
/ 18 декабря 2010

Я учусь использовать мультитекстуру в 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);

PhotoTexture1 (texture1) отображает черный цвет только на экране. Я могу правильно отобразить photoTexture0 (texture0). Похоже, что photoTexture1 (texture1) не виден в шейдере.

Поскольку приведенный выше код не работает, и я новичок в этом, мне интересно, сделал ли я что-то не так и / или неправильно понял концепцию работы мультитекстуры.

Любая помощь приветствуется. Заранее благодарим за помощь.

ПРИМЕЧАНИЕ: кросс-пост на http://www.khronos.org/message_boards/viewtopic.php?f=43&t=3357&p=8858#p8858

1 Ответ

5 голосов
/ 18 декабря 2010

Я нашел и исправил проблему

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

Я вырезал и вставил GL_TEXTURE0 из примера, написанного на языке C.

...