我收到错误[.WebglrenderingContext] RENDER警告:绑定到纹理单元0的纹理不可渲染.当我在dartium中运行我的web应用程序时,它可能是非2次幂并且具有不兼容的纹理过滤或者不是“纹理完整”.我一直试图解决这个问题两天,包括完全重写代码,但我不能隔离这个问题.
我认为问题在于这段代码.
void main() { ... var texture = gl.createTexture(); var image = new ImageElement(); image.onLoad.listen((e) { gl.bindTexture(webGL.TEXTURE_2D,texture); gl.texImage2DImage(webGL.TEXTURE_2D,webGL.RGBA,webGL.UNSIGNED_BYTE,image); gl.texParameteri(webGL.TEXTURE_2D,webGL.TEXTURE_MAG_FILTER,webGL.NEAREST); gl.texParameteri(webGL.TEXTURE_2D,webGL.TEXTURE_MIN_FILTER,webGL.NEAREST); gl.bindTexture(webGL.TEXTURE_2D,null); }); image.src = "tex.png"; ... }
tex.png是32×32
关于问题是什么的任何想法?
解决方法
在我的问题中的代码之后,我立即绑定了纹理并将采样器均匀发送.这是错误的,因为它是在加载图像之前执行的.为了解决这个问题,我调用绑定纹理并在onload函数中绘制元素:
image.onLoad.listen((e) { gl.bindTexture(webGL.TEXTURE_2D,texture); gl.texImage2DImage(webGL.TEXTURE_2D,image); gl.texParameteri(webGL.TEXTURE_2D,webGL.NEAREST); gl.texParameteri(webGL.TEXTURE_2D,webGL.NEAREST); gl.bindTexture(webGL.TEXTURE_2D,null); gl.activeTexture(webGL.TEXTURE0); gl.bindTexture(webGL.TEXTURE_2D,texture); gl.uniform1i(gl.getUniformlocation(shader.program,"uSampler"),0); gl.drawElements(webGL.TRIANGLES,6,webGL.UNSIGNED_SHORT,0); });
这确保图像已加载.
之前,它只是分配onload回调,然后执行下一组命令 – 其中涉及绑定纹理 – 但由于计算机非常快,它已经绑定纹理并试图在图像加载完成之前绘制它.
原文地址:https://www.jb51.cc/html/227520.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。