当我在dartium中运行我的web应用程序时,我收到错误[.WebGLRenderingContext]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'.两天来,我一直在try 解决这个问题,包括完全重写代码,但我无法隔离这个问题.

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

  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, 0, webGL.RGBA, 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是32x32

你知道问题出在哪里吗?

推荐答案

在我问题中的代码之后,我立即绑定了纹理并发送了采样器制服.这是错误的,因为它是在图像加载之前执行的.要解决这个问题,我将绑定纹理和绘制元素的调用放在onLoad函数中:

  image.onLoad.listen((e) {
    gl.bindTexture(webGL.TEXTURE_2D, texture);
    gl.texImage2DImage(webGL.TEXTURE_2D, 0, webGL.RGBA, 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);

    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回调,然后执行下一组命令——这涉及绑定纹理——但由于计算机速度非常快,它已经绑定了纹理,并试图在图像加载完成之前绘制它.

Dart相关问答推荐

聆听Firestore计数()

VS Code 无法识别 Flutter 中的单元测试

在 Dart 中处理字节数组时,使用 Uint8List 优于 List 有什么优势?

Flutter DatePicker 没有day选项

Dart / Flutter 错误:没有为类Logger定义toStringDeep

如何通过 foreach 函数避免在 dart Map 中使用 await 键

如何在 Flutter 的小部件树中将新的 MaterialPageRoute 作为子项打开

什么是NoSuchMethod错误,如何修复?

如何在Flutter应用程序中使用套接字?

在小部件构建期间,如何在Flutter中导航?

从real mobile浏览器访问Flatter localhost

Flatter BLoC-如何将参数传递给事件?

Flutter 示例中的流布局

如何在没有脚手架的情况下显示snackBar

使用 dart 下载文件

如何在 Dart 中上传文件?

如何判断switch/case中对象的类型?

如何在dart中生成随机字符串?

如何使用 Dart 构建枚举?

将方法或值添加到 dart 中的枚举