加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zz.com.cn/)- 语音技术、视频终端、数据开发、人脸识别、智能机器人!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

textures C dart:web_glRENDER警告:绑定到纹理单元0的纹理

发布时间:2024-06-09 11:42:07 所属栏目:资源 来源:DaWei
导读: 我收到错误[.WebGLRenderingContext] RENDER警告:绑定到纹理单元0的纹理不可渲染.当我在dartium中运行我的web应用程序时,它可能是非2次幂并且具有不兼容的纹理过滤或者不是“纹理完整
我收到错误[.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回调,然后执行下一组命令 – 其中涉及绑定纹理 – 但由于计算机非常快,它已经绑定纹理并试图在图像加载完成之前绘制它.
 
 
 

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章