@aura3d/assets 3.0.1 → 4.0.2

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 (158) 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 +216 -2
  9. package/dist/GLTFAnimationRuntime.d.ts.map +1 -1
  10. package/dist/GLTFAnimationRuntime.js +674 -38
  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/GLTFExtensionSupport.js +3 -3
  17. package/dist/GLTFExtensionSupport.js.map +1 -1
  18. package/dist/GLTFLoader.d.ts +28 -1
  19. package/dist/GLTFLoader.d.ts.map +1 -1
  20. package/dist/GLTFLoader.js +176 -23
  21. package/dist/GLTFLoader.js.map +1 -1
  22. package/dist/GLTFRenderResources.d.ts +77 -2
  23. package/dist/GLTFRenderResources.d.ts.map +1 -1
  24. package/dist/GLTFRenderResources.js +310 -153
  25. package/dist/GLTFRenderResources.js.map +1 -1
  26. package/dist/KTX2BasisTextureTranscoder.d.ts +70 -12
  27. package/dist/KTX2BasisTextureTranscoder.d.ts.map +1 -1
  28. package/dist/KTX2BasisTextureTranscoder.js +225 -192
  29. package/dist/KTX2BasisTextureTranscoder.js.map +1 -1
  30. package/dist/KTX2TargetSelection.d.ts +25 -0
  31. package/dist/KTX2TargetSelection.d.ts.map +1 -0
  32. package/dist/KTX2TargetSelection.js +36 -0
  33. package/dist/KTX2TargetSelection.js.map +1 -0
  34. package/dist/KTX2TranscodeDriver.d.ts +70 -0
  35. package/dist/KTX2TranscodeDriver.d.ts.map +1 -0
  36. package/dist/KTX2TranscodeDriver.js +104 -0
  37. package/dist/KTX2TranscodeDriver.js.map +1 -0
  38. package/dist/KTX2TranscodeWorker.d.ts +30 -0
  39. package/dist/KTX2TranscodeWorker.d.ts.map +1 -0
  40. package/dist/KTX2TranscodeWorker.js +230 -0
  41. package/dist/KTX2TranscodeWorker.js.map +1 -0
  42. package/dist/MikkTSpaceTangents.d.ts +43 -0
  43. package/dist/MikkTSpaceTangents.d.ts.map +1 -0
  44. package/dist/MikkTSpaceTangents.js +149 -0
  45. package/dist/MikkTSpaceTangents.js.map +1 -0
  46. package/dist/asset-corpus/ProductionAssetCorpus.d.ts.map +1 -1
  47. package/dist/asset-corpus/ProductionAssetCorpus.js +7 -13
  48. package/dist/asset-corpus/ProductionAssetCorpus.js.map +1 -1
  49. package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts +43 -0
  50. package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -1
  51. package/dist/asset-corpus/ProductionGLTFRenderPipeline.js +146 -22
  52. package/dist/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -1
  53. package/dist/assetPhaseMarks.d.ts +14 -0
  54. package/dist/assetPhaseMarks.d.ts.map +1 -0
  55. package/dist/assetPhaseMarks.js +23 -0
  56. package/dist/assetPhaseMarks.js.map +1 -0
  57. package/dist/browser-index.d.ts +5 -1
  58. package/dist/browser-index.d.ts.map +1 -1
  59. package/dist/browser-index.js +3 -1
  60. package/dist/browser-index.js.map +1 -1
  61. package/dist/contracts/decoders.d.ts +15 -0
  62. package/dist/contracts/decoders.d.ts.map +1 -0
  63. package/dist/contracts/decoders.js +8 -0
  64. package/dist/contracts/decoders.js.map +1 -0
  65. package/dist/decoderLoad.d.ts +28 -0
  66. package/dist/decoderLoad.d.ts.map +1 -0
  67. package/dist/decoderLoad.js +49 -0
  68. package/dist/decoderLoad.js.map +1 -0
  69. package/dist/gltf/ImageDecode.d.ts +18 -0
  70. package/dist/gltf/ImageDecode.d.ts.map +1 -0
  71. package/dist/gltf/ImageDecode.js +140 -0
  72. package/dist/gltf/ImageDecode.js.map +1 -0
  73. package/dist/gltf-runtime.d.ts +1 -1
  74. package/dist/gltf-runtime.d.ts.map +1 -1
  75. package/dist/gltf-runtime.js.map +1 -1
  76. package/dist/index.d.ts +5 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +3 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/lanes/index.d.ts +17 -0
  81. package/dist/lanes/index.d.ts.map +1 -0
  82. package/dist/lanes/index.js +17 -0
  83. package/dist/lanes/index.js.map +1 -0
  84. package/dist/lanes/prd01.d.ts +6 -0
  85. package/dist/lanes/prd01.d.ts.map +1 -0
  86. package/dist/lanes/prd01.js +6 -0
  87. package/dist/lanes/prd01.js.map +1 -0
  88. package/dist/lanes/prd02.d.ts +6 -0
  89. package/dist/lanes/prd02.d.ts.map +1 -0
  90. package/dist/lanes/prd02.js +6 -0
  91. package/dist/lanes/prd02.js.map +1 -0
  92. package/dist/lanes/prd03.d.ts +6 -0
  93. package/dist/lanes/prd03.d.ts.map +1 -0
  94. package/dist/lanes/prd03.js +6 -0
  95. package/dist/lanes/prd03.js.map +1 -0
  96. package/dist/lanes/prd04.d.ts +6 -0
  97. package/dist/lanes/prd04.d.ts.map +1 -0
  98. package/dist/lanes/prd04.js +6 -0
  99. package/dist/lanes/prd04.js.map +1 -0
  100. package/dist/lanes/prd05.d.ts +14 -0
  101. package/dist/lanes/prd05.d.ts.map +1 -0
  102. package/dist/lanes/prd05.js +14 -0
  103. package/dist/lanes/prd05.js.map +1 -0
  104. package/dist/lanes/prd06.d.ts +6 -0
  105. package/dist/lanes/prd06.d.ts.map +1 -0
  106. package/dist/lanes/prd06.js +6 -0
  107. package/dist/lanes/prd06.js.map +1 -0
  108. package/dist/lanes/prd07.d.ts +6 -0
  109. package/dist/lanes/prd07.d.ts.map +1 -0
  110. package/dist/lanes/prd07.js +6 -0
  111. package/dist/lanes/prd07.js.map +1 -0
  112. package/dist/lanes/prd08.d.ts +6 -0
  113. package/dist/lanes/prd08.d.ts.map +1 -0
  114. package/dist/lanes/prd08.js +6 -0
  115. package/dist/lanes/prd08.js.map +1 -0
  116. package/dist/lanes/prd09.d.ts +6 -0
  117. package/dist/lanes/prd09.d.ts.map +1 -0
  118. package/dist/lanes/prd09.js +6 -0
  119. package/dist/lanes/prd09.js.map +1 -0
  120. package/dist/lanes/prd10.d.ts +6 -0
  121. package/dist/lanes/prd10.d.ts.map +1 -0
  122. package/dist/lanes/prd10.js +6 -0
  123. package/dist/lanes/prd10.js.map +1 -0
  124. package/dist/lanes/prd11.d.ts +6 -0
  125. package/dist/lanes/prd11.d.ts.map +1 -0
  126. package/dist/lanes/prd11.js +6 -0
  127. package/dist/lanes/prd11.js.map +1 -0
  128. package/dist/lanes/prd12.d.ts +6 -0
  129. package/dist/lanes/prd12.d.ts.map +1 -0
  130. package/dist/lanes/prd12.js +6 -0
  131. package/dist/lanes/prd12.js.map +1 -0
  132. package/dist/lanes/prd13.d.ts +6 -0
  133. package/dist/lanes/prd13.d.ts.map +1 -0
  134. package/dist/lanes/prd13.js +6 -0
  135. package/dist/lanes/prd13.js.map +1 -0
  136. package/dist/lanes/prd14.d.ts +6 -0
  137. package/dist/lanes/prd14.d.ts.map +1 -0
  138. package/dist/lanes/prd14.js +6 -0
  139. package/dist/lanes/prd14.js.map +1 -0
  140. package/dist/lanes/prd15.d.ts +6 -0
  141. package/dist/lanes/prd15.d.ts.map +1 -0
  142. package/dist/lanes/prd15.js +6 -0
  143. package/dist/lanes/prd15.js.map +1 -0
  144. package/dist/vite/auraDecoders.d.ts +31 -0
  145. package/dist/vite/auraDecoders.d.ts.map +1 -0
  146. package/dist/vite/auraDecoders.js +89 -0
  147. package/dist/vite/auraDecoders.js.map +1 -0
  148. package/package.json +13 -5
  149. package/vendor/basis/README.md +25 -0
  150. package/vendor/basis/basis_transcoder.js +19 -0
  151. package/vendor/basis/basis_transcoder.wasm +0 -0
  152. package/vendor/draco/README.md +23 -0
  153. package/vendor/draco/draco_decoder.js +33 -0
  154. package/vendor/draco/draco_decoder.wasm +0 -0
  155. package/vendor/meshopt/README.md +21 -0
  156. package/vendor/meshopt/meshopt_decoder.cjs +199 -0
  157. package/vendor/meshopt/meshopt_decoder.mjs +196 -0
  158. package/vendor/meshopt_decoder.mjs +196 -0
@@ -1,220 +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 identifier = [0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
7
- const header = new Uint8Array(source);
8
- if (identifier.some((value, index) => header[index] !== value)) {
9
- throw new Error("KTX2/Basis input is missing the KTX2 identifier");
10
- }
11
- if (!["etc2-rgba8unorm", "bc3-rgba-unorm", "astc-4x4-rgba-unorm", "rgba8"].includes(targetFormat)) {
12
- throw new Error(`KTX2/Basis target format ${String(targetFormat)} is unsupported`);
13
- }
14
- const compressedLevels = await parseTextureLevels(source, targetFormat, options.loaderOptions);
15
- const baseLevel = compressedLevels[0];
16
- if (!baseLevel) {
17
- throw new Error("KTX2/Basis transcode produced no texture levels");
18
- }
19
- if (targetFormat === "rgba8") {
20
- return {
21
- width: baseLevel.width,
22
- height: baseLevel.height,
23
- colorSpace: "linear",
24
- format: "rgba8",
25
- data: baseLevel.data
26
- };
27
- }
28
- const fallbackLevels = options.includeFallback === false
29
- ? []
30
- : validRGBA8Levels(await parseTextureLevels(source, "rgba8", options.loaderOptions));
31
- const format = mapTargetFormat(targetFormat);
32
- return {
33
- width: baseLevel.width,
34
- height: baseLevel.height,
35
- colorSpace: "linear",
36
- format,
37
- mipLevels: compressedLevels,
38
- fallbackMipLevels: fallbackLevels
39
- };
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;
40
12
  }
41
- function validRGBA8Levels(levels) {
42
- const validLevels = [];
43
- for (const level of levels) {
44
- if (level.data.byteLength !== level.width * level.height * 4)
45
- break;
46
- 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);
47
21
  }
48
- return validLevels;
22
+ return pool;
49
23
  }
50
- async function parseTextureLevels(source, targetFormat, loaderOptions) {
51
- await installNodeLoadersGLFileHooks();
52
- const { parse, BasisLoader } = await loadLoadersGLModules();
53
- const parsed = await parse(source.slice(0), BasisLoader, {
54
- // 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.
55
- worker: false,
56
- CDN: defaultLoadersGLCdn(),
57
- modules: defaultLoadersGLModules(),
58
- ...loaderOptions,
59
- ...(loaderOptions?.modules && typeof loaderOptions.modules === "object"
60
- ? { modules: { ...defaultLoadersGLModules(), ...loaderOptions.modules } }
61
- : {}),
62
- basis: {
63
- ...basisOptions(loaderOptions),
64
- containerFormat: "ktx2",
65
- module: "encoder",
66
- format: loadersGLBasisFormat(targetFormat)
67
- }
68
- });
69
- const levels = parsed[0];
70
- if (!levels || levels.length === 0) {
71
- 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);
72
37
  }
73
- return levels.map((level) => ({
74
- width: level.width,
75
- height: level.height,
76
- data: new Uint8Array(level.data)
77
- }));
38
+ return entry.promise;
78
39
  }
79
- function defaultLoadersGLCdn() {
80
- if (typeof window !== "undefined" && window.location?.origin) {
81
- 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`);
52
+ }
53
+ const BASIS = globals.BASIS;
54
+ if (typeof BASIS !== "function") {
55
+ throw new Error("basis_transcoder.js loaded but the BASIS global is missing");
82
56
  }
83
- return DEFAULT_BROWSER_CDN;
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;
84
74
  }
85
- function defaultLoadersGLModules() {
86
- if (typeof window === "undefined" || !window.location?.origin)
87
- return undefined;
88
- 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"))]);
89
81
  return {
90
- "basis_encoder.js": `${baseUrl}/basis_encoder.js`,
91
- "basis_encoder.wasm": `${baseUrl}/basis_encoder.wasm`,
92
- "basis_transcoder.js": `${baseUrl}/basis_transcoder.js`,
93
- "basis_transcoder.wasm": `${baseUrl}/basis_transcoder.wasm`
82
+ fs: fs,
83
+ module: mod,
84
+ url: url,
85
+ path: path
94
86
  };
95
87
  }
96
- async function loadLoadersGLModules() {
97
- try {
98
- const [core, textures] = await Promise.all([
99
- import("@loaders.gl/core"),
100
- import("@loaders.gl/textures")
101
- ]);
102
- return { parse: core.parse, BasisLoader: textures.BasisLoader };
103
- }
104
- catch (error) {
105
- throw new Error(`KTX2/Basis transcoder dependency resolution failed: ${error instanceof Error ? error.message : String(error)}`);
106
- }
107
- }
108
- function basisOptions(loaderOptions) {
109
- const basis = loaderOptions?.basis;
110
- return basis && typeof basis === "object" ? basis : {};
111
- }
112
- function loadersGLBasisFormat(format) {
113
- switch (format) {
114
- case "etc2-rgba8unorm":
115
- return "etc2";
116
- case "bc3-rgba-unorm":
117
- return "bc3";
118
- case "astc-4x4-rgba-unorm":
119
- return "astc-4x4";
120
- case "rgba8":
121
- return "rgba32";
122
- }
123
- }
124
- function mapTargetFormat(format) {
125
- switch (format) {
126
- case "etc2-rgba8unorm":
127
- case "bc3-rgba-unorm":
128
- case "astc-4x4-rgba-unorm":
129
- return format;
130
- case "rgba8":
131
- throw new Error("rgba8 is not a compressed texture target");
132
- }
133
- }
134
- function toArrayBuffer(bytes) {
135
- if (bytes instanceof ArrayBuffer)
136
- return bytes.slice(0);
137
- const copy = new Uint8Array(bytes.byteLength);
138
- copy.set(new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength));
139
- return copy.buffer;
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;
140
121
  }
141
- async function installNodeLoadersGLFileHooks() {
142
- if (nodeFileHooksReady || typeof process === "undefined" || !process.versions?.node)
143
- return;
144
- const existing = globalThis.loaders ?? {};
145
- if (existing.requireFromFile && existing.readFileAsArrayBuffer) {
146
- nodeFileHooksReady = true;
147
- return;
148
- }
149
- const [{ readFile }, { dirname, join }, { createRequire }, vm] = await Promise.all([
150
- importNodeModule("node:fs/promises"),
151
- importNodeModule("node:path"),
152
- importNodeModule("node:module"),
153
- importNodeModule("node:vm")
154
- ]);
155
- const require = createRequire(import.meta.url);
156
- const texturesRoot = dirname(dirname(require.resolve("@loaders.gl/textures")));
157
- const moduleCache = new Map();
158
- const resolveLibraryPath = (libraryPath) => {
159
- if (libraryPath.startsWith("modules/textures/")) {
160
- 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
+ });
161
144
  }
162
- return libraryPath;
145
+ const module = await loadBasisTranscoderModule(transcoderUrl);
146
+ return transcodeKTX2Levels(module, bytes, format, options.maxDimension);
163
147
  };
164
- globalThis.loaders = {
165
- ...existing,
166
- async requireFromFile(libraryPath) {
167
- const resolved = resolveLibraryPath(libraryPath);
168
- if (moduleCache.has(resolved))
169
- return moduleCache.get(resolved);
170
- const code = await readFile(resolved, "utf8");
171
- const module = { exports: {} };
172
- const wrapper = vm.runInNewContext(`(function(exports,module,require,__dirname,__filename){${code}\n})`, { Buffer, WebAssembly, clearTimeout, console, process, setTimeout, TextDecoder, TextEncoder });
173
- wrapper(module.exports, module, require, dirname(resolved), resolved);
174
- moduleCache.set(resolved, module.exports);
175
- return module.exports;
176
- },
177
- async readFileAsArrayBuffer(libraryPath) {
178
- const buffer = await readFile(resolveLibraryPath(libraryPath));
179
- return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
180
- }
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
181
164
  };
182
- nodeFileHooksReady = true;
183
- }
184
- async function importNodeModule(specifier) {
185
- return import(/* @vite-ignore */ specifier);
186
165
  }
166
+ const BASIS_TRANSCODER_FORMAT_FALLBACK = 13; // TranscoderFormat.RGBA32
187
167
  /**
188
- * M2 one-call decoder setup (package level). The root `assets.ensureDecoders`
189
- * wiring is a reported bridge hunk — this function is the behavior it calls.
190
- * 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.
191
174
  */
192
175
  export async function ensureCompressedTextureSupport(request = {}, probes = {}) {
193
176
  const wantDraco = request.draco ?? false;
194
- const wantMeshopt = request.meshopt ?? false;
177
+ const wantMeshopt = request.meshopt ?? true;
195
178
  const wantKtx2 = request.ktx2 ?? true;
196
- const dracoAvailable = await resolveProbe(probes.dracoAvailable, async () => false);
197
- const meshoptAvailable = await resolveProbe(probes.meshoptAvailable, async () => false);
198
- 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);
199
182
  const gpuCompressedFormats = probes.gpuCompressedFormats ?? [];
200
183
  const requestedTarget = request.targetFormat ?? "etc2-rgba8unorm";
201
- const supportedTargets = ["etc2-rgba8unorm", "bc3-rgba-unorm", "astc-4x4-rgba-unorm", "rgba8"];
202
- const gpuSet = new Set(gpuCompressedFormats);
184
+ const caps = capabilitiesFromTokens(gpuCompressedFormats);
203
185
  const chosenKtx2Target = !wantKtx2 || !ktx2Available
204
186
  ? "rgba8"
205
- : gpuSet.size === 0 || gpuSet.has(requestedTarget)
187
+ : gpuCompressedFormats.length === 0
206
188
  ? requestedTarget
207
- : (supportedTargets.find((target) => gpuSet.has(target)) ?? "rgba8");
189
+ : selectKTX2TargetFormat(caps, "uastc", true, "srgb");
208
190
  return {
209
191
  schema: "a3d-compressed-texture-support",
210
192
  draco: {
211
193
  requested: wantDraco,
212
194
  available: dracoAvailable,
213
195
  detail: !wantDraco
214
- ? "Draco not requested."
196
+ ? "Draco not requested (lazy — loads on registry.require([\"draco\"]))."
215
197
  : dracoAvailable
216
- ? "Injected Draco decoder confirmed by probe."
217
- : "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."
218
200
  },
219
201
  meshopt: {
220
202
  requested: wantMeshopt,
@@ -222,8 +204,8 @@ export async function ensureCompressedTextureSupport(request = {}, probes = {})
222
204
  detail: !wantMeshopt
223
205
  ? "Meshopt not requested."
224
206
  : meshoptAvailable
225
- ? "Injected Meshopt decoder confirmed by probe."
226
- : "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."
227
209
  },
228
210
  ktx2: {
229
211
  requested: wantKtx2,
@@ -231,8 +213,8 @@ export async function ensureCompressedTextureSupport(request = {}, probes = {})
231
213
  detail: !wantKtx2
232
214
  ? "KTX2 not requested; rgba8 fallback path."
233
215
  : ktx2Available
234
- ? `KTX2 transcoder resolved; target=${chosenKtx2Target}.`
235
- : "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."
236
218
  },
237
219
  gpuCompressedFormats,
238
220
  chosenKtx2Target
@@ -245,10 +227,61 @@ async function resolveProbe(probe, fallback) {
245
227
  return Boolean(await probe());
246
228
  return Boolean(await fallback());
247
229
  }
248
- 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");
252
+ try {
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
+ }
249
277
  try {
250
- await loadLoadersGLModules();
251
- return true;
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;
252
285
  }
253
286
  catch {
254
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"}