三JS KTX2装载机"Attempt to load unsupported compressed texture format in .uploadTexture()"



我正在调试一些不熟悉的代码,当它加载KTX2纹理时,我得到以下3:

THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()

WebGL warning: compressedTexSubImage:格式must match the format of the existing texture image.

WebGL warning: blitFramebuffer: DRAW_FRAMEBUFFER may not have multiple samples.

纹理也加载为黑色,我相信这与警告有关。

我已经设法追踪到这些代码

this.ktx2Loader = new KTX2Loader(this.manager).detectSupport(editor.renderer.renderer);
...
loader = this.ktx2Loader;
const texture = await loadTexture(textureUrl, loader);
...
function loadTexture(src, textureLoader = new TextureLoader()) {
return new Promise((resolve, reject) => {
textureLoader.load(src, resolve, null, error => reject(new RethrownError(`Error loading texture "${src}"`, error)));
});
}

这就是它消失在ThreeJS内部代码的地方,我没有足够的经验知道如何处理。

这些格式正在加载36492的格式,我认为这是KTX2从我可以告诉,所以我有点不确定是什么导致了错误。更奇怪的是,它可以在一些同事的机器上运行,但不是我自己的。

有谁知道是怎么回事吗?

您尝试加载的压缩格式(364920x8E8C)是EXT_texture_compression_bptc,更具体地说是COMPRESSED_RGBA_BPTC_UNORM_EXT(又名BC7)这是webgl规范

webgl中的任何压缩格式支持都是作为扩展提供的。因此,您不能假设给定的平台/硬件支持任何格式。一般来说,每个操作系统都需要自己的集合。

要在webgl中正确使用压缩纹理,您需要导出各种格式,并根据运行时功能测试加载适当的格式。最后,总是提供一个非压缩的回退文件(jpg, png, webp…)。

注意KTX只是一个容器,而不是压缩格式/编解码器。它可以包含任何格式,AFAIK。

相关内容

  • 没有找到相关文章

最新更新