我收到错误消息:Error: WebGL warning: drawElements: Tex image TEXTURE_2D level 0 is incurring lazy initialization.
在 WebGL 上,我想知道它的实际含义。
无论如何,延迟初始化在单线程应用程序中怎么会成为问题呢?我的理解是当你在 getter 中初始化一个变量时?
我尝试寻找我的错误消息并没有真正找到任何好的信息。
这是我处理纹理的代码:
const images = await Promise.all(model.maps.map(map => new Promise((resolve, reject) => {
const image = new Image();
image.src = map;
image.onload = event => {
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, image.width, image.height, 0, gl.RGBA, gl.FLOAT, null);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.bindTexture(gl.TEXTURE_2D, null);
resolve(texture);
};
image.onerror = error => {
console.log(error);
resolve(null);
};
})));
我的绘制函数的相关部分基本上是:
gl.bindTexture(gl.TEXTURE_2D, textures[material.textureIndex]);
gl.activeTexture(gl.TEXTURE0);
gl.drawElements(gl.TRIANGLES, material.faceCount * 3, gl.UNSIGNED_SHORT, drawnCount);
话虽如此,如果我使用 6 个参数语法:gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.FLOAT, image);
然后这个错误消息不再显示,并且我设法正确渲染。