有没有办法在与gl.bindTexture绑定后检索纹理的尺寸?

时间:2014-10-11 13:08:18

标签: opengl dart webgl

我有一个函数可以将服务器中的纹理加载到我的WebGL上下文中,如下所示:

Future<Texture> loadTexture(String path) {
  return new ImageElement(src: 'assets/' + path)
    .onLoad.first.then((e) {
      var texture = _gl.createTexture();
      _gl.bindTexture(TEXTURE_2D, texture);
      _gl.texImage2DUntyped(TEXTURE_2D, 0, RGBA, RGBA, UNSIGNED_BYTE, e.target);
      _gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, NEAREST);
      _gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR_MIPMAP_NEAREST);
      _gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);
      _gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);
      _gl.generateMipmap(TEXTURE_2D);
      _gl.bindTexture(TEXTURE_2D, null);
      return texture;
    });
}

然而,为了将我的纹理坐标从像素映射到0,0 - 1,1,我需要知道纹理的实际大小。如果在此代码返回Texture的情况下可以轻松检索维度,我不想介绍一个从此函数返回的类。

有没有办法直接从WebGL Texture检索to的坐标?

我知道我可以从源ImageElement获取它们,但如果我可以避免这种情况,那么API会更好。

1 个答案:

答案 0 :(得分:1)

否(至少在JavaScript WebGL中,不确定Dart WebGL绑定)。

在OpenGL 3.x和OpenGL ES 3.1中,带有GL_TEXTURE_WIDTH / _HEIGHT参数的getTexLevelParameter API调用可以检索当前绑定纹理的特定细节级别的纹理尺寸。此API调用在WebGL中不可用(1或2,WebGL 2仅基于OpenGL 3.0)。