From 6d88503f704d4da823b9c0fba52a52ce2b956ed3 Mon Sep 17 00:00:00 2001 From: Mathias Kanzler Date: Thu, 20 Jul 2023 11:33:10 +0200 Subject: [PATCH] Set mimetype based on file exxtension when mimetype is not given in the glTF --- source/gltf/image.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/source/gltf/image.js b/source/gltf/image.js index 21d0bfd4..5d762671 100644 --- a/source/gltf/image.js +++ b/source/gltf/image.js @@ -1,5 +1,6 @@ import { GltfObject } from './gltf_object.js'; import { isPowerOf2 } from './math_utils.js'; +import { getExtension } from './utils.js'; import { AsyncFileReader } from '../ResourceLoader/async_file_reader.js'; import { GL } from "../Renderer/webgl"; import { ImageMimeType } from "./image_mime_type.js"; @@ -14,7 +15,7 @@ class gltfImage extends GltfObject miplevel = 0, bufferView = undefined, name = undefined, - mimeType = ImageMimeType.JPEG, + mimeType = undefined, image = undefined) { super(); @@ -73,12 +74,41 @@ class gltfImage extends GltfObject }); } + setMimetypeFromFilename(filename) + { + + let extension = getExtension(filename) + if(extension == "ktx2" || extension == "ktx") + { + this.mimeType = ImageMimeType.KTX2; + } + else if(extension == "jpg" || extension == "jpeg") + { + this.mimeType = ImageMimeType.JPEG; + } + else if(extension == "png" ) + { + this.mimeType = ImageMimeType.PNG; + } + else + { + console.warn("MimeType not defined"); + // assume jpeg encoding as best guess + this.mimeType = ImageMimeType.JPEG; + } + + } + async setImageFromUri(gltf) { if (this.uri === undefined) { return false; } + if (this.mimeType === undefined) + { + this.setMimetypeFromFilename(this.uri); + } if(this.mimeType === ImageMimeType.KTX2) { @@ -181,6 +211,12 @@ class gltfImage extends GltfObject return false; } + if (this.mimeType === undefined) + { + this.setMimetypeFromFilename(foundFile.name); + } + + if(this.mimeType === ImageMimeType.KTX2) { if (gltf.ktxDecoder !== undefined)