mirror of
https://github.com/galacean/engine.git
synced 2026-07-02 09:35:10 +08:00
24 lines
781 B
TypeScript
24 lines
781 B
TypeScript
import { resourceLoader, Loader, AssetPromise, AssetType, LoadItem, ResourceManager } from "@galacean/engine-core";
|
|
|
|
function isBase64(url) {
|
|
return /^data:(.+?);base64,/.test(url);
|
|
}
|
|
@resourceLoader(AssetType.Buffer, ["bin", "r3bin"], false)
|
|
class BufferLoader extends Loader<ArrayBuffer> {
|
|
load(item: LoadItem, resourceManager: ResourceManager): AssetPromise<ArrayBuffer> {
|
|
const url = item.url;
|
|
if (isBase64(url)) {
|
|
return new AssetPromise((resolve) => {
|
|
const base64Str = url.slice(13 + RegExp.$1.length);
|
|
const result = Uint8Array.from(atob(base64Str), (c) => c.charCodeAt(0));
|
|
resolve(result.buffer);
|
|
});
|
|
}
|
|
// @ts-ignore
|
|
return resourceManager._request(url, {
|
|
...item,
|
|
type: "arraybuffer"
|
|
});
|
|
}
|
|
}
|