fix: resolve gltf companion assets reliably

This commit is contained in:
Tom Boullay
2026-04-27 23:01:29 +02:00
parent aeb0832409
commit 5556364601
5 changed files with 82 additions and 14 deletions
+17 -4
View File
@@ -29,15 +29,28 @@ interface AlphaMapMaterial extends Material {
const alphaMapTextureCache = new WeakMap<Texture, Texture>()
function getRequestedFilename(requestedUrl: string) {
const cleanUrl = decodeURIComponent(requestedUrl.split(/[?#]/)[0] || '')
return cleanUrl.split(/[\\/]/).pop()?.toLowerCase()
}
function resolveSingleBinFallback(filename: string | undefined, assetUrls: Record<string, string>) {
if (!filename?.endsWith('.bin')) return undefined
const binEntries = Object.entries(assetUrls).filter(([assetName]) => assetName.endsWith('.bin'))
return binEntries.length === 1 ? binEntries[0][1] : undefined
}
function resolveAssetUrl(requestedUrl: string, assetUrls: Record<string, string>) {
if (requestedUrl.startsWith('blob:') || requestedUrl.startsWith('data:')) {
if (requestedUrl.startsWith('data:')) {
return requestedUrl
}
const cleanUrl = decodeURIComponent(requestedUrl.split(/[?#]/)[0] || '')
const filename = cleanUrl.split(/[\\/]/).pop()?.toLowerCase()
const filename = getRequestedFilename(requestedUrl)
const exactAssetUrl = filename ? assetUrls[filename] : undefined
const fallbackBinUrl = resolveSingleBinFallback(filename, assetUrls)
return filename ? assetUrls[filename] || requestedUrl : requestedUrl
return exactAssetUrl || fallbackBinUrl || requestedUrl
}
function getOpacityMapEntries(assetUrls: Record<string, string>) {