@aura3d/assets 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/dist/AdvancedAssetCorpus.d.ts +124 -0
- package/dist/AdvancedAssetCorpus.d.ts.map +1 -0
- package/dist/AdvancedAssetCorpus.js +266 -0
- package/dist/AdvancedAssetCorpus.js.map +1 -0
- package/dist/AssetBundleCacheFixtures.d.ts +62 -0
- package/dist/AssetBundleCacheFixtures.d.ts.map +1 -0
- package/dist/AssetBundleCacheFixtures.js +222 -0
- package/dist/AssetBundleCacheFixtures.js.map +1 -0
- package/dist/AssetCache.d.ts +21 -0
- package/dist/AssetCache.d.ts.map +1 -0
- package/dist/AssetCache.js +54 -0
- package/dist/AssetCache.js.map +1 -0
- package/dist/AssetCompatibility.d.ts +54 -0
- package/dist/AssetCompatibility.d.ts.map +1 -0
- package/dist/AssetCompatibility.js +122 -0
- package/dist/AssetCompatibility.js.map +1 -0
- package/dist/AssetCorpus.d.ts +88 -0
- package/dist/AssetCorpus.d.ts.map +1 -0
- package/dist/AssetCorpus.js +215 -0
- package/dist/AssetCorpus.js.map +1 -0
- package/dist/AssetDependencyGraph.d.ts +12 -0
- package/dist/AssetDependencyGraph.d.ts.map +1 -0
- package/dist/AssetDependencyGraph.js +66 -0
- package/dist/AssetDependencyGraph.js.map +1 -0
- package/dist/AssetHandle.d.ts +26 -0
- package/dist/AssetHandle.d.ts.map +1 -0
- package/dist/AssetHandle.js +53 -0
- package/dist/AssetHandle.js.map +1 -0
- package/dist/AssetImportPreflight.d.ts +43 -0
- package/dist/AssetImportPreflight.d.ts.map +1 -0
- package/dist/AssetImportPreflight.js +117 -0
- package/dist/AssetImportPreflight.js.map +1 -0
- package/dist/AssetInspection.d.ts +183 -0
- package/dist/AssetInspection.d.ts.map +1 -0
- package/dist/AssetInspection.js +397 -0
- package/dist/AssetInspection.js.map +1 -0
- package/dist/AssetLoader.d.ts +26 -0
- package/dist/AssetLoader.d.ts.map +1 -0
- package/dist/AssetLoader.js +12 -0
- package/dist/AssetLoader.js.map +1 -0
- package/dist/AssetManager.d.ts +37 -0
- package/dist/AssetManager.d.ts.map +1 -0
- package/dist/AssetManager.js +161 -0
- package/dist/AssetManager.js.map +1 -0
- package/dist/AssetRegistry.d.ts +10 -0
- package/dist/AssetRegistry.d.ts.map +1 -0
- package/dist/AssetRegistry.js +34 -0
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/AssetRenderDefaults.d.ts +13 -0
- package/dist/AssetRenderDefaults.d.ts.map +1 -0
- package/dist/AssetRenderDefaults.js +23 -0
- package/dist/AssetRenderDefaults.js.map +1 -0
- package/dist/AudioLoader.d.ts +17 -0
- package/dist/AudioLoader.d.ts.map +1 -0
- package/dist/AudioLoader.js +23 -0
- package/dist/AudioLoader.js.map +1 -0
- package/dist/BlenderExportValidation.d.ts +64 -0
- package/dist/BlenderExportValidation.d.ts.map +1 -0
- package/dist/BlenderExportValidation.js +143 -0
- package/dist/BlenderExportValidation.js.map +1 -0
- package/dist/CarConceptMaterialStability.d.ts +28 -0
- package/dist/CarConceptMaterialStability.d.ts.map +1 -0
- package/dist/CarConceptMaterialStability.js +1308 -0
- package/dist/CarConceptMaterialStability.js.map +1 -0
- package/dist/EXRLoader.d.ts +2 -0
- package/dist/EXRLoader.d.ts.map +1 -0
- package/dist/EXRLoader.js +2 -0
- package/dist/EXRLoader.js.map +1 -0
- package/dist/ExternalParityGLTFCorpus.d.ts +39 -0
- package/dist/ExternalParityGLTFCorpus.d.ts.map +1 -0
- package/dist/ExternalParityGLTFCorpus.js +32 -0
- package/dist/ExternalParityGLTFCorpus.js.map +1 -0
- package/dist/GLTFAnimationRuntime.d.ts +243 -0
- package/dist/GLTFAnimationRuntime.d.ts.map +1 -0
- package/dist/GLTFAnimationRuntime.js +954 -0
- package/dist/GLTFAnimationRuntime.js.map +1 -0
- package/dist/GLTFCompressionDecoders.d.ts +42 -0
- package/dist/GLTFCompressionDecoders.d.ts.map +1 -0
- package/dist/GLTFCompressionDecoders.js +99 -0
- package/dist/GLTFCompressionDecoders.js.map +1 -0
- package/dist/GLTFExtensionSupport.d.ts +33 -0
- package/dist/GLTFExtensionSupport.d.ts.map +1 -0
- package/dist/GLTFExtensionSupport.js +85 -0
- package/dist/GLTFExtensionSupport.js.map +1 -0
- package/dist/GLTFLoader.d.ts +361 -0
- package/dist/GLTFLoader.d.ts.map +1 -0
- package/dist/GLTFLoader.js +2735 -0
- package/dist/GLTFLoader.js.map +1 -0
- package/dist/GLTFRenderResources.d.ts +162 -0
- package/dist/GLTFRenderResources.d.ts.map +1 -0
- package/dist/GLTFRenderResources.js +1684 -0
- package/dist/GLTFRenderResources.js.map +1 -0
- package/dist/HDRLoader.d.ts +2 -0
- package/dist/HDRLoader.d.ts.map +1 -0
- package/dist/HDRLoader.js +2 -0
- package/dist/HDRLoader.js.map +1 -0
- package/dist/ImageLoader.d.ts +15 -0
- package/dist/ImageLoader.d.ts.map +1 -0
- package/dist/ImageLoader.js +36 -0
- package/dist/ImageLoader.js.map +1 -0
- package/dist/ImportPipeline.d.ts +39 -0
- package/dist/ImportPipeline.d.ts.map +1 -0
- package/dist/ImportPipeline.js +105 -0
- package/dist/ImportPipeline.js.map +1 -0
- package/dist/KTX2BasisTextureTranscoder.d.ts +9 -0
- package/dist/KTX2BasisTextureTranscoder.d.ts.map +1 -0
- package/dist/KTX2BasisTextureTranscoder.js +178 -0
- package/dist/KTX2BasisTextureTranscoder.js.map +1 -0
- package/dist/LoadContext.d.ts +20 -0
- package/dist/LoadContext.d.ts.map +1 -0
- package/dist/LoadContext.js +42 -0
- package/dist/LoadContext.js.map +1 -0
- package/dist/MaterialLoader.d.ts +17 -0
- package/dist/MaterialLoader.d.ts.map +1 -0
- package/dist/MaterialLoader.js +138 -0
- package/dist/MaterialLoader.js.map +1 -0
- package/dist/MeshOptimization.d.ts +20 -0
- package/dist/MeshOptimization.d.ts.map +1 -0
- package/dist/MeshOptimization.js +65 -0
- package/dist/MeshOptimization.js.map +1 -0
- package/dist/OBJLoader.d.ts +13 -0
- package/dist/OBJLoader.d.ts.map +1 -0
- package/dist/OBJLoader.js +492 -0
- package/dist/OBJLoader.js.map +1 -0
- package/dist/SceneAnalysisFixtures.d.ts +100 -0
- package/dist/SceneAnalysisFixtures.d.ts.map +1 -0
- package/dist/SceneAnalysisFixtures.js +331 -0
- package/dist/SceneAnalysisFixtures.js.map +1 -0
- package/dist/SceneLoader.d.ts +27 -0
- package/dist/SceneLoader.d.ts.map +1 -0
- package/dist/SceneLoader.js +40 -0
- package/dist/SceneLoader.js.map +1 -0
- package/dist/ShaderLoader.d.ts +12 -0
- package/dist/ShaderLoader.d.ts.map +1 -0
- package/dist/ShaderLoader.js +18 -0
- package/dist/ShaderLoader.js.map +1 -0
- package/dist/TextureLoader.d.ts +16 -0
- package/dist/TextureLoader.d.ts.map +1 -0
- package/dist/TextureLoader.js +17 -0
- package/dist/TextureLoader.js.map +1 -0
- package/dist/TexturePipeline.d.ts +24 -0
- package/dist/TexturePipeline.d.ts.map +1 -0
- package/dist/TexturePipeline.js +64 -0
- package/dist/TexturePipeline.js.map +1 -0
- package/dist/TextureStreaming.d.ts +10 -0
- package/dist/TextureStreaming.d.ts.map +1 -0
- package/dist/TextureStreaming.js +11 -0
- package/dist/TextureStreaming.js.map +1 -0
- package/dist/WorkerAssetJobs.d.ts +18 -0
- package/dist/WorkerAssetJobs.d.ts.map +1 -0
- package/dist/WorkerAssetJobs.js +37 -0
- package/dist/WorkerAssetJobs.js.map +1 -0
- package/dist/advanced-gallery/index.d.ts +3 -0
- package/dist/advanced-gallery/index.d.ts.map +1 -0
- package/dist/advanced-gallery/index.js +2 -0
- package/dist/advanced-gallery/index.js.map +1 -0
- package/dist/asset-corpus/GLTFSceneLoader.d.ts +3 -0
- package/dist/asset-corpus/GLTFSceneLoader.d.ts.map +1 -0
- package/dist/asset-corpus/GLTFSceneLoader.js +2 -0
- package/dist/asset-corpus/GLTFSceneLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionAssetCorpus.d.ts +89 -0
- package/dist/asset-corpus/ProductionAssetCorpus.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionAssetCorpus.js +116 -0
- package/dist/asset-corpus/ProductionAssetCorpus.js.map +1 -0
- package/dist/asset-corpus/ProductionAssetPipeline.d.ts +3 -0
- package/dist/asset-corpus/ProductionAssetPipeline.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionAssetPipeline.js +3 -0
- package/dist/asset-corpus/ProductionAssetPipeline.js.map +1 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts +65 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.js +110 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts +8 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts +7 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionTextureLoader.d.ts +7 -0
- package/dist/asset-corpus/ProductionTextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionTextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionTextureLoader.js.map +1 -0
- package/dist/asset-corpus/index.d.ts +10 -0
- package/dist/asset-corpus/index.d.ts.map +1 -0
- package/dist/asset-corpus/index.js +8 -0
- package/dist/asset-corpus/index.js.map +1 -0
- package/dist/browser-index.d.ts +48 -0
- package/dist/browser-index.d.ts.map +1 -0
- package/dist/browser-index.js +26 -0
- package/dist/browser-index.js.map +1 -0
- package/dist/createRenderableScene.d.ts +23 -0
- package/dist/createRenderableScene.d.ts.map +1 -0
- package/dist/createRenderableScene.js +94 -0
- package/dist/createRenderableScene.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/loadRenderableAsset.d.ts +16 -0
- package/dist/loadRenderableAsset.d.ts.map +1 -0
- package/dist/loadRenderableAsset.js +50 -0
- package/dist/loadRenderableAsset.js.map +1 -0
- package/dist/loaders/CubeTextureLoader.d.ts +4 -0
- package/dist/loaders/CubeTextureLoader.d.ts.map +1 -0
- package/dist/loaders/CubeTextureLoader.js +9 -0
- package/dist/loaders/CubeTextureLoader.js.map +1 -0
- package/dist/loaders/EXRLoader.d.ts +4 -0
- package/dist/loaders/EXRLoader.d.ts.map +1 -0
- package/dist/loaders/EXRLoader.js +10 -0
- package/dist/loaders/EXRLoader.js.map +1 -0
- package/dist/loaders/HDRLoader.d.ts +4 -0
- package/dist/loaders/HDRLoader.d.ts.map +1 -0
- package/dist/loaders/HDRLoader.js +7 -0
- package/dist/loaders/HDRLoader.js.map +1 -0
- package/dist/loaders/KTX2Loader.d.ts +4 -0
- package/dist/loaders/KTX2Loader.d.ts.map +1 -0
- package/dist/loaders/KTX2Loader.js +7 -0
- package/dist/loaders/KTX2Loader.js.map +1 -0
- package/dist/loaders/LoaderDiagnostics.d.ts +18 -0
- package/dist/loaders/LoaderDiagnostics.d.ts.map +1 -0
- package/dist/loaders/LoaderDiagnostics.js +18 -0
- package/dist/loaders/LoaderDiagnostics.js.map +1 -0
- package/dist/loaders/MTLLoader.d.ts +10 -0
- package/dist/loaders/MTLLoader.d.ts.map +1 -0
- package/dist/loaders/MTLLoader.js +14 -0
- package/dist/loaders/MTLLoader.js.map +1 -0
- package/dist/loaders/OBJLoader.d.ts +12 -0
- package/dist/loaders/OBJLoader.d.ts.map +1 -0
- package/dist/loaders/OBJLoader.js +16 -0
- package/dist/loaders/OBJLoader.js.map +1 -0
- package/dist/loaders/TextureLoader.d.ts +6 -0
- package/dist/loaders/TextureLoader.d.ts.map +1 -0
- package/dist/loaders/TextureLoader.js +11 -0
- package/dist/loaders/TextureLoader.js.map +1 -0
- package/dist/loaders/ThreeCompatGLTFLoader.d.ts +10 -0
- package/dist/loaders/ThreeCompatGLTFLoader.d.ts.map +1 -0
- package/dist/loaders/ThreeCompatGLTFLoader.js +13 -0
- package/dist/loaders/ThreeCompatGLTFLoader.js.map +1 -0
- package/dist/loaders/index.d.ts +15 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +10 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts +34 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js +16 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts +29 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js +33 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js.map +1 -0
- package/dist/threejs-example-parity/index.d.ts +20 -0
- package/dist/threejs-example-parity/index.d.ts.map +1 -0
- package/dist/threejs-example-parity/index.js +218 -0
- package/dist/threejs-example-parity/index.js.map +1 -0
- package/package.json +23 -0
- package/src/AdvancedAssetCorpus.ts +454 -0
- package/src/AssetBundleCacheFixtures.ts +290 -0
- package/src/AssetCache.ts +76 -0
- package/src/AssetCompatibility.ts +224 -0
- package/src/AssetCorpus.ts +329 -0
- package/src/AssetDependencyGraph.ts +83 -0
- package/src/AssetHandle.ts +74 -0
- package/src/AssetImportPreflight.ts +179 -0
- package/src/AssetInspection.ts +706 -0
- package/src/AssetLoader.ts +36 -0
- package/src/AssetManager.ts +211 -0
- package/src/AssetRegistry.ts +44 -0
- package/src/AssetRenderDefaults.ts +36 -0
- package/src/AudioLoader.ts +41 -0
- package/src/BlenderExportValidation.ts +227 -0
- package/src/CarConceptMaterialStability.ts +1405 -0
- package/src/EXRLoader.ts +1 -0
- package/src/ExternalParityGLTFCorpus.ts +65 -0
- package/src/GLTFAnimationRuntime.ts +1221 -0
- package/src/GLTFCompressionDecoders.ts +190 -0
- package/src/GLTFExtensionSupport.ts +138 -0
- package/src/GLTFLoader.ts +4001 -0
- package/src/GLTFRenderResources.ts +2105 -0
- package/src/HDRLoader.ts +1 -0
- package/src/ImageLoader.ts +52 -0
- package/src/ImportPipeline.ts +148 -0
- package/src/KTX2BasisTextureTranscoder.ts +224 -0
- package/src/LoadContext.ts +60 -0
- package/src/MaterialLoader.ts +166 -0
- package/src/MeshOptimization.ts +93 -0
- package/src/OBJLoader.ts +551 -0
- package/src/SceneAnalysisFixtures.ts +438 -0
- package/src/SceneLoader.ts +62 -0
- package/src/ShaderLoader.ts +30 -0
- package/src/TextureLoader.ts +30 -0
- package/src/TexturePipeline.ts +96 -0
- package/src/TextureStreaming.ts +20 -0
- package/src/WorkerAssetJobs.ts +56 -0
- package/src/advanced-gallery/index.ts +18 -0
- package/src/asset-corpus/GLTFSceneLoader.ts +9 -0
- package/src/asset-corpus/ProductionAssetCorpus.ts +230 -0
- package/src/asset-corpus/ProductionAssetPipeline.ts +5 -0
- package/src/asset-corpus/ProductionGLTFRenderPipeline.ts +182 -0
- package/src/asset-corpus/ProductionHDRTextureLoader.ts +2 -0
- package/src/asset-corpus/ProductionKTX2TextureLoader.ts +2 -0
- package/src/asset-corpus/ProductionTextureLoader.ts +2 -0
- package/src/asset-corpus/index.ts +29 -0
- package/src/browser-index.ts +224 -0
- package/src/createRenderableScene.ts +128 -0
- package/src/index.ts +317 -0
- package/src/loadRenderableAsset.ts +67 -0
- package/src/loaders/CubeTextureLoader.ts +8 -0
- package/src/loaders/EXRLoader.ts +10 -0
- package/src/loaders/HDRLoader.ts +7 -0
- package/src/loaders/KTX2Loader.ts +7 -0
- package/src/loaders/LoaderDiagnostics.ts +36 -0
- package/src/loaders/MTLLoader.ts +20 -0
- package/src/loaders/OBJLoader.ts +24 -0
- package/src/loaders/TextureLoader.ts +14 -0
- package/src/loaders/ThreeCompatGLTFLoader.ts +19 -0
- package/src/loaders/index.ts +14 -0
- package/src/threejs-compatibility/ThreeCompatAssetProvenance.ts +51 -0
- package/src/threejs-compatibility/ThreeCompatAssetRegistry.ts +61 -0
- package/src/threejs-example-parity/index.ts +262 -0
- package/tests/assets.test.ts +311 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LoadContext } from "./LoadContext";
|
|
2
|
+
export interface AssetLoadRequest {
|
|
3
|
+
readonly url: string;
|
|
4
|
+
readonly type?: string;
|
|
5
|
+
readonly signal?: AbortSignal;
|
|
6
|
+
readonly onProgress?: (event: AssetLoadProgress) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface AssetLoadProgress {
|
|
9
|
+
readonly url: string;
|
|
10
|
+
readonly phase: "document" | "buffer" | "complete";
|
|
11
|
+
readonly loadedBytes: number;
|
|
12
|
+
readonly totalBytes?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface AssetLoader<T = unknown> {
|
|
15
|
+
readonly type: string;
|
|
16
|
+
canLoad(request: AssetLoadRequest): boolean;
|
|
17
|
+
dependencies?(request: AssetLoadRequest, context: LoadContext): Promise<readonly string[]> | readonly string[];
|
|
18
|
+
load(request: AssetLoadRequest, context: LoadContext): Promise<T> | T;
|
|
19
|
+
dispose?(asset: T): void | Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare class AssetLoadError extends Error {
|
|
22
|
+
readonly url: string;
|
|
23
|
+
readonly dependencyChain: readonly string[];
|
|
24
|
+
constructor(message: string, url: string, dependencyChain?: readonly string[], cause?: unknown);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=AssetLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetLoader.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC1D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC5C,YAAY,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC/G,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;gBAEhC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,GAAE,SAAS,MAAM,EAAO,EAAE,KAAK,CAAC,EAAE,OAAO;CAOnG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class AssetLoadError extends Error {
|
|
2
|
+
url;
|
|
3
|
+
dependencyChain;
|
|
4
|
+
constructor(message, url, dependencyChain = [], cause) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "AssetLoadError";
|
|
7
|
+
this.url = url;
|
|
8
|
+
this.dependencyChain = dependencyChain;
|
|
9
|
+
this.cause = cause;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=AssetLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetLoader.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetLoader.ts"],"names":[],"mappings":"AAwBA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,GAAG,CAAS;IACZ,eAAe,CAAoB;IAE5C,YAAY,OAAe,EAAE,GAAW,EAAE,kBAAqC,EAAE,EAAE,KAAe;QAChG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AssetCache } from "./AssetCache";
|
|
2
|
+
import { AssetDependencyGraph } from "./AssetDependencyGraph";
|
|
3
|
+
import { AssetHandle } from "./AssetHandle";
|
|
4
|
+
import { type AssetLoadProgress, type AssetLoader } from "./AssetLoader";
|
|
5
|
+
import { AssetRegistry } from "./AssetRegistry";
|
|
6
|
+
export interface AssetManagerOptions {
|
|
7
|
+
readonly baseUrl?: string;
|
|
8
|
+
readonly retries?: number;
|
|
9
|
+
readonly retryDelayMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface AssetLoadOptions {
|
|
12
|
+
readonly type?: string;
|
|
13
|
+
readonly signal?: AbortSignal;
|
|
14
|
+
readonly dependencyChain?: readonly string[];
|
|
15
|
+
readonly retries?: number;
|
|
16
|
+
readonly retryDelayMs?: number;
|
|
17
|
+
readonly onProgress?: (event: AssetLoadProgress) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare class AssetManager {
|
|
20
|
+
readonly registry: AssetRegistry;
|
|
21
|
+
readonly cache: AssetCache;
|
|
22
|
+
readonly dependencies: AssetDependencyGraph;
|
|
23
|
+
private readonly baseUrl;
|
|
24
|
+
private readonly defaultRetries;
|
|
25
|
+
private readonly defaultRetryDelayMs;
|
|
26
|
+
private nextId;
|
|
27
|
+
constructor(options?: AssetManagerOptions);
|
|
28
|
+
register(loader: AssetLoader): void;
|
|
29
|
+
load<T = unknown>(url: string, options?: AssetLoadOptions): Promise<AssetHandle<T>>;
|
|
30
|
+
release<T>(handle: AssetHandle<T>): Promise<void>;
|
|
31
|
+
private loadWithLoader;
|
|
32
|
+
private releaseLoadedDependencies;
|
|
33
|
+
private awaitInFlight;
|
|
34
|
+
private shouldRetry;
|
|
35
|
+
private waitForRetry;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=AssetManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetManager.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAkB,KAAK,iBAAiB,EAAyB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC1D;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,QAAQ,CAAC,KAAK,aAAoB;IAClC,QAAQ,CAAC,YAAY,uBAA8B;IAEnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,MAAM,CAAK;gBAEP,OAAO,GAAE,mBAAwB;IAM7C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI7B,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAiCvF,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAqBzC,cAAc;YAsDd,yBAAyB;YAQzB,aAAa;IA6B3B,OAAO,CAAC,WAAW;YAOL,YAAY;CAgB3B"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { AssetCache } from "./AssetCache.js";
|
|
2
|
+
import { AssetDependencyGraph } from "./AssetDependencyGraph.js";
|
|
3
|
+
import { AssetHandle } from "./AssetHandle.js";
|
|
4
|
+
import { AssetLoadError } from "./AssetLoader.js";
|
|
5
|
+
import { AssetRegistry } from "./AssetRegistry.js";
|
|
6
|
+
import { LoadContext } from "./LoadContext.js";
|
|
7
|
+
export class AssetManager {
|
|
8
|
+
registry = new AssetRegistry();
|
|
9
|
+
cache = new AssetCache();
|
|
10
|
+
dependencies = new AssetDependencyGraph();
|
|
11
|
+
baseUrl;
|
|
12
|
+
defaultRetries;
|
|
13
|
+
defaultRetryDelayMs;
|
|
14
|
+
nextId = 1;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.baseUrl = options.baseUrl ?? "";
|
|
17
|
+
this.defaultRetries = Math.max(0, Math.trunc(options.retries ?? 0));
|
|
18
|
+
this.defaultRetryDelayMs = Math.max(0, options.retryDelayMs ?? 0);
|
|
19
|
+
}
|
|
20
|
+
register(loader) {
|
|
21
|
+
this.registry.register(loader);
|
|
22
|
+
}
|
|
23
|
+
async load(url, options = {}) {
|
|
24
|
+
const context = new LoadContext({
|
|
25
|
+
baseUrl: this.baseUrl,
|
|
26
|
+
signal: options.signal,
|
|
27
|
+
dependencyChain: options.dependencyChain,
|
|
28
|
+
manager: this
|
|
29
|
+
});
|
|
30
|
+
const resolvedUrl = context.resolve(url);
|
|
31
|
+
context.throwIfAborted(resolvedUrl);
|
|
32
|
+
const key = `${options.type ?? "auto"}:${resolvedUrl}`;
|
|
33
|
+
const cached = this.cache.get(key);
|
|
34
|
+
if (cached) {
|
|
35
|
+
return cached.retain();
|
|
36
|
+
}
|
|
37
|
+
const inFlight = this.cache.getInFlight(key);
|
|
38
|
+
if (inFlight) {
|
|
39
|
+
const handle = await this.awaitInFlight(inFlight, context, resolvedUrl);
|
|
40
|
+
return handle.retain();
|
|
41
|
+
}
|
|
42
|
+
const request = { url: resolvedUrl, type: options.type, signal: options.signal, onProgress: options.onProgress };
|
|
43
|
+
const loader = this.registry.find(request);
|
|
44
|
+
const promise = this.loadWithLoader(loader, request, context.child(resolvedUrl), {
|
|
45
|
+
retries: Math.max(0, Math.trunc(options.retries ?? this.defaultRetries)),
|
|
46
|
+
retryDelayMs: Math.max(0, options.retryDelayMs ?? this.defaultRetryDelayMs)
|
|
47
|
+
});
|
|
48
|
+
this.cache.setInFlight(key, promise);
|
|
49
|
+
return promise;
|
|
50
|
+
}
|
|
51
|
+
async release(handle) {
|
|
52
|
+
const remaining = await handle.release();
|
|
53
|
+
if (remaining > 0) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
for (const dependencyId of this.dependencies.dependenciesOf(handle.id)) {
|
|
57
|
+
const dependencyKey = this.cache.keys().find((key) => this.cache.get(key)?.id === dependencyId);
|
|
58
|
+
const dependency = dependencyKey ? this.cache.get(dependencyKey) : undefined;
|
|
59
|
+
if (dependency && !dependency.disposed) {
|
|
60
|
+
await this.release(dependency);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const cacheKey = this.cache.keys().find((key) => this.cache.get(key)?.id === handle.id);
|
|
64
|
+
if (cacheKey) {
|
|
65
|
+
this.cache.delete(cacheKey);
|
|
66
|
+
}
|
|
67
|
+
this.dependencies.remove(handle.id);
|
|
68
|
+
}
|
|
69
|
+
async loadWithLoader(loader, request, context, retry) {
|
|
70
|
+
let attempt = 0;
|
|
71
|
+
while (true) {
|
|
72
|
+
context.throwIfAborted(request.url);
|
|
73
|
+
const dependencyHandles = [];
|
|
74
|
+
try {
|
|
75
|
+
const dependencyUrls = await loader.dependencies?.(request, context);
|
|
76
|
+
for (const dependencyUrl of dependencyUrls ?? []) {
|
|
77
|
+
context.throwIfAborted(request.url);
|
|
78
|
+
dependencyHandles.push(await context.loadDependency(dependencyUrl));
|
|
79
|
+
}
|
|
80
|
+
context.throwIfAborted(request.url);
|
|
81
|
+
const value = (await loader.load(request, context));
|
|
82
|
+
const handle = new AssetHandle({
|
|
83
|
+
id: `asset-${this.nextId++}`,
|
|
84
|
+
url: request.url,
|
|
85
|
+
type: loader.type,
|
|
86
|
+
value,
|
|
87
|
+
dispose: (asset) => loader.dispose?.(asset)
|
|
88
|
+
});
|
|
89
|
+
this.dependencies.addNode(handle.id);
|
|
90
|
+
for (const dependency of dependencyHandles) {
|
|
91
|
+
this.dependencies.addDependency(handle.id, dependency.id);
|
|
92
|
+
}
|
|
93
|
+
return handle;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
await this.releaseLoadedDependencies(dependencyHandles);
|
|
97
|
+
if (this.shouldRetry(error, context, attempt, retry.retries)) {
|
|
98
|
+
attempt += 1;
|
|
99
|
+
await this.waitForRetry(retry.retryDelayMs, context, request.url);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (error instanceof AssetLoadError) {
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
throw new AssetLoadError(`Failed to load asset ${request.url}`, request.url, context.dependencyChain, error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async releaseLoadedDependencies(dependencyHandles) {
|
|
110
|
+
for (const dependency of [...dependencyHandles].reverse()) {
|
|
111
|
+
if (!dependency.disposed) {
|
|
112
|
+
await this.release(dependency);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async awaitInFlight(promise, context, url) {
|
|
117
|
+
if (!context.signal) {
|
|
118
|
+
return promise;
|
|
119
|
+
}
|
|
120
|
+
context.throwIfAborted(url);
|
|
121
|
+
return new Promise((resolve, reject) => {
|
|
122
|
+
const abort = () => {
|
|
123
|
+
reject(new AssetLoadError("Asset load aborted", url, context.dependencyChain, context.signal?.reason));
|
|
124
|
+
};
|
|
125
|
+
context.signal?.addEventListener("abort", abort, { once: true });
|
|
126
|
+
promise.then((handle) => {
|
|
127
|
+
context.signal?.removeEventListener("abort", abort);
|
|
128
|
+
resolve(handle);
|
|
129
|
+
}, (error) => {
|
|
130
|
+
context.signal?.removeEventListener("abort", abort);
|
|
131
|
+
reject(error);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
shouldRetry(error, context, attempt, retries) {
|
|
136
|
+
if (attempt >= retries)
|
|
137
|
+
return false;
|
|
138
|
+
if (context.signal?.aborted)
|
|
139
|
+
return false;
|
|
140
|
+
if (error instanceof AssetLoadError && error.message === "Asset load aborted")
|
|
141
|
+
return false;
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
async waitForRetry(delayMs, context, url) {
|
|
145
|
+
context.throwIfAborted(url);
|
|
146
|
+
if (delayMs === 0)
|
|
147
|
+
return;
|
|
148
|
+
await new Promise((resolve, reject) => {
|
|
149
|
+
const timeout = setTimeout(() => {
|
|
150
|
+
context.signal?.removeEventListener("abort", abort);
|
|
151
|
+
resolve();
|
|
152
|
+
}, delayMs);
|
|
153
|
+
const abort = () => {
|
|
154
|
+
clearTimeout(timeout);
|
|
155
|
+
reject(new AssetLoadError("Asset load aborted", url, context.dependencyChain, context.signal?.reason));
|
|
156
|
+
};
|
|
157
|
+
context.signal?.addEventListener("abort", abort, { once: true });
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=AssetManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetManager.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AssetLoadRequest, AssetLoader } from "./AssetLoader";
|
|
2
|
+
export declare class AssetRegistry {
|
|
3
|
+
private readonly loaders;
|
|
4
|
+
register(loader: AssetLoader): void;
|
|
5
|
+
unregister(type: string): boolean;
|
|
6
|
+
get(type: string): AssetLoader;
|
|
7
|
+
find(request: AssetLoadRequest): AssetLoader;
|
|
8
|
+
list(): readonly string[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=AssetRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetRegistry.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAQnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAS9B,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW;IAc5C,IAAI,IAAI,SAAS,MAAM,EAAE;CAG1B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export class AssetRegistry {
|
|
2
|
+
loaders = new Map();
|
|
3
|
+
register(loader) {
|
|
4
|
+
if (this.loaders.has(loader.type)) {
|
|
5
|
+
throw new Error(`Asset loader type already registered: ${loader.type}`);
|
|
6
|
+
}
|
|
7
|
+
this.loaders.set(loader.type, loader);
|
|
8
|
+
}
|
|
9
|
+
unregister(type) {
|
|
10
|
+
return this.loaders.delete(type);
|
|
11
|
+
}
|
|
12
|
+
get(type) {
|
|
13
|
+
const loader = this.loaders.get(type);
|
|
14
|
+
if (!loader) {
|
|
15
|
+
throw new Error(`No asset loader registered for type: ${type}`);
|
|
16
|
+
}
|
|
17
|
+
return loader;
|
|
18
|
+
}
|
|
19
|
+
find(request) {
|
|
20
|
+
if (request.type) {
|
|
21
|
+
return this.get(request.type);
|
|
22
|
+
}
|
|
23
|
+
for (const loader of this.loaders.values()) {
|
|
24
|
+
if (loader.canLoad(request)) {
|
|
25
|
+
return loader;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`No asset loader can load ${request.url}`);
|
|
29
|
+
}
|
|
30
|
+
list() {
|
|
31
|
+
return [...this.loaders.keys()];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=AssetRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetRegistry.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE1D,QAAQ,CAAC,MAAmB;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAyB;QAC5B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CameraFrameViewport, PerspectiveCameraFrameOptions, RendererPostProcessOptions, RendererShadowOptions } from "@aura3d/rendering";
|
|
2
|
+
export type AssetRenderLightingPreset = "studioProduct" | "outdoorDay" | "interiorGallery" | "gameNight";
|
|
3
|
+
export interface AssetRenderDefaults {
|
|
4
|
+
readonly viewport: CameraFrameViewport;
|
|
5
|
+
readonly camera: "auto-frame";
|
|
6
|
+
readonly frame: PerspectiveCameraFrameOptions;
|
|
7
|
+
readonly lighting: AssetRenderLightingPreset;
|
|
8
|
+
readonly shadows: RendererShadowOptions;
|
|
9
|
+
readonly postprocess: RendererPostProcessOptions;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_ASSET_RENDER_VIEWPORT: CameraFrameViewport;
|
|
12
|
+
export declare function createAssetRenderDefaults(lighting?: AssetRenderLightingPreset): AssetRenderDefaults;
|
|
13
|
+
//# sourceMappingURL=AssetRenderDefaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetRenderDefaults.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetRenderDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG/I,MAAM,MAAM,yBAAyB,GAAG,eAAe,GAAG,YAAY,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAEzG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CAClD;AAED,eAAO,MAAM,6BAA6B,EAAE,mBAG3C,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,QAAQ,GAAE,yBAA2C,GAAG,mBAAmB,CAgBpH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createLightingDefault } from "@aura3d/rendering";
|
|
2
|
+
export const DEFAULT_ASSET_RENDER_VIEWPORT = {
|
|
3
|
+
width: 960,
|
|
4
|
+
height: 540
|
|
5
|
+
};
|
|
6
|
+
export function createAssetRenderDefaults(lighting = "studioProduct") {
|
|
7
|
+
const defaults = createLightingDefault(lighting);
|
|
8
|
+
return {
|
|
9
|
+
viewport: DEFAULT_ASSET_RENDER_VIEWPORT,
|
|
10
|
+
camera: "auto-frame",
|
|
11
|
+
frame: {
|
|
12
|
+
paddingRatio: 0.16,
|
|
13
|
+
yawRadians: -0.38,
|
|
14
|
+
pitchRadians: -0.16,
|
|
15
|
+
nearPadding: 0.18,
|
|
16
|
+
farPadding: 2.4
|
|
17
|
+
},
|
|
18
|
+
lighting,
|
|
19
|
+
shadows: defaults.shadow,
|
|
20
|
+
postprocess: defaults.postprocess
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=AssetRenderDefaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetRenderDefaults.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetRenderDefaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAa1D,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IAChE,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,WAAsC,eAAe;IAC7F,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO;QACL,QAAQ,EAAE,6BAA6B;QACvC,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE;YACL,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,CAAC,IAAI;YACjB,YAAY,EAAE,CAAC,IAAI;YACnB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,GAAG;SAChB;QACD,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,MAAM;QACxB,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AssetLoadRequest, AssetLoader } from "./AssetLoader";
|
|
2
|
+
import type { LoadContext } from "./LoadContext";
|
|
3
|
+
export interface AudioDecodeContext {
|
|
4
|
+
decodeAudioData(data: ArrayBuffer): Promise<AudioBuffer> | AudioBuffer;
|
|
5
|
+
}
|
|
6
|
+
export interface AudioAsset {
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly buffer: AudioBuffer;
|
|
9
|
+
}
|
|
10
|
+
export declare class AudioLoader implements AssetLoader<AudioAsset> {
|
|
11
|
+
readonly type = "audio";
|
|
12
|
+
private readonly audioContext;
|
|
13
|
+
constructor(audioContext: AudioDecodeContext);
|
|
14
|
+
canLoad(request: AssetLoadRequest): boolean;
|
|
15
|
+
load(request: AssetLoadRequest, context: LoadContext): Promise<AudioAsset>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=AudioLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioLoader.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AudioLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;CACxE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,qBAAa,WAAY,YAAW,WAAW,CAAC,UAAU,CAAC;IACzD,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAEtC,YAAY,EAAE,kBAAkB;IAI5C,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAIrC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAejF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class AudioLoader {
|
|
2
|
+
type = "audio";
|
|
3
|
+
audioContext;
|
|
4
|
+
constructor(audioContext) {
|
|
5
|
+
this.audioContext = audioContext;
|
|
6
|
+
}
|
|
7
|
+
canLoad(request) {
|
|
8
|
+
return /\.(?:mp3|wav|ogg|m4a|aac)(?:\?.*)?$/i.test(request.url);
|
|
9
|
+
}
|
|
10
|
+
async load(request, context) {
|
|
11
|
+
context.throwIfAborted(request.url);
|
|
12
|
+
if (typeof fetch !== "function") {
|
|
13
|
+
throw new Error("AudioLoader requires fetch");
|
|
14
|
+
}
|
|
15
|
+
const response = await fetch(request.url, { signal: request.signal });
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
throw new Error(`Audio request failed with ${response.status}`);
|
|
18
|
+
}
|
|
19
|
+
const buffer = await this.audioContext.decodeAudioData(await response.arrayBuffer());
|
|
20
|
+
return { url: request.url, buffer };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=AudioLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioLoader.js","sourceRoot":"","sources":["../../../../packages/assets/src/AudioLoader.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,OAAO,CAAC;IAEP,YAAY,CAAqB;IAElD,YAAY,YAAgC;QAC1C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAyB;QAC/B,OAAO,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAyB,EAAE,OAAoB;QACxD,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACrF,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type BlenderExportValidationStatus = "pass" | "warn" | "fail";
|
|
2
|
+
export interface BlenderExportFixtureManifest {
|
|
3
|
+
readonly schemaVersion: "blender-export-fixtures";
|
|
4
|
+
readonly sourceName: string;
|
|
5
|
+
readonly sourceRepository: string;
|
|
6
|
+
readonly sourceRevision: string;
|
|
7
|
+
readonly sourceReadme: string;
|
|
8
|
+
readonly sourceEvidence: string;
|
|
9
|
+
readonly fixtures: readonly BlenderExportFixture[];
|
|
10
|
+
}
|
|
11
|
+
export interface BlenderExportFixture {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly path: string;
|
|
15
|
+
readonly upstreamPath: string;
|
|
16
|
+
readonly sourceSha256: string;
|
|
17
|
+
readonly license: string;
|
|
18
|
+
readonly expectedGeneratorPattern: string;
|
|
19
|
+
readonly tags: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
export interface BlenderExportFixtureInput extends BlenderExportFixture {
|
|
22
|
+
readonly sourceText: string;
|
|
23
|
+
}
|
|
24
|
+
export interface BlenderExportValidationReport {
|
|
25
|
+
readonly schemaVersion: "blender-export-validation";
|
|
26
|
+
readonly generatedAt: string;
|
|
27
|
+
readonly sourceManifest: Omit<BlenderExportFixtureManifest, "fixtures"> & {
|
|
28
|
+
readonly fixtureCount: number;
|
|
29
|
+
};
|
|
30
|
+
readonly summary: Record<BlenderExportValidationStatus, number> & {
|
|
31
|
+
readonly fixtureCount: number;
|
|
32
|
+
};
|
|
33
|
+
readonly fixtures: readonly BlenderExportValidationFixtureResult[];
|
|
34
|
+
}
|
|
35
|
+
export interface BlenderExportValidationFixtureResult {
|
|
36
|
+
readonly id: string;
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly path: string;
|
|
39
|
+
readonly upstreamPath: string;
|
|
40
|
+
readonly sourceSha256: string;
|
|
41
|
+
readonly license: string;
|
|
42
|
+
readonly tags: readonly string[];
|
|
43
|
+
readonly generator: string;
|
|
44
|
+
readonly status: BlenderExportValidationStatus;
|
|
45
|
+
readonly metrics: {
|
|
46
|
+
readonly scenes: number;
|
|
47
|
+
readonly meshes: number;
|
|
48
|
+
readonly materials: number;
|
|
49
|
+
readonly textures: number;
|
|
50
|
+
readonly images: number;
|
|
51
|
+
readonly animations: number;
|
|
52
|
+
readonly renderables: number;
|
|
53
|
+
};
|
|
54
|
+
readonly diagnostics: readonly BlenderExportValidationDiagnostic[];
|
|
55
|
+
}
|
|
56
|
+
export interface BlenderExportValidationDiagnostic {
|
|
57
|
+
readonly code: string;
|
|
58
|
+
readonly severity: "info" | "warning" | "error";
|
|
59
|
+
readonly message: string;
|
|
60
|
+
readonly nextAction: string;
|
|
61
|
+
}
|
|
62
|
+
export declare function createBlenderExportValidationReport(manifest: BlenderExportFixtureManifest, fixtureInputs: readonly BlenderExportFixtureInput[], generatedAt?: string): Promise<BlenderExportValidationReport>;
|
|
63
|
+
export declare function assertValidBlenderExportFixtureManifest(manifest: BlenderExportFixtureManifest): BlenderExportFixtureManifest;
|
|
64
|
+
//# sourceMappingURL=BlenderExportValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlenderExportValidation.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/BlenderExportValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { GLTFLoader } from "./GLTFLoader.js";
|
|
2
|
+
import { LoadContext } from "./LoadContext.js";
|
|
3
|
+
export async function createBlenderExportValidationReport(manifest, fixtureInputs, generatedAt = new Date().toISOString()) {
|
|
4
|
+
assertValidBlenderExportFixtureManifest(manifest);
|
|
5
|
+
const inputById = new Map(fixtureInputs.map((fixture) => [fixture.id, fixture]));
|
|
6
|
+
const fixtures = await Promise.all(manifest.fixtures.map(async (fixture) => validateFixture(fixture, inputById.get(fixture.id))));
|
|
7
|
+
return {
|
|
8
|
+
schemaVersion: "blender-export-validation",
|
|
9
|
+
generatedAt,
|
|
10
|
+
sourceManifest: {
|
|
11
|
+
schemaVersion: manifest.schemaVersion,
|
|
12
|
+
sourceName: manifest.sourceName,
|
|
13
|
+
sourceRepository: manifest.sourceRepository,
|
|
14
|
+
sourceRevision: manifest.sourceRevision,
|
|
15
|
+
sourceReadme: manifest.sourceReadme,
|
|
16
|
+
sourceEvidence: manifest.sourceEvidence,
|
|
17
|
+
fixtureCount: manifest.fixtures.length
|
|
18
|
+
},
|
|
19
|
+
summary: {
|
|
20
|
+
fixtureCount: fixtures.length,
|
|
21
|
+
pass: fixtures.filter((fixture) => fixture.status === "pass").length,
|
|
22
|
+
warn: fixtures.filter((fixture) => fixture.status === "warn").length,
|
|
23
|
+
fail: fixtures.filter((fixture) => fixture.status === "fail").length
|
|
24
|
+
},
|
|
25
|
+
fixtures
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function assertValidBlenderExportFixtureManifest(manifest) {
|
|
29
|
+
if (manifest.schemaVersion !== "blender-export-fixtures") {
|
|
30
|
+
throw new Error("Blender export fixture manifest schemaVersion must be blender-export-fixtures");
|
|
31
|
+
}
|
|
32
|
+
if (!manifest.sourceRepository || !/^https:\/\/github\.com\/KhronosGroup\/Vulkan-Samples-Assets/.test(manifest.sourceRepository)) {
|
|
33
|
+
throw new Error("Blender export fixture manifest must reference KhronosGroup/Vulkan-Samples-Assets");
|
|
34
|
+
}
|
|
35
|
+
if (!/^[0-9a-f]{40}$/i.test(manifest.sourceRevision)) {
|
|
36
|
+
throw new Error("Blender export fixture manifest sourceRevision must be a git SHA");
|
|
37
|
+
}
|
|
38
|
+
if (manifest.fixtures.length < 2) {
|
|
39
|
+
throw new Error("Blender export validation requires multiple fixtures");
|
|
40
|
+
}
|
|
41
|
+
const ids = new Set();
|
|
42
|
+
for (const fixture of manifest.fixtures) {
|
|
43
|
+
if (ids.has(fixture.id)) {
|
|
44
|
+
throw new Error(`Blender export fixture id is duplicated: ${fixture.id}`);
|
|
45
|
+
}
|
|
46
|
+
ids.add(fixture.id);
|
|
47
|
+
if (!fixture.path.endsWith(".gltf") && !fixture.path.endsWith(".glb")) {
|
|
48
|
+
throw new Error(`Blender export fixture ${fixture.id} must be a glTF or GLB file`);
|
|
49
|
+
}
|
|
50
|
+
if (!/^[0-9a-f]{64}$/i.test(fixture.sourceSha256)) {
|
|
51
|
+
throw new Error(`Blender export fixture ${fixture.id} sourceSha256 must be a SHA-256 digest`);
|
|
52
|
+
}
|
|
53
|
+
if (!fixture.expectedGeneratorPattern) {
|
|
54
|
+
throw new Error(`Blender export fixture ${fixture.id} must define expectedGeneratorPattern`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return manifest;
|
|
58
|
+
}
|
|
59
|
+
async function validateFixture(fixture, input) {
|
|
60
|
+
if (!input) {
|
|
61
|
+
return failureFixture(fixture, "ASSET_BLENDER_EXPORT_SOURCE_MISSING", "Fixture source text was not provided to the validation runner.");
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const json = JSON.parse(input.sourceText);
|
|
65
|
+
const generator = json.asset?.generator ?? "";
|
|
66
|
+
const diagnostics = [];
|
|
67
|
+
if (!new RegExp(fixture.expectedGeneratorPattern, "i").test(generator)) {
|
|
68
|
+
diagnostics.push({
|
|
69
|
+
code: "ASSET_BLENDER_EXPORT_GENERATOR_MISMATCH",
|
|
70
|
+
severity: "error",
|
|
71
|
+
message: `Expected generator matching ${fixture.expectedGeneratorPattern}, got ${generator || "missing"}.`,
|
|
72
|
+
nextAction: "Replace the fixture with a confirmed Blender-exported glTF file or update the manifest evidence."
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const asset = await new GLTFLoader().load({ url: dataGLTF(input.sourceText) }, new LoadContext());
|
|
76
|
+
return resultForAsset(fixture, asset, generator, diagnostics);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
return failureFixture(fixture, "ASSET_BLENDER_EXPORT_LOAD_FAILED", error instanceof Error ? error.message : String(error));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function resultForAsset(fixture, asset, generator, diagnostics) {
|
|
83
|
+
const renderables = asset.createScene().collectRenderables().length;
|
|
84
|
+
const status = diagnostics.some((diagnostic) => diagnostic.severity === "error") ? "fail" : diagnostics.length > 0 ? "warn" : "pass";
|
|
85
|
+
return {
|
|
86
|
+
id: fixture.id,
|
|
87
|
+
name: fixture.name,
|
|
88
|
+
path: fixture.path,
|
|
89
|
+
upstreamPath: fixture.upstreamPath,
|
|
90
|
+
sourceSha256: fixture.sourceSha256,
|
|
91
|
+
license: fixture.license,
|
|
92
|
+
tags: fixture.tags,
|
|
93
|
+
generator,
|
|
94
|
+
status,
|
|
95
|
+
metrics: {
|
|
96
|
+
scenes: asset.scenes.length,
|
|
97
|
+
meshes: asset.meshes.length,
|
|
98
|
+
materials: asset.materials.length,
|
|
99
|
+
textures: asset.textures.length,
|
|
100
|
+
images: asset.images.length,
|
|
101
|
+
animations: asset.animations.length,
|
|
102
|
+
renderables
|
|
103
|
+
},
|
|
104
|
+
diagnostics: diagnostics.length > 0 ? diagnostics : [{
|
|
105
|
+
code: "ASSET_BLENDER_EXPORT_VALIDATED",
|
|
106
|
+
severity: "info",
|
|
107
|
+
message: "Fixture was confirmed as Blender-exported glTF and loaded through Aura3D's glTF loader.",
|
|
108
|
+
nextAction: "Keep this fixture current when changing loader validation, importer settings, or fixture source revision."
|
|
109
|
+
}]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function failureFixture(fixture, code, message) {
|
|
113
|
+
return {
|
|
114
|
+
id: fixture.id,
|
|
115
|
+
name: fixture.name,
|
|
116
|
+
path: fixture.path,
|
|
117
|
+
upstreamPath: fixture.upstreamPath,
|
|
118
|
+
sourceSha256: fixture.sourceSha256,
|
|
119
|
+
license: fixture.license,
|
|
120
|
+
tags: fixture.tags,
|
|
121
|
+
generator: "",
|
|
122
|
+
status: "fail",
|
|
123
|
+
metrics: {
|
|
124
|
+
scenes: 0,
|
|
125
|
+
meshes: 0,
|
|
126
|
+
materials: 0,
|
|
127
|
+
textures: 0,
|
|
128
|
+
images: 0,
|
|
129
|
+
animations: 0,
|
|
130
|
+
renderables: 0
|
|
131
|
+
},
|
|
132
|
+
diagnostics: [{
|
|
133
|
+
code,
|
|
134
|
+
severity: "error",
|
|
135
|
+
message,
|
|
136
|
+
nextAction: "Fix or replace this Blender-export fixture before marking Blender-export validation complete."
|
|
137
|
+
}]
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function dataGLTF(source) {
|
|
141
|
+
return `data:model/gltf+json,${encodeURIComponent(source)}`;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=BlenderExportValidation.js.map
|