fix: resolve gltf companion assets reliably
This commit is contained in:
@@ -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>) {
|
||||
|
||||
Reference in New Issue
Block a user