@aura3d/assets 3.0.0 → 4.0.0

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.
Files changed (162) hide show
  1. package/dist/AdvancedAssetCorpus.d.ts.map +1 -1
  2. package/dist/AdvancedAssetCorpus.js +7 -12
  3. package/dist/AdvancedAssetCorpus.js.map +1 -1
  4. package/dist/AssetDecoderRegistry.d.ts +56 -0
  5. package/dist/AssetDecoderRegistry.d.ts.map +1 -0
  6. package/dist/AssetDecoderRegistry.js +225 -0
  7. package/dist/AssetDecoderRegistry.js.map +1 -0
  8. package/dist/GLTFAnimationRuntime.d.ts +300 -6
  9. package/dist/GLTFAnimationRuntime.d.ts.map +1 -1
  10. package/dist/GLTFAnimationRuntime.js +981 -60
  11. package/dist/GLTFAnimationRuntime.js.map +1 -1
  12. package/dist/GLTFAssetParseCache.d.ts +24 -0
  13. package/dist/GLTFAssetParseCache.d.ts.map +1 -0
  14. package/dist/GLTFAssetParseCache.js +100 -0
  15. package/dist/GLTFAssetParseCache.js.map +1 -0
  16. package/dist/GLTFCompressionDecoders.d.ts +1 -0
  17. package/dist/GLTFCompressionDecoders.d.ts.map +1 -1
  18. package/dist/GLTFCompressionDecoders.js +20 -5
  19. package/dist/GLTFCompressionDecoders.js.map +1 -1
  20. package/dist/GLTFExtensionSupport.js +3 -3
  21. package/dist/GLTFExtensionSupport.js.map +1 -1
  22. package/dist/GLTFLoader.d.ts +28 -1
  23. package/dist/GLTFLoader.d.ts.map +1 -1
  24. package/dist/GLTFLoader.js +197 -30
  25. package/dist/GLTFLoader.js.map +1 -1
  26. package/dist/GLTFRenderResources.d.ts +77 -2
  27. package/dist/GLTFRenderResources.d.ts.map +1 -1
  28. package/dist/GLTFRenderResources.js +310 -153
  29. package/dist/GLTFRenderResources.js.map +1 -1
  30. package/dist/KTX2BasisTextureTranscoder.d.ts +70 -12
  31. package/dist/KTX2BasisTextureTranscoder.d.ts.map +1 -1
  32. package/dist/KTX2BasisTextureTranscoder.js +225 -184
  33. package/dist/KTX2BasisTextureTranscoder.js.map +1 -1
  34. package/dist/KTX2TargetSelection.d.ts +25 -0
  35. package/dist/KTX2TargetSelection.d.ts.map +1 -0
  36. package/dist/KTX2TargetSelection.js +36 -0
  37. package/dist/KTX2TargetSelection.js.map +1 -0
  38. package/dist/KTX2TranscodeDriver.d.ts +70 -0
  39. package/dist/KTX2TranscodeDriver.d.ts.map +1 -0
  40. package/dist/KTX2TranscodeDriver.js +104 -0
  41. package/dist/KTX2TranscodeDriver.js.map +1 -0
  42. package/dist/KTX2TranscodeWorker.d.ts +30 -0
  43. package/dist/KTX2TranscodeWorker.d.ts.map +1 -0
  44. package/dist/KTX2TranscodeWorker.js +230 -0
  45. package/dist/KTX2TranscodeWorker.js.map +1 -0
  46. package/dist/MikkTSpaceTangents.d.ts +43 -0
  47. package/dist/MikkTSpaceTangents.d.ts.map +1 -0
  48. package/dist/MikkTSpaceTangents.js +149 -0
  49. package/dist/MikkTSpaceTangents.js.map +1 -0
  50. package/dist/asset-corpus/ProductionAssetCorpus.d.ts.map +1 -1
  51. package/dist/asset-corpus/ProductionAssetCorpus.js +7 -13
  52. package/dist/asset-corpus/ProductionAssetCorpus.js.map +1 -1
  53. package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts +43 -0
  54. package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -1
  55. package/dist/asset-corpus/ProductionGLTFRenderPipeline.js +146 -22
  56. package/dist/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -1
  57. package/dist/assetPhaseMarks.d.ts +14 -0
  58. package/dist/assetPhaseMarks.d.ts.map +1 -0
  59. package/dist/assetPhaseMarks.js +23 -0
  60. package/dist/assetPhaseMarks.js.map +1 -0
  61. package/dist/browser-index.d.ts +5 -1
  62. package/dist/browser-index.d.ts.map +1 -1
  63. package/dist/browser-index.js +3 -1
  64. package/dist/browser-index.js.map +1 -1
  65. package/dist/contracts/decoders.d.ts +15 -0
  66. package/dist/contracts/decoders.d.ts.map +1 -0
  67. package/dist/contracts/decoders.js +8 -0
  68. package/dist/contracts/decoders.js.map +1 -0
  69. package/dist/decoderLoad.d.ts +28 -0
  70. package/dist/decoderLoad.d.ts.map +1 -0
  71. package/dist/decoderLoad.js +49 -0
  72. package/dist/decoderLoad.js.map +1 -0
  73. package/dist/gltf/ImageDecode.d.ts +18 -0
  74. package/dist/gltf/ImageDecode.d.ts.map +1 -0
  75. package/dist/gltf/ImageDecode.js +140 -0
  76. package/dist/gltf/ImageDecode.js.map +1 -0
  77. package/dist/gltf-runtime.d.ts +1 -1
  78. package/dist/gltf-runtime.d.ts.map +1 -1
  79. package/dist/gltf-runtime.js.map +1 -1
  80. package/dist/index.d.ts +5 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +3 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/lanes/index.d.ts +17 -0
  85. package/dist/lanes/index.d.ts.map +1 -0
  86. package/dist/lanes/index.js +17 -0
  87. package/dist/lanes/index.js.map +1 -0
  88. package/dist/lanes/prd01.d.ts +6 -0
  89. package/dist/lanes/prd01.d.ts.map +1 -0
  90. package/dist/lanes/prd01.js +6 -0
  91. package/dist/lanes/prd01.js.map +1 -0
  92. package/dist/lanes/prd02.d.ts +6 -0
  93. package/dist/lanes/prd02.d.ts.map +1 -0
  94. package/dist/lanes/prd02.js +6 -0
  95. package/dist/lanes/prd02.js.map +1 -0
  96. package/dist/lanes/prd03.d.ts +6 -0
  97. package/dist/lanes/prd03.d.ts.map +1 -0
  98. package/dist/lanes/prd03.js +6 -0
  99. package/dist/lanes/prd03.js.map +1 -0
  100. package/dist/lanes/prd04.d.ts +6 -0
  101. package/dist/lanes/prd04.d.ts.map +1 -0
  102. package/dist/lanes/prd04.js +6 -0
  103. package/dist/lanes/prd04.js.map +1 -0
  104. package/dist/lanes/prd05.d.ts +14 -0
  105. package/dist/lanes/prd05.d.ts.map +1 -0
  106. package/dist/lanes/prd05.js +14 -0
  107. package/dist/lanes/prd05.js.map +1 -0
  108. package/dist/lanes/prd06.d.ts +6 -0
  109. package/dist/lanes/prd06.d.ts.map +1 -0
  110. package/dist/lanes/prd06.js +6 -0
  111. package/dist/lanes/prd06.js.map +1 -0
  112. package/dist/lanes/prd07.d.ts +6 -0
  113. package/dist/lanes/prd07.d.ts.map +1 -0
  114. package/dist/lanes/prd07.js +6 -0
  115. package/dist/lanes/prd07.js.map +1 -0
  116. package/dist/lanes/prd08.d.ts +6 -0
  117. package/dist/lanes/prd08.d.ts.map +1 -0
  118. package/dist/lanes/prd08.js +6 -0
  119. package/dist/lanes/prd08.js.map +1 -0
  120. package/dist/lanes/prd09.d.ts +6 -0
  121. package/dist/lanes/prd09.d.ts.map +1 -0
  122. package/dist/lanes/prd09.js +6 -0
  123. package/dist/lanes/prd09.js.map +1 -0
  124. package/dist/lanes/prd10.d.ts +6 -0
  125. package/dist/lanes/prd10.d.ts.map +1 -0
  126. package/dist/lanes/prd10.js +6 -0
  127. package/dist/lanes/prd10.js.map +1 -0
  128. package/dist/lanes/prd11.d.ts +6 -0
  129. package/dist/lanes/prd11.d.ts.map +1 -0
  130. package/dist/lanes/prd11.js +6 -0
  131. package/dist/lanes/prd11.js.map +1 -0
  132. package/dist/lanes/prd12.d.ts +6 -0
  133. package/dist/lanes/prd12.d.ts.map +1 -0
  134. package/dist/lanes/prd12.js +6 -0
  135. package/dist/lanes/prd12.js.map +1 -0
  136. package/dist/lanes/prd13.d.ts +6 -0
  137. package/dist/lanes/prd13.d.ts.map +1 -0
  138. package/dist/lanes/prd13.js +6 -0
  139. package/dist/lanes/prd13.js.map +1 -0
  140. package/dist/lanes/prd14.d.ts +6 -0
  141. package/dist/lanes/prd14.d.ts.map +1 -0
  142. package/dist/lanes/prd14.js +6 -0
  143. package/dist/lanes/prd14.js.map +1 -0
  144. package/dist/lanes/prd15.d.ts +6 -0
  145. package/dist/lanes/prd15.d.ts.map +1 -0
  146. package/dist/lanes/prd15.js +6 -0
  147. package/dist/lanes/prd15.js.map +1 -0
  148. package/dist/vite/auraDecoders.d.ts +31 -0
  149. package/dist/vite/auraDecoders.d.ts.map +1 -0
  150. package/dist/vite/auraDecoders.js +89 -0
  151. package/dist/vite/auraDecoders.js.map +1 -0
  152. package/package.json +13 -5
  153. package/vendor/basis/README.md +25 -0
  154. package/vendor/basis/basis_transcoder.js +19 -0
  155. package/vendor/basis/basis_transcoder.wasm +0 -0
  156. package/vendor/draco/README.md +23 -0
  157. package/vendor/draco/draco_decoder.js +33 -0
  158. package/vendor/draco/draco_decoder.wasm +0 -0
  159. package/vendor/meshopt/README.md +21 -0
  160. package/vendor/meshopt/meshopt_decoder.cjs +199 -0
  161. package/vendor/meshopt/meshopt_decoder.mjs +196 -0
  162. package/vendor/meshopt_decoder.mjs +196 -0
@@ -1,212 +1,202 @@
1
- const DEFAULT_BROWSER_CDN = "https://unpkg.com/@loaders.gl";
2
- let nodeFileHooksReady = false;
3
- export async function transcodeKTX2BasisTexture(bytes, options = {}) {
4
- const source = toArrayBuffer(bytes);
5
- const targetFormat = options.targetFormat ?? "etc2-rgba8unorm";
6
- const compressedLevels = await parseTextureLevels(source, targetFormat, options.loaderOptions);
7
- const baseLevel = compressedLevels[0];
8
- if (!baseLevel) {
9
- throw new Error("KTX2/Basis transcode produced no texture levels");
10
- }
11
- if (targetFormat === "rgba8") {
12
- return {
13
- width: baseLevel.width,
14
- height: baseLevel.height,
15
- colorSpace: "linear",
16
- format: "rgba8",
17
- data: baseLevel.data
18
- };
19
- }
20
- const fallbackLevels = options.includeFallback === false
21
- ? []
22
- : validRGBA8Levels(await parseTextureLevels(source, "rgba8", options.loaderOptions));
23
- const format = mapTargetFormat(targetFormat);
24
- return {
25
- width: baseLevel.width,
26
- height: baseLevel.height,
27
- colorSpace: "linear",
28
- format,
29
- mipLevels: compressedLevels,
30
- fallbackMipLevels: fallbackLevels
31
- };
1
+ import { selectKTX2TargetFormat } from "./KTX2TargetSelection.js";
2
+ import { withDecoderTimeout } from "./decoderLoad.js";
3
+ import { basisTranscoderFormat, transcodeKTX2Levels } from "./KTX2TranscodeDriver.js";
4
+ import { createKTX2TranscodeWorkerPool } from "./KTX2TranscodeWorker.js";
5
+ /**
6
+ * Maps the transcode target to the render-side `TextureFormat` union
7
+ * (C-16). "bc1-rgb-unorm" shares DXT1's block layout with "bc1-rgba-unorm"
8
+ * — the renderer's opaque flag carries the distinction, so they alias here.
9
+ */
10
+ export function ktx2TargetToTextureFormat(format) {
11
+ return format === "bc1-rgb-unorm" ? "bc1-rgba-unorm" : format;
32
12
  }
33
- function validRGBA8Levels(levels) {
34
- const validLevels = [];
35
- for (const level of levels) {
36
- if (level.data.byteLength !== level.width * level.height * 4)
37
- break;
38
- validLevels.push(level);
13
+ const DEFAULT_TRANSCODER_URL = "/aura-decoders/basis/";
14
+ const workerPools = new Map();
15
+ function workerPool(transcoderUrl, workerCount) {
16
+ const key = `${transcoderUrl}#${workerCount}`;
17
+ let pool = workerPools.get(key);
18
+ if (!pool) {
19
+ pool = createKTX2TranscodeWorkerPool(transcoderUrl, workerCount);
20
+ workerPools.set(key, pool);
39
21
  }
40
- return validLevels;
22
+ return pool;
41
23
  }
42
- async function parseTextureLevels(source, targetFormat, loaderOptions) {
43
- await installNodeLoadersGLFileHooks();
44
- const { parse, BasisLoader } = await loadLoadersGLModules();
45
- const parsed = await parse(source.slice(0), BasisLoader, {
46
- // worker:false is required: worker mode resolves transcoder module URLs to dev-only /node_modules paths and the Node file hooks on globalThis.loaders only exist on the main thread.
47
- worker: false,
48
- CDN: defaultLoadersGLCdn(),
49
- modules: defaultLoadersGLModules(),
50
- ...loaderOptions,
51
- ...(loaderOptions?.modules && typeof loaderOptions.modules === "object"
52
- ? { modules: { ...defaultLoadersGLModules(), ...loaderOptions.modules } }
53
- : {}),
54
- basis: {
55
- ...basisOptions(loaderOptions),
56
- containerFormat: "ktx2",
57
- module: "encoder",
58
- format: loadersGLBasisFormat(targetFormat)
59
- }
60
- });
61
- const levels = parsed[0];
62
- if (!levels || levels.length === 0) {
63
- throw new Error("KTX2/Basis transcode returned no texture levels");
24
+ const basisModuleCache = new Map();
25
+ /**
26
+ * Loads + initialises the vendored Basis transcoder module, once per
27
+ * `transcoderUrl`. Browser path injects a `<script>` (UMD global `BASIS`);
28
+ * Node/test path evaluates the vendored UMD as CJS so no `document` needed.
29
+ */
30
+ export function loadBasisTranscoderModule(transcoderUrl = DEFAULT_TRANSCODER_URL) {
31
+ const base = transcoderUrl.endsWith("/") ? transcoderUrl : `${transcoderUrl}/`;
32
+ let entry = basisModuleCache.get(base);
33
+ if (!entry) {
34
+ entry = { promise: (typeof document !== "undefined" ? loadBasisModuleBrowser(base) : loadBasisModuleNode()) };
35
+ entry.promise.catch(() => basisModuleCache.delete(base));
36
+ basisModuleCache.set(base, entry);
64
37
  }
65
- return levels.map((level) => ({
66
- width: level.width,
67
- height: level.height,
68
- data: new Uint8Array(level.data)
69
- }));
38
+ return entry.promise;
70
39
  }
71
- function defaultLoadersGLCdn() {
72
- if (typeof window !== "undefined" && window.location?.origin) {
73
- return `${window.location.origin}/node_modules/@loaders.gl`;
40
+ async function loadBasisModuleBrowser(base) {
41
+ const globalName = "BASIS";
42
+ const globals = globalThis;
43
+ if (typeof globals.BASIS !== "function") {
44
+ await withDecoderTimeout(new Promise((resolve, reject) => {
45
+ const script = document.createElement("script");
46
+ script.src = `${base}basis_transcoder.js`;
47
+ script.async = true;
48
+ script.onload = () => resolve();
49
+ script.onerror = () => reject(new Error(`Failed to load ${script.src}`));
50
+ document.head.appendChild(script);
51
+ }), `script load ${base}basis_transcoder.js`);
74
52
  }
75
- return DEFAULT_BROWSER_CDN;
53
+ const BASIS = globals.BASIS;
54
+ if (typeof BASIS !== "function") {
55
+ throw new Error("basis_transcoder.js loaded but the BASIS global is missing");
56
+ }
57
+ // Emscripten MODULARIZE: the object passed to BASIS() becomes the Module;
58
+ // onRuntimeInitialized fires asynchronously once the wasm is compiled. A
59
+ // missing/SPA-fallback wasm aborts through onAbort — without it (and the
60
+ // timeout) this promise never settled and require() hung.
61
+ const moduleConfig = { locateFile: (file) => `${base}${file}` };
62
+ const module = await withDecoderTimeout(new Promise((resolve, reject) => {
63
+ try {
64
+ moduleConfig.onRuntimeInitialized = () => resolve(moduleConfig);
65
+ moduleConfig.onAbort = (reason) => reject(new Error(`basis_transcoder aborted: ${String(reason)}`));
66
+ BASIS(moduleConfig);
67
+ }
68
+ catch (error) {
69
+ reject(error instanceof Error ? error : new Error(String(error)));
70
+ }
71
+ }), "basis_transcoder init");
72
+ module.initializeBasis();
73
+ return module;
76
74
  }
77
- function defaultLoadersGLModules() {
78
- if (typeof window === "undefined" || !window.location?.origin)
79
- return undefined;
80
- const baseUrl = `${window.location.origin}/node_modules/@loaders.gl/textures/dist/libs`;
75
+ // Computed specifiers: these loads are runtime-optional (Node fallback path)
76
+ // and must stay unresolvable to consumer bundlers at build time — the engine
77
+ // pack does not declare node builtins or `meshoptimizer` as dependencies.
78
+ async function nodeBuiltins() {
79
+ const spec = (name) => `node:${name}`;
80
+ const [fs, mod, url, path] = await Promise.all([import(spec("fs")), import(spec("module")), import(spec("url")), import(spec("path"))]);
81
81
  return {
82
- "basis_encoder.js": `${baseUrl}/basis_encoder.js`,
83
- "basis_encoder.wasm": `${baseUrl}/basis_encoder.wasm`,
84
- "basis_transcoder.js": `${baseUrl}/basis_transcoder.js`,
85
- "basis_transcoder.wasm": `${baseUrl}/basis_transcoder.wasm`
82
+ fs: fs,
83
+ module: mod,
84
+ url: url,
85
+ path: path
86
86
  };
87
87
  }
88
- async function loadLoadersGLModules() {
89
- try {
90
- const [core, textures] = await Promise.all([
91
- import("@loaders.gl/core"),
92
- import("@loaders.gl/textures")
93
- ]);
94
- return { parse: core.parse, BasisLoader: textures.BasisLoader };
95
- }
96
- catch (error) {
97
- throw new Error(`KTX2/Basis transcoder dependency resolution failed: ${error instanceof Error ? error.message : String(error)}`);
98
- }
99
- }
100
- function basisOptions(loaderOptions) {
101
- const basis = loaderOptions?.basis;
102
- return basis && typeof basis === "object" ? basis : {};
88
+ async function loadBasisModuleNode() {
89
+ const { fs, module: nodeModule, url: nodeUrl, path: nodePath } = await nodeBuiltins();
90
+ const { readFileSync, existsSync } = fs;
91
+ const { createRequire } = nodeModule;
92
+ const { fileURLToPath } = nodeUrl;
93
+ const { dirname } = nodePath;
94
+ const require2 = createRequire(import.meta.url);
95
+ const candidates = [
96
+ new URL("../vendor/basis/basis_transcoder.js", import.meta.url),
97
+ new URL("../../vendor/basis/basis_transcoder.js", import.meta.url)
98
+ ];
99
+ const jsUrl = candidates.find((candidate) => existsSync(candidate));
100
+ if (!jsUrl)
101
+ throw new Error("vendored basis_transcoder.js not found next to @aura3d/assets");
102
+ const wasmUrl = new URL("basis_transcoder.wasm", jsUrl);
103
+ const jsPath = fileURLToPath(jsUrl);
104
+ const code = readFileSync(jsUrl, "utf8");
105
+ const box = { exports: {} };
106
+ new Function("module", "exports", "require", "__dirname", "__filename", code)(box, box.exports, require2, dirname(jsPath), jsPath);
107
+ const BASIS = box.exports.BASIS ?? box.exports.default ?? box.exports;
108
+ if (typeof BASIS !== "function")
109
+ throw new Error("vendored basis_transcoder.js did not export BASIS");
110
+ const module = await withDecoderTimeout(new Promise((resolve, reject) => {
111
+ let mod;
112
+ const produced = BASIS({
113
+ wasmBinary: existsSync(wasmUrl) ? readFileSync(wasmUrl) : undefined,
114
+ onRuntimeInitialized: () => resolve(mod),
115
+ onAbort: (reason) => reject(new Error(`basis_transcoder aborted: ${String(reason)}`))
116
+ });
117
+ mod = (produced && typeof produced === "object" ? produced : box.exports);
118
+ }), "basis_transcoder init");
119
+ module.initializeBasis();
120
+ return module;
103
121
  }
104
- function loadersGLBasisFormat(format) {
105
- switch (format) {
106
- case "etc2-rgba8unorm":
107
- return "etc2";
108
- case "bc3-rgba-unorm":
109
- return "bc3";
110
- case "astc-4x4-rgba-unorm":
111
- return "astc-4x4";
112
- case "rgba8":
113
- return "rgba32";
114
- }
115
- }
116
- function mapTargetFormat(format) {
117
- switch (format) {
118
- case "etc2-rgba8unorm":
119
- case "bc3-rgba-unorm":
120
- case "astc-4x4-rgba-unorm":
121
- return format;
122
- case "rgba8":
123
- throw new Error("rgba8 is not a compressed texture target");
124
- }
125
- }
126
- function toArrayBuffer(bytes) {
127
- if (bytes instanceof ArrayBuffer)
128
- return bytes.slice(0);
129
- const copy = new Uint8Array(bytes.byteLength);
130
- copy.set(new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength));
131
- return copy.buffer;
132
- }
133
- async function installNodeLoadersGLFileHooks() {
134
- if (nodeFileHooksReady || typeof process === "undefined" || !process.versions?.node)
135
- return;
136
- const existing = globalThis.loaders ?? {};
137
- if (existing.requireFromFile && existing.readFileAsArrayBuffer) {
138
- nodeFileHooksReady = true;
139
- return;
140
- }
141
- const [{ readFile }, { dirname, join }, { createRequire }, vm] = await Promise.all([
142
- importNodeModule("node:fs/promises"),
143
- importNodeModule("node:path"),
144
- importNodeModule("node:module"),
145
- importNodeModule("node:vm")
146
- ]);
147
- const require = createRequire(import.meta.url);
148
- const texturesRoot = dirname(dirname(require.resolve("@loaders.gl/textures")));
149
- const moduleCache = new Map();
150
- const resolveLibraryPath = (libraryPath) => {
151
- if (libraryPath.startsWith("modules/textures/")) {
152
- return join(texturesRoot, libraryPath.slice("modules/textures/".length));
122
+ /**
123
+ * Transcodes a KTX2/Basis texture to `options.targetFormat` using the vendored
124
+ * Basis transcoder. In browsers with `Worker` the transcode runs in the
125
+ * blob-worker pool; elsewhere it runs on the calling thread via the vendored
126
+ * module — either way the bytes come from `transcoderUrl`/`vendor/basis`, never
127
+ * a CDN. `maxDimension` skips too-large mip levels during transcode.
128
+ */
129
+ export async function transcodeKTX2BasisTexture(bytes, options) {
130
+ // Required by contract; legacy callers that omit it get the honest CPU
131
+ // fallback rather than the old silent ETC2 default.
132
+ const targetFormat = options.targetFormat ?? "rgba8";
133
+ const colorSpace = options.colorSpace ?? "linear";
134
+ const transcoderUrl = options.transcoderUrl ?? DEFAULT_TRANSCODER_URL;
135
+ const transcoderFormat = basisTranscoderFormat(targetFormat);
136
+ const workerPath = typeof Worker !== "undefined";
137
+ const run = async (format) => {
138
+ if (workerPath) {
139
+ return workerPool(transcoderUrl, options.workerCount ?? 2).transcode({
140
+ bytes,
141
+ transcoderFormat: format,
142
+ maxDimension: options.maxDimension
143
+ });
153
144
  }
154
- return libraryPath;
145
+ const module = await loadBasisTranscoderModule(transcoderUrl);
146
+ return transcodeKTX2Levels(module, bytes, format, options.maxDimension);
155
147
  };
156
- globalThis.loaders = {
157
- ...existing,
158
- async requireFromFile(libraryPath) {
159
- const resolved = resolveLibraryPath(libraryPath);
160
- if (moduleCache.has(resolved))
161
- return moduleCache.get(resolved);
162
- const code = await readFile(resolved, "utf8");
163
- const module = { exports: {} };
164
- const wrapper = vm.runInNewContext(`(function(exports,module,require,__dirname,__filename){${code}\n})`, { Buffer, WebAssembly, clearTimeout, console, process, setTimeout, TextDecoder, TextEncoder });
165
- wrapper(module.exports, module, require, dirname(resolved), resolved);
166
- moduleCache.set(resolved, module.exports);
167
- return module.exports;
168
- },
169
- async readFileAsArrayBuffer(libraryPath) {
170
- const buffer = await readFile(resolveLibraryPath(libraryPath));
171
- return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
172
- }
148
+ const result = await run(transcoderFormat);
149
+ let fallback;
150
+ if (targetFormat !== "rgba8" && options.includeFallback !== false) {
151
+ fallback = await run(BASIS_TRANSCODER_FORMAT_FALLBACK);
152
+ }
153
+ return {
154
+ width: result.width,
155
+ height: result.height,
156
+ format: targetFormat,
157
+ colorSpace,
158
+ data: result.levels[0]?.data,
159
+ mipLevels: result.levels.map((level) => ({ width: level.width, height: level.height, data: level.data })),
160
+ fallbackData: fallback?.levels[0]?.data,
161
+ fallbackMipLevels: fallback ? fallback.levels.map((level) => ({ width: level.width, height: level.height, data: level.data })) : undefined,
162
+ isUASTC: result.isUASTC,
163
+ hasAlpha: result.hasAlpha
173
164
  };
174
- nodeFileHooksReady = true;
175
- }
176
- async function importNodeModule(specifier) {
177
- return import(/* @vite-ignore */ specifier);
178
165
  }
166
+ const BASIS_TRANSCODER_FORMAT_FALLBACK = 13; // TranscoderFormat.RGBA32
179
167
  /**
180
- * M2 one-call decoder setup (package level). The root `assets.ensureDecoders`
181
- * wiring is a reported bridge hunk — this function is the behavior it calls.
182
- * Never reports success for a decoder no probe confirmed.
168
+ * Decoder-capability probe + reporting (PRD-05 §7.4). Defaults: meshopt and
169
+ * KTX2 on (their modules ship with the package/are served at
170
+ * `aura-decoders/`), Draco lazy — reported loaded-once-`require(["draco"])`-ed.
171
+ * `chosenKtx2Target` goes through `selectKTX2TargetFormat` whenever real GPU
172
+ * capability tokens are provided; with no GPU info it reports the requested
173
+ * target unchanged.
183
174
  */
184
175
  export async function ensureCompressedTextureSupport(request = {}, probes = {}) {
185
176
  const wantDraco = request.draco ?? false;
186
- const wantMeshopt = request.meshopt ?? false;
177
+ const wantMeshopt = request.meshopt ?? true;
187
178
  const wantKtx2 = request.ktx2 ?? true;
188
- const dracoAvailable = await resolveProbe(probes.dracoAvailable, async () => false);
189
- const meshoptAvailable = await resolveProbe(probes.meshoptAvailable, async () => false);
190
- const ktx2Available = await resolveProbe(probes.ktx2Available, probeKtx2Modules);
179
+ const dracoAvailable = await resolveProbe(probes.dracoAvailable, probeVendoredDraco);
180
+ const meshoptAvailable = await resolveProbe(probes.meshoptAvailable, probeMeshoptPackage);
181
+ const ktx2Available = await resolveProbe(probes.ktx2Available, probeVendoredBasis);
191
182
  const gpuCompressedFormats = probes.gpuCompressedFormats ?? [];
192
183
  const requestedTarget = request.targetFormat ?? "etc2-rgba8unorm";
193
- const supportedTargets = ["etc2-rgba8unorm", "bc3-rgba-unorm", "astc-4x4-rgba-unorm", "rgba8"];
194
- const gpuSet = new Set(gpuCompressedFormats);
184
+ const caps = capabilitiesFromTokens(gpuCompressedFormats);
195
185
  const chosenKtx2Target = !wantKtx2 || !ktx2Available
196
186
  ? "rgba8"
197
- : gpuSet.size === 0 || gpuSet.has(requestedTarget)
187
+ : gpuCompressedFormats.length === 0
198
188
  ? requestedTarget
199
- : (supportedTargets.find((target) => gpuSet.has(target)) ?? "rgba8");
189
+ : selectKTX2TargetFormat(caps, "uastc", true, "srgb");
200
190
  return {
201
191
  schema: "a3d-compressed-texture-support",
202
192
  draco: {
203
193
  requested: wantDraco,
204
194
  available: dracoAvailable,
205
195
  detail: !wantDraco
206
- ? "Draco not requested."
196
+ ? "Draco not requested (lazy — loads on registry.require([\"draco\"]))."
207
197
  : dracoAvailable
208
- ? "Injected Draco decoder confirmed by probe."
209
- : "Draco requested but no decoder probe confirmed it — geometry decoding will fail closed."
198
+ ? "Vendored Draco decoder confirmed by probe."
199
+ : "Draco requested but the vendored decoder did not resolve — geometry decoding will fail closed."
210
200
  },
211
201
  meshopt: {
212
202
  requested: wantMeshopt,
@@ -214,8 +204,8 @@ export async function ensureCompressedTextureSupport(request = {}, probes = {})
214
204
  detail: !wantMeshopt
215
205
  ? "Meshopt not requested."
216
206
  : meshoptAvailable
217
- ? "Injected Meshopt decoder confirmed by probe."
218
- : "Meshopt requested but no decoder probe confirmed it — buffer decoding will fail closed."
207
+ ? "meshoptimizer package resolved."
208
+ : "Meshopt requested but the meshoptimizer package did not resolve — buffer decoding will fail closed."
219
209
  },
220
210
  ktx2: {
221
211
  requested: wantKtx2,
@@ -223,8 +213,8 @@ export async function ensureCompressedTextureSupport(request = {}, probes = {})
223
213
  detail: !wantKtx2
224
214
  ? "KTX2 not requested; rgba8 fallback path."
225
215
  : ktx2Available
226
- ? `KTX2 transcoder resolved; target=${chosenKtx2Target}.`
227
- : "KTX2 requested but the transcoder modules did not resolve — rgba8 fallback path."
216
+ ? `Vendored KTX2 transcoder resolved; target=${chosenKtx2Target}.`
217
+ : "KTX2 requested but the vendored transcoder did not resolve — rgba8 fallback path."
228
218
  },
229
219
  gpuCompressedFormats,
230
220
  chosenKtx2Target
@@ -237,10 +227,61 @@ async function resolveProbe(probe, fallback) {
237
227
  return Boolean(await probe());
238
228
  return Boolean(await fallback());
239
229
  }
240
- async function probeKtx2Modules() {
230
+ function capabilitiesFromTokens(tokens) {
231
+ const caps = { astc: false, bptc: false, etc2: false, s3tc: false, s3tcSrgb: false };
232
+ for (const raw of tokens) {
233
+ const token = raw.toLowerCase();
234
+ if (token === "astc" || token === "astc-4x4-rgba-unorm")
235
+ caps.astc = true;
236
+ else if (token === "bptc" || token === "bc7" || token === "bc7-rgba-unorm")
237
+ caps.bptc = true;
238
+ else if (token === "etc2" || token === "etc2-rgba8unorm" || token === "etc2-rgb8unorm")
239
+ caps.etc2 = true;
240
+ else if (token === "s3tc-srgb" || token === "s3tcsrgb")
241
+ caps.s3tcSrgb = true;
242
+ else if (token === "s3tc" || token === "bc1-rgb-unorm" || token === "bc1-rgba-unorm" || token === "bc3-rgba-unorm")
243
+ caps.s3tc = true;
244
+ }
245
+ return caps;
246
+ }
247
+ async function probeMeshoptPackage() {
248
+ // Browsers resolve the same-origin vendored decoder; Node resolves the
249
+ // `meshoptimizer` package (non-static specifier — build-optional).
250
+ if (typeof document !== "undefined")
251
+ return probeVendored("meshopt", "meshopt_decoder.mjs");
241
252
  try {
242
- await loadLoadersGLModules();
243
- return true;
253
+ const pkg = ["mesh", "optimizer"].join("");
254
+ const mod = await import(pkg);
255
+ const decoder = (mod.MeshoptDecoder ?? mod.default?.MeshoptDecoder);
256
+ return decoder !== undefined && typeof decoder === "object";
257
+ }
258
+ catch {
259
+ return false;
260
+ }
261
+ }
262
+ async function probeVendoredBasis() {
263
+ return probeVendored("basis", "basis_transcoder.js");
264
+ }
265
+ async function probeVendoredDraco() {
266
+ return probeVendored("draco", "draco_decoder.js");
267
+ }
268
+ async function probeVendored(dir, file) {
269
+ if (typeof fetch === "function" && typeof document !== "undefined") {
270
+ try {
271
+ const response = await fetch(`/aura-decoders/${dir}/${file}`, { method: "HEAD" });
272
+ if (response.ok)
273
+ return true;
274
+ }
275
+ catch { /* fall through to node probe */ }
276
+ }
277
+ try {
278
+ const { fs } = await nodeBuiltins();
279
+ const { existsSync } = fs;
280
+ for (const base of ["../vendor", "../../vendor"]) {
281
+ if (existsSync(new URL(`${base}/${dir}/${file}`, import.meta.url)))
282
+ return true;
283
+ }
284
+ return false;
244
285
  }
245
286
  catch {
246
287
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"KTX2BasisTextureTranscoder.js","sourceRoot":"","sources":["../../../../packages/assets/src/KTX2BasisTextureTranscoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KTX2BasisTextureTranscoder.js","sourceRoot":"","sources":["../../../../packages/assets/src/KTX2BasisTextureTranscoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { CompressedTextureCapabilities } from "@aura3d/rendering/contracts";
2
+ export type { CompressedTextureCapabilities };
3
+ /**
4
+ * C-16 §7.4 — GPU-compressed targets a KTX2 texture can be transcoded to.
5
+ * "bc1-rgb-unorm" is the opaque ETC1S target; the existing
6
+ * `TextureCompressedFormat` member "bc1-rgba-unorm" covers the same block
7
+ * layout on the render side (DXT1 has no alpha plane).
8
+ */
9
+ export type KTX2BasisTargetFormat = "astc-4x4-rgba-unorm" | "bc7-rgba-unorm" | "etc2-rgba8unorm" | "etc2-rgb8unorm" | "bc3-rgba-unorm" | "bc1-rgb-unorm" | "rgba8";
10
+ /**
11
+ * KTX2 target selection (PRD-05 §7.4, ASSET_MATRIX §matrix.ktx2).
12
+ *
13
+ * UASTC → astc-4x4 > bc7 > etc2-rgba8 > rgba8
14
+ * ETC1S → etc2-rgb8 (opaque) / etc2-rgba8 (alpha)
15
+ * > bc1 (opaque) / bc3 (alpha) > rgba8
16
+ * sRGB slot on a device with s3tc but not s3tcSrgb never picks bc1/bc3 —
17
+ * it selects bptc when available, else rgba8 (linear BC would decode the
18
+ * sRGB texels incorrectly).
19
+ *
20
+ * ASTC/BPTC/ETC2 each carry sRGB internal-format variants inside the same
21
+ * WebGL extension, so colour space only constrains the S3TC branch (S3TC
22
+ * splits unorm and sRGB support across two extensions).
23
+ */
24
+ export declare function selectKTX2TargetFormat(caps: CompressedTextureCapabilities, source: "uastc" | "etc1s", hasAlpha: boolean, colorSpace: "srgb" | "linear"): KTX2BasisTargetFormat;
25
+ //# sourceMappingURL=KTX2TargetSelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KTX2TargetSelection.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/KTX2TargetSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAEjF,YAAY,EAAE,6BAA6B,EAAE,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAC7B,qBAAqB,GACrB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,OAAO,CAAC;AAEZ;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,6BAA6B,EACnC,MAAM,EAAE,OAAO,GAAG,OAAO,EACzB,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAC5B,qBAAqB,CAevB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * KTX2 target selection (PRD-05 §7.4, ASSET_MATRIX §matrix.ktx2).
3
+ *
4
+ * UASTC → astc-4x4 > bc7 > etc2-rgba8 > rgba8
5
+ * ETC1S → etc2-rgb8 (opaque) / etc2-rgba8 (alpha)
6
+ * > bc1 (opaque) / bc3 (alpha) > rgba8
7
+ * sRGB slot on a device with s3tc but not s3tcSrgb never picks bc1/bc3 —
8
+ * it selects bptc when available, else rgba8 (linear BC would decode the
9
+ * sRGB texels incorrectly).
10
+ *
11
+ * ASTC/BPTC/ETC2 each carry sRGB internal-format variants inside the same
12
+ * WebGL extension, so colour space only constrains the S3TC branch (S3TC
13
+ * splits unorm and sRGB support across two extensions).
14
+ */
15
+ export function selectKTX2TargetFormat(caps, source, hasAlpha, colorSpace) {
16
+ if (source === "uastc") {
17
+ if (caps.astc)
18
+ return "astc-4x4-rgba-unorm";
19
+ if (caps.bptc)
20
+ return "bc7-rgba-unorm";
21
+ if (caps.etc2)
22
+ return "etc2-rgba8unorm";
23
+ return "rgba8";
24
+ }
25
+ // ETC1S
26
+ if (caps.etc2)
27
+ return hasAlpha ? "etc2-rgba8unorm" : "etc2-rgb8unorm";
28
+ const s3tcUsable = colorSpace === "srgb" ? caps.s3tcSrgb : caps.s3tc;
29
+ if (s3tcUsable)
30
+ return hasAlpha ? "bc3-rgba-unorm" : "bc1-rgb-unorm";
31
+ if (colorSpace === "srgb" && caps.s3tc && !caps.s3tcSrgb && caps.bptc) {
32
+ return "bc7-rgba-unorm";
33
+ }
34
+ return "rgba8";
35
+ }
36
+ //# sourceMappingURL=KTX2TargetSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KTX2TargetSelection.js","sourceRoot":"","sources":["../../../../packages/assets/src/KTX2TargetSelection.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAmC,EACnC,MAAyB,EACzB,QAAiB,EACjB,UAA6B;IAE7B,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,qBAAqB,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,gBAAgB,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,iBAAiB,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,QAAQ;IACR,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACtE,MAAM,UAAU,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrE,IAAI,UAAU;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;IACrE,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACtE,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}