我有一个函数,可以将纹理从服务器加载到我的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纹理中检索到的坐标?
我知道我可以从源ImageElement
获得它们,但如果我能避免这种情况,API会更好。
否(至少在JavaScriptWebGL中,不确定Dart-WebGL绑定)。
在OpenGL 3.x和OpenGL ES 3.1中,带有GL_TEXTURE_WIDTH/_HEIGHT参数的getTexLevelParameter API调用可以检索当前绑定纹理的特定细节级别的纹理尺寸。此API调用在WebGL中不可用(1或2,WebGL 2仅基于OpenGL 3.0)。