这是我在此页面中的第一个问题,因为我没有找到有此错误的人,我希望我在这个问题中解释自己。
对于WebGl纹理有问题,我收到下一个错误: 错误:WebGL:texImage2D:转换需要像素重新格式化。
这发生在这里:
function initSueloTextures(gl, sueloParametros) {
sueloParametros.textureSuelo = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, sueloParametros.textureSuelo);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
new Uint8Array([0, 0, 255, 255]));
var sueloImage = new Image();
sueloImage.onload = function() { handleTextureLoaded(gl, sueloImage, sueloParametros.textureSuelo); }
sueloImage.src = "resources/marbletexture.png";
}
function handleTextureLoaded(gl, image, texture) {
console.log("handleTextureLoaded, image = " + image);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA,
gl.UNSIGNED_BYTE, image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
gl.generateMipmap(gl.TEXTURE_2D);
gl.bindTexture(gl.TEXTURE_2D, null);
}
错误出现在handleTextureLoaded texImage2D中。我认为我使用的变量不是问题,因为我将其更改为我创建的另一个全局变量以测试它并且错误仍然出现。
我正在使用最新版本的Firefox。
感谢您的时间。
答案 0 :(得分:3)
错误是什么?检查浏览器的JavaScript控制台
如果您在两个维度中重新加载的图片不是2的幂,则会收到错误和警告。调用gl.generateMipmap
时出现一个错误,因为在WebGL1中,您无法为非2次幂纹理生成mips。当你尝试渲染它时也会出现警告,因为如果你有一个非2次幂纹理,你必须将TEXTURE_MIN_FILTER
设置为LINEAR
或NEAREST
否则它是不可渲染的
2的权力是1,2,4,8,16,32,64,128,256等......
另外,使用逗号代替加号console.log
console.log("handleTextureLoaded, image =", image);
而不是
console.log("handleTextureLoaded, image = " + image);
比较结果:
原因是加上图像转换为字符串,与"handleTextureLoaded, image = "
连接,然后发送到console.log,所以console.log
看到的只是一个字符串。使用逗号,实际图片会发送到console.log
,因此console.log
可以发挥更多魔力
答案 1 :(得分:3)
这不是错误,尽管"错误"标签。它只是一个警告说,将图像加载到纹理将需要一些沉重的CPU端像素转换。如果您确实遇到性能问题,请忽略它。
正如我们所说,它是一个WIP问题。
这不是错误,只是警告 - > https://dxr.mozilla.org/mozilla-central/source/dom/canvas/TexUnpackBlob.cpp#316-318
有关更多信息,请查看此主题: https://bugzilla.mozilla.org/show_bug.cgi?id=1246410