@forgeax/engine-import 0.1.24 → 0.1.26
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 +4 -1
- package/dist/build-production.d.ts.map +1 -1
- package/dist/index.mjs +52 -5
- package/dist/index.mjs.map +1 -1
- package/dist/scriptable-pack-build.d.ts +5 -0
- package/dist/scriptable-pack-build.d.ts.map +1 -1
- package/dist/scriptable-pack-host.d.ts +2 -0
- package/dist/scriptable-pack-host.d.ts.map +1 -1
- package/dist/scriptable-pack-output-producers.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/__tests__/scriptable-pack-host.unit.test.ts +48 -0
- package/src/__tests__/scriptable-pack-output-producers.unit.test.ts +6 -7
- package/src/__tests__/scriptable-pack-production-producers.unit.test.ts +1 -1
- package/src/build-production.ts +1 -0
- package/src/scriptable-pack-build.ts +54 -3
- package/src/scriptable-pack-host.ts +10 -0
- package/src/scriptable-pack-output-producers.ts +4 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type NativeCooker } from '@forgeax/engine-pack/native-cooker';
|
|
1
2
|
import { type AnyScriptablePackDefinition, type PackAuthoringError, PackageId, type PackParameterValue } from '@forgeax/engine-pack/source';
|
|
2
3
|
import type { AssetPublicationEnvelope, Result } from '@forgeax/engine-types';
|
|
3
4
|
import { AssetError, ImportError } from '@forgeax/engine-types';
|
|
@@ -14,6 +15,8 @@ export interface ScriptablePackBuildOptions {
|
|
|
14
15
|
readonly inheritedValues?: Readonly<Record<string, PackParameterValue>>;
|
|
15
16
|
readonly assetSource?: ScriptablePackAssetSnapshotSource;
|
|
16
17
|
readonly outputs: AssetOutputProducerRegistry;
|
|
18
|
+
/** Optional build-time cookers for authored producer outputs that need artifacts. */
|
|
19
|
+
readonly cookers?: readonly NativeCooker[];
|
|
17
20
|
readonly sourceClosure?: readonly ScriptablePackSourceClosureEntry[];
|
|
18
21
|
readonly authoringContractVersion?: string;
|
|
19
22
|
/** Known published GUIDs used for the optional global reference gate. */
|
|
@@ -47,6 +50,8 @@ export interface ScriptablePackBuildWorkItem {
|
|
|
47
50
|
export interface ScriptablePackBuildWorklistOptions {
|
|
48
51
|
readonly subjects: readonly ScriptablePackBuildWorkItem[];
|
|
49
52
|
readonly outputs: AssetOutputProducerRegistry;
|
|
53
|
+
/** Optional build-time cookers forwarded to each authored Pack subject. */
|
|
54
|
+
readonly cookers?: readonly NativeCooker[];
|
|
50
55
|
readonly assetSource?: ScriptablePackAssetSnapshotSource;
|
|
51
56
|
readonly availableGuids?: ReadonlySet<string>;
|
|
52
57
|
readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scriptable-pack-build.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-build.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,2BAA2B,EAIhC,KAAK,kBAAkB,EACvB,SAAS,EAIT,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"scriptable-pack-build.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,8 @@ export interface ScriptablePackProductionOptions {
|
|
|
31
31
|
readonly sources: readonly ScriptablePackInput[];
|
|
32
32
|
readonly declaredExternalOutputs?: readonly ScriptablePackStagedOutput[];
|
|
33
33
|
readonly assetSource?: ScriptablePackAssetSnapshotSource;
|
|
34
|
+
/** Build-time producers used for custom or otherwise uncooked asset rows. */
|
|
35
|
+
readonly cookers?: readonly NativeCooker[];
|
|
34
36
|
readonly availableGuids?: ReadonlySet<string>;
|
|
35
37
|
readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
|
|
36
38
|
readonly maxPasses?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scriptable-pack-output-producers.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-output-producers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAmChF,OAAO,EAEL,KAAK,mBAAmB,EACxB,2BAA2B,EAE5B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"scriptable-pack-output-producers.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-output-producers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAmChF,OAAO,EAEL,KAAK,mBAAmB,EACxB,2BAA2B,EAE5B,MAAM,sBAAsB,CAAC;AA4c9B,eAAO,MAAM,2BAA2B,qBAIvC,CAAC;AACF,eAAO,MAAM,uBAAuB,qBAA2D,CAAC;AAChG,eAAO,MAAM,0BAA0B,qBAItC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,mBAAmB,CAKrB;AAED,wBAAgB,6CAA6C,IAAI,mBAAmB,CAEnF;AAED,wBAAgB,yCAAyC,CACvD,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,2BAA2B,CAwB7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-import",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"LICENSE"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@forgeax/engine-ddc": "0.1.
|
|
31
|
-
"@forgeax/engine-ecs": "0.1.
|
|
32
|
-
"@forgeax/engine-geometry": "0.1.
|
|
33
|
-
"@forgeax/engine-pack": "0.1.
|
|
34
|
-
"@forgeax/engine-scene": "0.1.
|
|
35
|
-
"@forgeax/engine-shader": "0.1.
|
|
36
|
-
"@forgeax/engine-types": "0.1.
|
|
30
|
+
"@forgeax/engine-ddc": "0.1.26",
|
|
31
|
+
"@forgeax/engine-ecs": "0.1.26",
|
|
32
|
+
"@forgeax/engine-geometry": "0.1.26",
|
|
33
|
+
"@forgeax/engine-pack": "0.1.26",
|
|
34
|
+
"@forgeax/engine-scene": "0.1.26",
|
|
35
|
+
"@forgeax/engine-shader": "0.1.26",
|
|
36
|
+
"@forgeax/engine-types": "0.1.26",
|
|
37
37
|
"@noble/hashes": "^2.2.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
@@ -17,6 +17,7 @@ import { ImporterRegistry } from '../importer-registry.js';
|
|
|
17
17
|
import {
|
|
18
18
|
declaredPackExternalOutputs,
|
|
19
19
|
prepareDirectPackTransport,
|
|
20
|
+
prepareLegacyPackTransport,
|
|
20
21
|
} from '../scriptable-pack-host.js';
|
|
21
22
|
|
|
22
23
|
const GUID = '019ffa97-0000-7000-8000-000000000001';
|
|
@@ -275,4 +276,51 @@ describe('ScriptablePack external Meta staging', () => {
|
|
|
275
276
|
},
|
|
276
277
|
]);
|
|
277
278
|
});
|
|
279
|
+
|
|
280
|
+
it('publishes already-cooked Engine-owned materials from legacy Pack v2', async () => {
|
|
281
|
+
const guid = '019ffa97-0000-0000-8000-000000000012';
|
|
282
|
+
const result = await prepareLegacyPackTransport(
|
|
283
|
+
{
|
|
284
|
+
schemaVersion: '2.0.0',
|
|
285
|
+
kind: 'internal-text-package',
|
|
286
|
+
assets: [
|
|
287
|
+
{
|
|
288
|
+
guid,
|
|
289
|
+
kind: 'material',
|
|
290
|
+
sourceKey: 'shaders/rusted-iron.wgsl',
|
|
291
|
+
execution: 'cooked',
|
|
292
|
+
payload: {
|
|
293
|
+
kind: 'material',
|
|
294
|
+
passes: [
|
|
295
|
+
{
|
|
296
|
+
name: 'forward',
|
|
297
|
+
program: {
|
|
298
|
+
module: 'forgeax::default-standard-pbr',
|
|
299
|
+
fragmentEntry: 'fs_main',
|
|
300
|
+
},
|
|
301
|
+
renderState: { tags: { LightMode: 'Forward' } },
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
parameters: [{ name: 'noiseScale', type: 'f32' }],
|
|
305
|
+
values: { noiseScale: 1.85 },
|
|
306
|
+
},
|
|
307
|
+
refs: [],
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
},
|
|
311
|
+
[],
|
|
312
|
+
(assetGuid) => ({
|
|
313
|
+
base: '/',
|
|
314
|
+
packagePath: `/__forgeax-ddc/${assetGuid}.pack.json`,
|
|
315
|
+
artifactPath: (childGuid, key) => `${childGuid}/${key}.bin`,
|
|
316
|
+
}),
|
|
317
|
+
);
|
|
318
|
+
|
|
319
|
+
expect(result.firstGuid).toBe(guid);
|
|
320
|
+
expect(result.cooked?.refsByGuid.get(guid)).toEqual([]);
|
|
321
|
+
expect(result.finalized?.packageUrl).toBe(`/__forgeax-ddc/${guid}.pack.json`);
|
|
322
|
+
expect(result.finalized?.pack.assets[0]?.payload).toMatchObject({
|
|
323
|
+
passes: [{ program: { module: 'forgeax::default-standard-pbr' } }],
|
|
324
|
+
});
|
|
325
|
+
});
|
|
278
326
|
});
|
|
@@ -71,9 +71,8 @@ describe('ScriptablePack standard output producers', () => {
|
|
|
71
71
|
const material: MaterialAsset = {
|
|
72
72
|
kind: 'material',
|
|
73
73
|
parent: PARENT_GUID,
|
|
74
|
-
parameters: [{ name: 'surface', type: 'texture' }],
|
|
75
74
|
values: {
|
|
76
|
-
|
|
75
|
+
baseColorTexture: {
|
|
77
76
|
texture: TEXTURE_GUID,
|
|
78
77
|
sampler: SAMPLER_GUID,
|
|
79
78
|
coordinates: { set: 1, transform: { scale: [2, 2] } },
|
|
@@ -93,18 +92,18 @@ describe('ScriptablePack standard output producers', () => {
|
|
|
93
92
|
{ guid: AssetGuid.format(PARENT_GUID), sourceField: { fieldName: 'parent' } },
|
|
94
93
|
{
|
|
95
94
|
guid: AssetGuid.format(TEXTURE_GUID),
|
|
96
|
-
sourceField: { componentName: '<material>', fieldName: '
|
|
95
|
+
sourceField: { componentName: '<material>', fieldName: 'baseColorTexture' },
|
|
97
96
|
},
|
|
98
97
|
{
|
|
99
98
|
guid: AssetGuid.format(SAMPLER_GUID),
|
|
100
|
-
sourceField: { componentName: '<material>', fieldName: '
|
|
99
|
+
sourceField: { componentName: '<material>', fieldName: 'baseColorTexture.sampler' },
|
|
101
100
|
},
|
|
102
101
|
]);
|
|
103
102
|
expect(result.value.payload).toEqual({
|
|
104
103
|
...material,
|
|
105
104
|
parent: 0,
|
|
106
105
|
values: {
|
|
107
|
-
|
|
106
|
+
baseColorTexture: {
|
|
108
107
|
texture: 1,
|
|
109
108
|
sampler: 2,
|
|
110
109
|
coordinates: { set: 1, transform: { scale: [2, 2] } },
|
|
@@ -136,7 +135,7 @@ describe('ScriptablePack standard output producers', () => {
|
|
|
136
135
|
},
|
|
137
136
|
]);
|
|
138
137
|
const payload = result.value.payload as { values?: Record<string, unknown> };
|
|
139
|
-
expect(payload.values).toEqual({ surface: 0 });
|
|
138
|
+
expect(payload.values).toEqual({ surface: { texture: 0 } });
|
|
140
139
|
expect(payload.values?.surface).not.toEqual({
|
|
141
140
|
texture: 0,
|
|
142
141
|
coordinates: { set: 0, transform: { offset: [0, 0], scale: [1, 1], rotation: 0 } },
|
|
@@ -164,7 +163,7 @@ describe('ScriptablePack standard output producers', () => {
|
|
|
164
163
|
},
|
|
165
164
|
]);
|
|
166
165
|
expect((result.value.payload as { values?: Record<string, unknown> }).values).toEqual({
|
|
167
|
-
baseColorTexture: 0,
|
|
166
|
+
baseColorTexture: { texture: 0 },
|
|
168
167
|
});
|
|
169
168
|
});
|
|
170
169
|
|
|
@@ -175,7 +175,7 @@ describe('standard ScriptablePack output producers', () => {
|
|
|
175
175
|
equirect: 'ordinary-pod/1',
|
|
176
176
|
font: 'ordinary-pod/1',
|
|
177
177
|
'ies-profile': 'ordinary-pod/1',
|
|
178
|
-
material: 'material-pack/
|
|
178
|
+
material: 'material-pack/2',
|
|
179
179
|
mesh: 'mesh-binary/4',
|
|
180
180
|
'particle-effect': 'ordinary-pod/1',
|
|
181
181
|
'render-pipeline': 'ordinary-pod/1',
|
package/src/build-production.ts
CHANGED
|
@@ -366,6 +366,7 @@ async function buildPackSources(
|
|
|
366
366
|
const built = await produceScriptablePackProducts({
|
|
367
367
|
sources: inputs,
|
|
368
368
|
declaredExternalOutputs: externalOutputs,
|
|
369
|
+
cookers: context.cookers,
|
|
369
370
|
availableGuids,
|
|
370
371
|
});
|
|
371
372
|
if (!built.ok) dynamicFailure(context, built.error);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BUILTIN_MESH_ASSETS } from '@forgeax/engine-pack/builtin';
|
|
2
|
+
import { type NativeCooker, NativeCookerRegistry } from '@forgeax/engine-pack/native-cooker';
|
|
2
3
|
import {
|
|
3
4
|
type AnyScriptablePackDefinition,
|
|
4
5
|
AssetGuid,
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
type PackParameterValue,
|
|
13
14
|
resolvePackParameterValues,
|
|
14
15
|
} from '@forgeax/engine-pack/source';
|
|
16
|
+
import { isEngineMaterial } from '@forgeax/engine-shader';
|
|
15
17
|
import type {
|
|
16
18
|
Asset,
|
|
17
19
|
AssetGuid as AssetGuidType,
|
|
@@ -47,6 +49,8 @@ export interface ScriptablePackBuildOptions {
|
|
|
47
49
|
readonly inheritedValues?: Readonly<Record<string, PackParameterValue>>;
|
|
48
50
|
readonly assetSource?: ScriptablePackAssetSnapshotSource;
|
|
49
51
|
readonly outputs: AssetOutputProducerRegistry;
|
|
52
|
+
/** Optional build-time cookers for authored producer outputs that need artifacts. */
|
|
53
|
+
readonly cookers?: readonly NativeCooker[];
|
|
50
54
|
readonly sourceClosure?: readonly ScriptablePackSourceClosureEntry[];
|
|
51
55
|
readonly authoringContractVersion?: string;
|
|
52
56
|
/** Known published GUIDs used for the optional global reference gate. */
|
|
@@ -89,6 +93,10 @@ function isAsset(value: unknown): value is Asset {
|
|
|
89
93
|
return record(value) && typeof value.kind === 'string' && isScriptablePackAssetKind(value.kind);
|
|
90
94
|
}
|
|
91
95
|
|
|
96
|
+
function needsMaterialCook(asset: Asset): asset is Extract<Asset, { readonly kind: 'material' }> {
|
|
97
|
+
return asset.kind === 'material' && Array.isArray(asset.passes) && !isEngineMaterial(asset);
|
|
98
|
+
}
|
|
99
|
+
|
|
92
100
|
function clone<T>(value: T): T {
|
|
93
101
|
return structuredClone(value);
|
|
94
102
|
}
|
|
@@ -384,6 +392,9 @@ export async function buildScriptablePack(
|
|
|
384
392
|
const imported: ImportedAsset<unknown>[] = [];
|
|
385
393
|
const stagedOutputs: ScriptablePackStagedOutput[] = [];
|
|
386
394
|
const localGuids = new Set<string>();
|
|
395
|
+
const materialCookerRegistry = new NativeCookerRegistry();
|
|
396
|
+
for (const cooker of options.cookers ?? []) materialCookerRegistry.register(cooker);
|
|
397
|
+
const nativeFingerprints = new Map<string, string>();
|
|
387
398
|
for (const sourceKey of Object.keys(built.value).sort()) {
|
|
388
399
|
if (!isValidPackSourceKey(sourceKey))
|
|
389
400
|
return err(sourceKeyFailure(options.sourcePath, sourceKey));
|
|
@@ -459,12 +470,40 @@ export async function buildScriptablePack(
|
|
|
459
470
|
const invalidProduct = productError(options.sourcePath, sourceKey, producer, produced.value);
|
|
460
471
|
if (invalidProduct !== undefined) return err(invalidProduct);
|
|
461
472
|
const product = produced.value as ImportAssetProduct<unknown>;
|
|
473
|
+
let payload = product.payload;
|
|
474
|
+
let artifacts = product.artifacts;
|
|
475
|
+
if (needsMaterialCook(asset) && materialCookerRegistry.get('material') !== undefined) {
|
|
476
|
+
const cooked = await materialCookerRegistry.runDraft('material', {
|
|
477
|
+
guid,
|
|
478
|
+
source: asset,
|
|
479
|
+
sourceKey,
|
|
480
|
+
sourcePath: options.sourcePath,
|
|
481
|
+
refs: product.refs.map((reference) => reference.guid),
|
|
482
|
+
});
|
|
483
|
+
if (!cooked.ok) return err(cooked.error);
|
|
484
|
+
if (cooked.value.guid.toLowerCase() !== normalizedGuid) {
|
|
485
|
+
return err({
|
|
486
|
+
code: 'pack-source-output-invalid',
|
|
487
|
+
expected: 'the authored material cooker to preserve the derived AssetGuid',
|
|
488
|
+
hint: 'repair the native material cooker output GUID and rebuild the Pack',
|
|
489
|
+
detail: {
|
|
490
|
+
sourcePath: options.sourcePath,
|
|
491
|
+
sourceKey,
|
|
492
|
+
expectedGuid: guid,
|
|
493
|
+
actualGuid: cooked.value.guid,
|
|
494
|
+
},
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
payload = cooked.value.payload;
|
|
498
|
+
artifacts = cooked.value.artifacts;
|
|
499
|
+
nativeFingerprints.set(sourceKey, cooked.value.inputFingerprint);
|
|
500
|
+
}
|
|
462
501
|
imported.push({
|
|
463
502
|
guid,
|
|
464
503
|
kind: asset.kind,
|
|
465
|
-
payload
|
|
504
|
+
payload,
|
|
466
505
|
refs: product.refs,
|
|
467
|
-
artifacts
|
|
506
|
+
artifacts,
|
|
468
507
|
});
|
|
469
508
|
stagedOutputs.push({
|
|
470
509
|
guid: AssetGuid.derive(subjectPackageId, sourceKey),
|
|
@@ -499,7 +538,7 @@ export async function buildScriptablePack(
|
|
|
499
538
|
digest: read.digest,
|
|
500
539
|
}),
|
|
501
540
|
);
|
|
502
|
-
const
|
|
541
|
+
const authoredInputFingerprint = await digest({
|
|
503
542
|
packageId: PackageId.format(subjectPackageId),
|
|
504
543
|
sourcePath: options.sourcePath,
|
|
505
544
|
sourceClosure: options.sourceClosure ?? [],
|
|
@@ -512,6 +551,15 @@ export async function buildScriptablePack(
|
|
|
512
551
|
authoringContractVersion: options.authoringContractVersion ?? 'scriptable-pack/1',
|
|
513
552
|
producerVersions: options.outputs.versions(),
|
|
514
553
|
});
|
|
554
|
+
const inputFingerprint =
|
|
555
|
+
nativeFingerprints.size === 0
|
|
556
|
+
? authoredInputFingerprint
|
|
557
|
+
: await digest({
|
|
558
|
+
sourceRevision: authoredInputFingerprint,
|
|
559
|
+
nativeCookers: [...nativeFingerprints.entries()].sort(([left], [right]) =>
|
|
560
|
+
left.localeCompare(right),
|
|
561
|
+
),
|
|
562
|
+
});
|
|
515
563
|
const refs = imported.flatMap((asset) => asset.refs);
|
|
516
564
|
const artifacts = Object.fromEntries(
|
|
517
565
|
imported.flatMap((asset) =>
|
|
@@ -555,6 +603,8 @@ export interface ScriptablePackBuildWorkItem {
|
|
|
555
603
|
export interface ScriptablePackBuildWorklistOptions {
|
|
556
604
|
readonly subjects: readonly ScriptablePackBuildWorkItem[];
|
|
557
605
|
readonly outputs: AssetOutputProducerRegistry;
|
|
606
|
+
/** Optional build-time cookers forwarded to each authored Pack subject. */
|
|
607
|
+
readonly cookers?: readonly NativeCooker[];
|
|
558
608
|
readonly assetSource?: ScriptablePackAssetSnapshotSource;
|
|
559
609
|
readonly availableGuids?: ReadonlySet<string>;
|
|
560
610
|
readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
|
|
@@ -644,6 +694,7 @@ export async function buildScriptablePackWorklist(
|
|
|
644
694
|
: { inheritedValues: subject.inheritedValues }),
|
|
645
695
|
...(subject.sourceClosure === undefined ? {} : { sourceClosure: subject.sourceClosure }),
|
|
646
696
|
outputs: options.outputs,
|
|
697
|
+
...(options.cookers === undefined ? {} : { cookers: options.cookers }),
|
|
647
698
|
assetSource: stagedSource(staged, options.assetSource),
|
|
648
699
|
availableGuids: new Set([...availableGuids, ...staged.keys()]),
|
|
649
700
|
deferReferenceValidation: true,
|
|
@@ -92,6 +92,8 @@ export interface ScriptablePackProductionOptions {
|
|
|
92
92
|
readonly sources: readonly ScriptablePackInput[];
|
|
93
93
|
readonly declaredExternalOutputs?: readonly ScriptablePackStagedOutput[];
|
|
94
94
|
readonly assetSource?: ScriptablePackAssetSnapshotSource;
|
|
95
|
+
/** Build-time producers used for custom or otherwise uncooked asset rows. */
|
|
96
|
+
readonly cookers?: readonly NativeCooker[];
|
|
95
97
|
readonly availableGuids?: ReadonlySet<string>;
|
|
96
98
|
readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
|
|
97
99
|
readonly maxPasses?: number;
|
|
@@ -299,6 +301,13 @@ export async function readCookedAuthoredPack(
|
|
|
299
301
|
continue;
|
|
300
302
|
}
|
|
301
303
|
if (isEngineOwnedMaterial(asset)) {
|
|
304
|
+
// Engine-owned material payloads are already cooked, but a legacy Pack
|
|
305
|
+
// source still needs to be projected into the runtime transport route.
|
|
306
|
+
// Mark the package as cooked so prepareLegacyPackTransport stages a
|
|
307
|
+
// published body instead of falling back to the source URL, which the
|
|
308
|
+
// dev route intentionally rejects for cooked v2 inputs.
|
|
309
|
+
hasCookedAsset = true;
|
|
310
|
+
refsByGuid.set(asset.guid.toLowerCase(), [...asset.refs]);
|
|
302
311
|
assets.push({
|
|
303
312
|
guid: asset.guid,
|
|
304
313
|
kind: asset.kind,
|
|
@@ -903,6 +912,7 @@ export async function produceScriptablePackProducts(
|
|
|
903
912
|
projectScriptablePackSceneComponents(source.definition.sceneComponents),
|
|
904
913
|
),
|
|
905
914
|
),
|
|
915
|
+
...(options.cookers === undefined ? {} : { cookers: options.cookers }),
|
|
906
916
|
...(assetSource === undefined ? {} : { assetSource }),
|
|
907
917
|
availableGuids,
|
|
908
918
|
...(options.incomingRefs === undefined ? {} : { incomingRefs: options.incomingRefs }),
|
|
@@ -124,7 +124,9 @@ function materialProduct(input: AssetOutputInput): AssetOutputProduct {
|
|
|
124
124
|
for (const fieldName of Object.keys(material.values ?? {}).sort()) {
|
|
125
125
|
const value = material.values?.[fieldName];
|
|
126
126
|
if (typeof value === 'string' && textureFields.has(fieldName)) {
|
|
127
|
-
values[fieldName] =
|
|
127
|
+
values[fieldName] = {
|
|
128
|
+
texture: addMaterialRef(value, { componentName: '<material>', fieldName }),
|
|
129
|
+
};
|
|
128
130
|
} else if (
|
|
129
131
|
value !== null &&
|
|
130
132
|
typeof value === 'object' &&
|
|
@@ -499,7 +501,7 @@ function ordinaryPodProduct(input: AssetOutputInput): AssetOutputProduct {
|
|
|
499
501
|
|
|
500
502
|
export const materialAssetOutputProducer = createSafeProducer(
|
|
501
503
|
'material',
|
|
502
|
-
'material-pack/
|
|
504
|
+
'material-pack/2',
|
|
503
505
|
materialProduct,
|
|
504
506
|
);
|
|
505
507
|
export const meshAssetOutputProducer = createSafeProducer('mesh', 'mesh-binary/4', meshProduct);
|