【发布时间】:2014-03-30 08:05:51
【问题描述】:
我正在尝试在片段着色器中使用两个纹理,但无法让 WebGL 正确发送纹理。我可以一次发送一个,但是当我尝试同时发送两个时,我只会变黑。我已经看到了一些其他的多纹理示例,但它们都处理加载图像数组。
我想将视频加载到一个纹理中,并将画布加载到第二个纹理中。我相当肯定我的所有着色器都很好,因为我只是将它们从我编写的 c++ opengl 程序中移过来。此外,我可以通过评论一个或另一个来分别显示视频或画布,但就像我上面提到的那样,它们似乎一起触发了错误。
这是我创建和填充纹理的代码的 sn-p。
var texture1 = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture1);
var texture2 = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture2);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER, gl.NEAREST);
然后在我的绘制循环中:
gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE, video);
var tex1loc = gl.getUniformLocation(program,"u_image");
gl.uniform1i(tex1loc, 0);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture1);
gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE, canvas);
var tex2loc = gl.getUniformLocation(program, "u_image2");
gl.uniform1i(tex2loc, 1);
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, texture2);
我还收到一条警告消息:
GL_INVALID_ENUM : glActiveTexture: 纹理是 GL_FALSE
GL_INVALID_ENUM : glActiveTexture: 纹理是 GL_LINES
还有:
WebGL:drawArrays:绑定到纹理单元 0 的纹理不可渲染。它可能不是 2 的幂并且具有不兼容的纹理过滤或不是“纹理完整”。或者纹理是具有线性过滤的浮点或半浮点类型,而 OES_float_linear 或 OES_half_float_linear 扩展未启用。
触发警告的行是:
gl.drawArrays(gl.TRIANGLES, 0,6);
提前感谢您的帮助!
【问题讨论】:
标签: canvas webgl shader texturing multitexturing