Estoy depurando un código desconocido y obtengo los siguientes 3 cuando carga texturas KTX2:
THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()
WebGL warning: compressedTexSubImage: formato must match the format of the existing texture image.
WebGL warning: blitFramebuffer: DRAW_FRAMEBUFFER may not have multiple samples.
Las texturas también se cargan en negro, lo que creo que está relacionado con las advertencias.
Me las arreglé para rastrearlo hasta estos bits de código
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))); }); }Y ahí es donde desaparece en el código interno de ThreeJS que no tengo la experiencia suficiente para saber cómo manejar.
Los formatos se están cargando con un formato de 36492 que creo que es KTX2 por lo que puedo decir, así que no estoy seguro de qué está causando el error. Aún más extraño, está funcionando en algunas máquinas de compañeros de trabajo, pero no en la mía.
Alguien sabe que puede estar pasando?
El formato comprimido que intenta cargar ( 36492 o 0x8E8C ) es EXT_texture_compression_bptc y más específicamente COMPRESSED_RGBA_BPTC_UNORM_EXT (también conocido como BC7) Aquí está la especificación webgl
Cualquier soporte de formato comprimido en webgl se proporciona como una extensión. Como tal, no puede asumir que cualquier formato es compatible con una plataforma/hardware determinado. En general, cada sistema operativo requiere su propio conjunto.
Para usar correctamente la textura comprimida en webgl, debe exportar varios formatos y, según las pruebas de capacidades de tiempo de ejecución, cargue el adecuado. Y, en última instancia, proporcione siempre un respaldo no comprimido (jpg, png, webp...).
Tenga en cuenta que KTX es solo un contenedor y no un formato/códec de compresión. Puede contener cualquier formato AFAIK.