textures – dart:web_gl:RENDER警告:绑定到纹理单元0的纹理不可渲染

前端之家收集整理的这篇文章主要介绍了textures – dart:web_gl:RENDER警告:绑定到纹理单元0的纹理不可渲染前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我收到错误[.WebGLRenderingContext] RENDER警告:绑定到纹理单元0的纹理不可渲染.当我在dartium中运行我的web应用程序时,它可能是非2次幂并且具有不兼容的纹理过滤或者不是“纹理完整”.我一直试图解决这个问题两天,包括完全重写代码,但我不能隔离这个问题.

我认为问题在于这段代码.

  1. void main() {
  2. ...
  3. var texture = gl.createTexture();
  4. var image = new ImageElement();
  5. image.onLoad.listen((e) {
  6. gl.bindTexture(webGL.TEXTURE_2D,texture);
  7. gl.texImage2DImage(webGL.TEXTURE_2D,webGL.RGBA,webGL.UNSIGNED_BYTE,image);
  8. gl.texParameteri(webGL.TEXTURE_2D,webGL.TEXTURE_MAG_FILTER,webGL.NEAREST);
  9. gl.texParameteri(webGL.TEXTURE_2D,webGL.TEXTURE_MIN_FILTER,webGL.NEAREST);
  10. gl.bindTexture(webGL.TEXTURE_2D,null);
  11. });
  12. image.src = "tex.png";
  13. ...
  14. }

tex.png是32×32

关于问题是什么的任何想法?

解决方法

在我的问题中的代码之后,我立即绑定了纹理并将采样器均匀发送.这是错误的,因为它是在加载图像之前执行的.为了解决这个问题,我调用绑定纹理并在onload函数中绘制元素:
  1. image.onLoad.listen((e) {
  2. gl.bindTexture(webGL.TEXTURE_2D,texture);
  3. gl.texImage2DImage(webGL.TEXTURE_2D,image);
  4. gl.texParameteri(webGL.TEXTURE_2D,webGL.NEAREST);
  5. gl.texParameteri(webGL.TEXTURE_2D,webGL.NEAREST);
  6. gl.bindTexture(webGL.TEXTURE_2D,null);
  7.  
  8. gl.activeTexture(webGL.TEXTURE0);
  9. gl.bindTexture(webGL.TEXTURE_2D,texture);
  10. gl.uniform1i(gl.getUniformLocation(shader.program,"uSampler"),0);
  11.  
  12. gl.drawElements(webGL.TRIANGLES,6,webGL.UNSIGNED_SHORT,0);
  13.  
  14. });

这确保图像已加载.

之前,它只是分配onload回调,然后执行下一组命令 – 其中涉及绑定纹理 – 但由于计算机非常快,它已经绑定纹理并试图在图像加载完成之前绘制它.

猜你在找的HTML相关文章