@forgeax/engine-gltf 0.1.3 → 0.1.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 +18 -11
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/extension-admission.unit.test.d.ts +2 -0
- package/dist/__tests__/extension-admission.unit.test.d.ts.map +1 -0
- package/dist/__tests__/source-key-diagnostics.integration.test.d.ts +2 -0
- package/dist/__tests__/source-key-diagnostics.integration.test.d.ts.map +1 -0
- package/dist/bridge.d.ts +5 -6
- package/dist/bridge.d.ts.map +1 -1
- package/dist/check-extensions.d.ts.map +1 -1
- package/dist/cli-gltf.mjs +32 -16
- package/dist/cli-gltf.mjs.map +1 -1
- package/dist/gltf-importer.d.ts.map +1 -1
- package/dist/importer-entry.mjs +14 -3
- package/dist/importer-entry.mjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +40 -12
- package/dist/index.mjs.map +1 -1
- package/dist/node-file-entry.mjs +5 -1
- package/dist/node-file-entry.mjs.map +1 -1
- package/dist/parse-gltf.d.ts.map +1 -1
- package/dist/source-key.d.ts +26 -4
- package/dist/source-key.d.ts.map +1 -1
- package/package.json +13 -15
- package/src/__tests__/extension-admission.unit.test.ts +19 -0
- package/src/__tests__/gltf.unit.test.ts +1 -1
- package/src/__tests__/material-texture-transform.unit.test.ts +30 -0
- package/src/__tests__/meshopt-real-matrix.integration.test.ts +108 -24
- package/src/__tests__/morph-import.integration.test.ts +31 -44
- package/src/__tests__/source-key-diagnostics.integration.test.ts +140 -0
- package/src/__tests__/source-key-producer.integration.test.ts +10 -2
- package/src/bridge.ts +9 -10
- package/src/check-extensions.ts +8 -4
- package/src/cli-gltf.ts +1 -6
- package/src/gltf-importer.ts +13 -4
- package/src/index.ts +1 -0
- package/src/parse-gltf.ts +7 -5
- package/src/source-key.ts +51 -17
- package/dist/__tests__/asset-runtime-fixture.d.ts +0 -14
- package/dist/__tests__/asset-runtime-fixture.d.ts.map +0 -1
- package/src/__tests__/asset-runtime-fixture.ts +0 -278
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export type { GltfHeaderJson } from './parse-gltf-header.js';
|
|
|
18
18
|
export type { GltfDocItem, GltfMetaJson, GltfSubAssetEntry, ReimportReuseResult, ReimportReuseValue, SubAssetKey, } from './reimport-reuse-meta.js';
|
|
19
19
|
export { reimportReuseMeta, subAssetKey, } from './reimport-reuse-meta.js';
|
|
20
20
|
export { serializeMetaJson } from './serialize-meta.js';
|
|
21
|
-
export type { GltfSourceKeyError, GltfSourceKeyErrorCode, GltfSourceKeyResult, } from './source-key.js';
|
|
21
|
+
export type { GltfSourceKeyConflictEntry, GltfSourceKeyError, GltfSourceKeyErrorCode, GltfSourceKeyResult, } from './source-key.js';
|
|
22
22
|
export { deriveGltfSourceKeys, sourceKeyForGltfOutput } from './source-key.js';
|
|
23
23
|
export type { DecomposedTransform, NodeTransformJson, TransformDiagnostics, Vec3Tuple, Vec4Tuple, } from './transform.js';
|
|
24
24
|
export { decomposeNodeTransform } from './transform.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAQ,EACR,WAAW,EACX,OAAO,EACP,sBAAsB,EACtB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/E,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAK5E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,2BAA2B,EAC3B,gCAAgC,EAChC,kCAAkC,EAClC,SAAS,EACT,aAAa,EACb,eAAe,EACf,8BAA8B,EAC9B,4BAA4B,EAC5B,8BAA8B,EAC9B,iCAAiC,EACjC,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,8BAA8B,EAC9B,2BAA2B,EAC3B,4BAA4B,EAC5B,MAAM,GACP,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EACV,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AASnE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAQ,EACR,WAAW,EACX,OAAO,EACP,sBAAsB,EACtB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/E,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAK5E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,2BAA2B,EAC3B,gCAAgC,EAChC,kCAAkC,EAClC,SAAS,EACT,aAAa,EACb,eAAe,EACf,8BAA8B,EAC9B,4BAA4B,EAC5B,8BAA8B,EAC9B,iCAAiC,EACjC,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,8BAA8B,EAC9B,2BAA2B,EAC3B,4BAA4B,EAC5B,MAAM,GACP,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EACV,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AASnE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EACV,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ export { err, ok } from '@forgeax/engine-types';
|
|
|
3
3
|
import { packInterleavedVertexAttributes } from '@forgeax/engine-geometry';
|
|
4
4
|
import { box3, mat4, vec3, quat } from '@forgeax/engine-math';
|
|
5
5
|
import { AssetGuid } from '@forgeax/engine-pack/guid';
|
|
6
|
-
import { packMeshBinV4 } from '@forgeax/engine-import';
|
|
6
|
+
import { packMeshBinV4 } from '@forgeax/engine-import/mesh-bin';
|
|
7
7
|
import { deriveAnimationTargetId } from '@forgeax/engine-animation/target-id';
|
|
8
8
|
|
|
9
9
|
// src/errors.ts
|
|
@@ -955,7 +955,11 @@ var EXTENSION_ALLOWLIST = [
|
|
|
955
955
|
"EXT_mesh_gpu_instancing",
|
|
956
956
|
"EXT_meshopt_compression"
|
|
957
957
|
];
|
|
958
|
-
var SUPPORTED_EXTENSIONS = [
|
|
958
|
+
var SUPPORTED_EXTENSIONS = [
|
|
959
|
+
...EXTENSION_ALLOWLIST,
|
|
960
|
+
"KHR_lights_punctual",
|
|
961
|
+
"KHR_texture_transform"
|
|
962
|
+
];
|
|
959
963
|
function checkExtensions(json) {
|
|
960
964
|
const required = json.extensionsRequired ?? [];
|
|
961
965
|
for (const ext of required) {
|
|
@@ -1812,9 +1816,9 @@ function deriveGltfSourceKeys(items) {
|
|
|
1812
1816
|
ok: false,
|
|
1813
1817
|
error: {
|
|
1814
1818
|
code: "missing-source-key",
|
|
1815
|
-
sourceIndices: missing,
|
|
1816
1819
|
expected: "every glTF output needs a stable semantic kind or name",
|
|
1817
|
-
hint: "publish a semantic kind/name key; do not use sourceIndex"
|
|
1820
|
+
hint: "publish a semantic kind/name key; do not use sourceIndex",
|
|
1821
|
+
detail: { sourceIndices: missing }
|
|
1818
1822
|
}
|
|
1819
1823
|
};
|
|
1820
1824
|
}
|
|
@@ -1822,19 +1826,34 @@ function deriveGltfSourceKeys(items) {
|
|
|
1822
1826
|
for (let index = 0; index < keys.length; index++) {
|
|
1823
1827
|
const key = keys[index];
|
|
1824
1828
|
if (key === void 0) continue;
|
|
1829
|
+
const current = items[index];
|
|
1830
|
+
if (current === void 0) continue;
|
|
1825
1831
|
const prior = seen.get(key);
|
|
1826
1832
|
if (prior !== void 0) {
|
|
1833
|
+
const entry = (item) => {
|
|
1834
|
+
const name = item.name?.trim();
|
|
1835
|
+
return {
|
|
1836
|
+
kind: item.kind.trim(),
|
|
1837
|
+
name: name === void 0 || name.length === 0 ? null : name,
|
|
1838
|
+
sourceIndex: item.sourceIndex
|
|
1839
|
+
};
|
|
1840
|
+
};
|
|
1841
|
+
const ambiguous = key === current.kind.trim();
|
|
1827
1842
|
return {
|
|
1828
1843
|
ok: false,
|
|
1829
1844
|
error: {
|
|
1830
|
-
code:
|
|
1831
|
-
sourceIndices: [prior, items[index]?.sourceIndex ?? 0],
|
|
1845
|
+
code: ambiguous ? "ambiguous-source-key" : "duplicate-source-key",
|
|
1832
1846
|
expected: "sourceKey values must be unique within one glTF package",
|
|
1833
|
-
hint:
|
|
1847
|
+
hint: ambiguous ? "name each otherwise anonymous output; do not use sourceIndex" : "rename duplicate outputs before publishing topology facts",
|
|
1848
|
+
detail: {
|
|
1849
|
+
key,
|
|
1850
|
+
sourceIndices: [prior.sourceIndex, current.sourceIndex],
|
|
1851
|
+
entries: [entry(prior), entry(current)]
|
|
1852
|
+
}
|
|
1834
1853
|
}
|
|
1835
1854
|
};
|
|
1836
1855
|
}
|
|
1837
|
-
seen.set(key,
|
|
1856
|
+
seen.set(key, current);
|
|
1838
1857
|
}
|
|
1839
1858
|
return { ok: true, keys, conflicts: [] };
|
|
1840
1859
|
}
|
|
@@ -2931,10 +2950,12 @@ function toAssetPack(doc, existingMeta, source) {
|
|
|
2931
2950
|
if (!reconciled.ok) {
|
|
2932
2951
|
return err({
|
|
2933
2952
|
code: "mesh-material-slot-topology-change",
|
|
2934
|
-
sourceIndices: reconciled.error.nextIndices,
|
|
2935
|
-
previousIndices: reconciled.error.previousIndices,
|
|
2936
2953
|
expected: `unambiguous material slot identity for mesh ${meshOutput.guid}`,
|
|
2937
|
-
hint: reconciled.error.hint
|
|
2954
|
+
hint: reconciled.error.hint,
|
|
2955
|
+
detail: {
|
|
2956
|
+
sourceIndices: reconciled.error.nextIndices,
|
|
2957
|
+
previousIndices: reconciled.error.previousIndices
|
|
2958
|
+
}
|
|
2938
2959
|
});
|
|
2939
2960
|
}
|
|
2940
2961
|
sourceOverrides[meshOutput.sourceKey] = {
|
|
@@ -2972,6 +2993,9 @@ function toAssetPack(doc, existingMeta, source) {
|
|
|
2972
2993
|
function isGlbBytes(source) {
|
|
2973
2994
|
return source.toLowerCase().endsWith(".glb");
|
|
2974
2995
|
}
|
|
2996
|
+
function publishesCatalogProduct(input) {
|
|
2997
|
+
return input.importSettings.geometry !== "procedural";
|
|
2998
|
+
}
|
|
2975
2999
|
function previousMaterialSlotTopology(ctx, meshSourceKey) {
|
|
2976
3000
|
if (meshSourceKey === void 0) return void 0;
|
|
2977
3001
|
const value = ctx.sourceOverrides?.[meshSourceKey]?.materialSlots;
|
|
@@ -3618,7 +3642,11 @@ async function importGltf(ctx, meshopt) {
|
|
|
3618
3642
|
return { ok: true, value: { assets: out, sourceDependencies: [] } };
|
|
3619
3643
|
}
|
|
3620
3644
|
function createGltfImporter(meshopt) {
|
|
3621
|
-
return {
|
|
3645
|
+
return {
|
|
3646
|
+
key: "gltf",
|
|
3647
|
+
import: (ctx) => importGltf(ctx),
|
|
3648
|
+
capabilities: { catalog: { publish: publishesCatalogProduct } }
|
|
3649
|
+
};
|
|
3622
3650
|
}
|
|
3623
3651
|
var gltfImporter = createGltfImporter();
|
|
3624
3652
|
|