@carbonenginejs/runtime-resource 0.7.0 → 0.8.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 (219) hide show
  1. package/FORMAT-PROVENANCE.md +155 -144
  2. package/LICENSE +21 -21
  3. package/NOTICE +29 -29
  4. package/README.md +11 -0
  5. package/dist/CjsMotherLode.js +1271 -1271
  6. package/dist/CjsResMan.js +3005 -3005
  7. package/dist/CjsResManQueue.js +214 -214
  8. package/dist/CjsResource.js +566 -566
  9. package/dist/CjsResourceSource.js +59 -59
  10. package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -153
  11. package/dist/format/CjsBlueReader.js +269 -269
  12. package/dist/format/CjsFormat.js +192 -192
  13. package/dist/format/CjsReader.js +18 -18
  14. package/dist/format/CjsResourceProbe.js +277 -277
  15. package/dist/format/payloadContract.js +173 -173
  16. package/dist/formats/black/CjsBlackFormat.js +278 -278
  17. package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -153
  18. package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -382
  19. package/dist/formats/black/core/CjsBlackReader.js +639 -639
  20. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -433
  21. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -4
  22. package/dist/formats/black/core/blackConstants.js +7 -7
  23. package/dist/formats/black/core/blackDefinitions.js +10 -10
  24. package/dist/formats/black/core/blackEnums.js +6 -6
  25. package/dist/formats/black/core/blackSchema.js +3 -3
  26. package/dist/formats/black/core/blackVersion.js +22 -22
  27. package/dist/formats/black/core/helpers.js +182 -182
  28. package/dist/formats/black/core/schema.js +4 -4
  29. package/dist/formats/black/index.js +2 -2
  30. package/dist/formats/bnk/CjsBnkFormat.js +125 -125
  31. package/dist/formats/bnk/core/graph.js +140 -140
  32. package/dist/formats/bnk/core/helpers.js +409 -409
  33. package/dist/formats/bnk/core/musicNodes.js +489 -489
  34. package/dist/formats/bnk/core/soundbanksInfo.js +246 -246
  35. package/dist/formats/bnk/index.js +2 -2
  36. package/dist/formats/cmf/CjsCmfFormat.js +497 -497
  37. package/dist/formats/cmf/core/binary.js +118 -118
  38. package/dist/formats/cmf/core/buffers.js +233 -233
  39. package/dist/formats/cmf/core/constants.js +47 -47
  40. package/dist/formats/cmf/core/gr2Anim.js +453 -453
  41. package/dist/formats/cmf/core/helpers.js +287 -287
  42. package/dist/formats/cmf/core/pack.js +276 -276
  43. package/dist/formats/cmf/core/schema.js +364 -364
  44. package/dist/formats/cmf/core/shared.js +268 -268
  45. package/dist/formats/cmf/core/writer.js +517 -517
  46. package/dist/formats/cmf/index.js +2 -2
  47. package/dist/formats/dds/CjsDdsFormat.js +193 -193
  48. package/dist/formats/dds/core/bc6h.js +288 -0
  49. package/dist/formats/dds/core/bc6h.js.map +1 -0
  50. package/dist/formats/dds/core/bc7.js +251 -0
  51. package/dist/formats/dds/core/bc7.js.map +1 -0
  52. package/dist/formats/dds/core/helpers.js +815 -812
  53. package/dist/formats/dds/core/helpers.js.map +1 -1
  54. package/dist/formats/dds/index.js +2 -2
  55. package/dist/formats/fbx/CjsFbxFormat.js +266 -266
  56. package/dist/formats/fbx/core/helpers.js +3901 -3901
  57. package/dist/formats/fbx/index.js +2 -2
  58. package/dist/formats/flac/CjsFlacFormat.js +87 -87
  59. package/dist/formats/flac/core/helpers.js +295 -295
  60. package/dist/formats/flac/index.js +2 -2
  61. package/dist/formats/gif/CjsGifFormat.js +87 -87
  62. package/dist/formats/gif/core/helpers.js +360 -360
  63. package/dist/formats/gif/index.js +2 -2
  64. package/dist/formats/gltf/CjsGltfFormat.js +290 -290
  65. package/dist/formats/gltf/core/helpers.js +292 -292
  66. package/dist/formats/gltf/core/json.js +79 -79
  67. package/dist/formats/gltf/core/parser.js +666 -666
  68. package/dist/formats/gltf/core/targets.js +163 -163
  69. package/dist/formats/gltf/index.js +2 -2
  70. package/dist/formats/index.js +23 -23
  71. package/dist/formats/jpeg/CjsJpegFormat.js +206 -206
  72. package/dist/formats/jpeg/core/helpers.js +350 -350
  73. package/dist/formats/jpeg/core/jpeg.js +377 -377
  74. package/dist/formats/jpeg/index.js +2 -2
  75. package/dist/formats/mp3/CjsMp3Format.js +192 -192
  76. package/dist/formats/mp3/core/helpers.js +338 -338
  77. package/dist/formats/mp3/index.js +2 -2
  78. package/dist/formats/mp4/CjsMp4Format.js +191 -191
  79. package/dist/formats/mp4/core/helpers.js +449 -449
  80. package/dist/formats/mp4/index.js +2 -2
  81. package/dist/formats/obj/CjsObjFormat.js +253 -253
  82. package/dist/formats/obj/core/helpers.js +573 -573
  83. package/dist/formats/obj/core/json.js +64 -64
  84. package/dist/formats/obj/core/parser.js +321 -321
  85. package/dist/formats/obj/index.js +2 -2
  86. package/dist/formats/ogg/CjsOggFormat.js +88 -88
  87. package/dist/formats/ogg/core/helpers.js +387 -387
  88. package/dist/formats/ogg/core/imdct.js +178 -178
  89. package/dist/formats/ogg/core/vorbis.js +999 -999
  90. package/dist/formats/ogg/index.js +2 -2
  91. package/dist/formats/png/CjsPngFormat.js +195 -195
  92. package/dist/formats/png/core/helpers.js +583 -583
  93. package/dist/formats/png/index.js +2 -2
  94. package/dist/formats/red/CjsRedFormat.js +261 -261
  95. package/dist/formats/red/core/CjsRedReader.js +194 -194
  96. package/dist/formats/red/core/blackDefinitions.js +3 -3
  97. package/dist/formats/red/core/helpers.js +139 -139
  98. package/dist/formats/red/core/redGraph.js +68 -68
  99. package/dist/formats/red/core/schema.js +4 -4
  100. package/dist/formats/red/index.js +2 -2
  101. package/dist/formats/stl/CjsStlFormat.js +365 -365
  102. package/dist/formats/stl/core/helpers.js +261 -261
  103. package/dist/formats/stl/core/json.js +51 -51
  104. package/dist/formats/stl/core/stl.js +629 -629
  105. package/dist/formats/stl/core/targets.js +163 -163
  106. package/dist/formats/stl/index.js +2 -2
  107. package/dist/formats/tga/CjsTgaFormat.js +192 -192
  108. package/dist/formats/tga/core/helpers.js +446 -446
  109. package/dist/formats/tga/index.js +2 -2
  110. package/dist/formats/wav/CjsWavFormat.js +192 -192
  111. package/dist/formats/wav/core/helpers.js +328 -328
  112. package/dist/formats/wav/index.js +2 -2
  113. package/dist/formats/webm/CjsWebmFormat.js +191 -191
  114. package/dist/formats/webm/core/helpers.js +537 -537
  115. package/dist/formats/webm/index.js +2 -2
  116. package/dist/formats/webp/CjsWebpFormat.js +86 -86
  117. package/dist/formats/webp/core/helpers.js +214 -214
  118. package/dist/formats/webp/index.js +2 -2
  119. package/dist/formats/wem/CjsWemFormat.js +241 -241
  120. package/dist/formats/wem/core/bitStream.js +259 -259
  121. package/dist/formats/wem/core/codebookLibrary.js +164 -164
  122. package/dist/formats/wem/core/helpers.js +417 -417
  123. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
  124. package/dist/formats/wem/core/ptadpcm.js +77 -77
  125. package/dist/formats/wem/core/resolve.js +121 -121
  126. package/dist/formats/wem/core/wemToOgg.js +485 -485
  127. package/dist/formats/wem/index.js +2 -2
  128. package/dist/formats/yaml/CjsYamlFormat.js +83 -83
  129. package/dist/formats/yaml/core/CjsYamlReader.js +305 -305
  130. package/dist/formats/yaml/core/helpers.js +160 -160
  131. package/dist/formats/yaml/index.js +2 -2
  132. package/dist/index.js +48 -48
  133. package/dist/resourcePath.js +18 -18
  134. package/dist/resourceStates.js +9 -9
  135. package/dist/resources/AudioGeometryResData.js +47 -47
  136. package/dist/resources/GStateBindingCallbackData.js +31 -31
  137. package/dist/resources/MeshDecalData.js +37 -37
  138. package/dist/resources/MeshDecalLodData.js +34 -34
  139. package/dist/resources/Tr2EffectRes.js +71 -71
  140. package/dist/resources/Tr2GrannyIntersectionResult.js +60 -60
  141. package/dist/resources/Tr2GrannyStateRes.js +44 -44
  142. package/dist/resources/Tr2ImageRes.js +114 -114
  143. package/dist/resources/Tr2LightProfileRes.js +40 -40
  144. package/dist/resources/Tr2MaterialArea.js +34 -34
  145. package/dist/resources/Tr2MaterialMesh.js +31 -31
  146. package/dist/resources/Tr2MaterialRes.js +34 -34
  147. package/dist/resources/Tr2ShaderPermutation.js +43 -43
  148. package/dist/resources/Tr2TextureLodManager.js +80 -80
  149. package/dist/resources/Tr2TextureLodUpdateRequest.js +37 -37
  150. package/dist/resources/Tr2TexturePackChannel.js +37 -37
  151. package/dist/resources/Tr2TexturePipeline.js +52 -52
  152. package/dist/resources/Tr2TexturePipelineParams.js +34 -34
  153. package/dist/resources/Tr2TexturePipelineStepCompress.js +40 -40
  154. package/dist/resources/Tr2TexturePipelineStepLimitSize.js +34 -34
  155. package/dist/resources/Tr2TexturePipelineStepLoad.js +31 -31
  156. package/dist/resources/Tr2TexturePipelineStepPack.js +43 -43
  157. package/dist/resources/TriGeometryRes.js +239 -216
  158. package/dist/resources/TriGeometryRes.js.map +1 -1
  159. package/dist/resources/TriGeometryResAreaData.js +59 -59
  160. package/dist/resources/TriGeometryResJointData.js +38 -38
  161. package/dist/resources/TriGeometryResLodData.js +88 -88
  162. package/dist/resources/TriGeometryResMeshData.js +63 -63
  163. package/dist/resources/TriGeometryResSkeletonData.js +34 -34
  164. package/dist/resources/TriGrannyRes.js +43 -43
  165. package/dist/resources/TriJointBinding.js +38 -38
  166. package/dist/resources/TriMorphTargetGeometryConstants.js +46 -46
  167. package/dist/resources/TriRtGeometryConstants.js +88 -88
  168. package/dist/resources/TriTextureRes.js +304 -304
  169. package/dist/resources/enums.js +18 -18
  170. package/dist/resources/resourceBoundary.js +47 -47
  171. package/dist/resources/texturePipelineBehavior.js +308 -308
  172. package/dist/texture/CjsTextureArrayRes.js +406 -406
  173. package/dist/texture/CjsTextureParameterProxy.js +133 -133
  174. package/format-notices/black/LICENSE +21 -21
  175. package/format-notices/black/NOTICE +47 -47
  176. package/format-notices/bnk/LICENSE +21 -21
  177. package/format-notices/bnk/NOTICE +20 -20
  178. package/format-notices/cmf/LICENSE +21 -21
  179. package/format-notices/cmf/NOTICE +36 -36
  180. package/format-notices/dds/LICENSE +21 -21
  181. package/format-notices/dds/NOTICE +14 -14
  182. package/format-notices/fbx/LICENSE +21 -21
  183. package/format-notices/fbx/NOTICE +14 -14
  184. package/format-notices/flac/LICENSE +21 -21
  185. package/format-notices/flac/NOTICE +14 -14
  186. package/format-notices/gif/LICENSE +21 -21
  187. package/format-notices/gif/NOTICE +14 -14
  188. package/format-notices/gltf/LICENSE +21 -21
  189. package/format-notices/gltf/NOTICE +27 -27
  190. package/format-notices/jpeg/LICENSE +21 -21
  191. package/format-notices/jpeg/NOTICE +14 -14
  192. package/format-notices/mp3/LICENSE +21 -21
  193. package/format-notices/mp3/NOTICE +14 -14
  194. package/format-notices/mp4/LICENSE +21 -21
  195. package/format-notices/mp4/NOTICE +14 -14
  196. package/format-notices/obj/LICENSE +21 -21
  197. package/format-notices/obj/NOTICE +26 -26
  198. package/format-notices/ogg/LICENSE +21 -21
  199. package/format-notices/ogg/NOTICE +28 -28
  200. package/format-notices/png/LICENSE +21 -21
  201. package/format-notices/png/NOTICE +14 -14
  202. package/format-notices/red/LICENSE +21 -21
  203. package/format-notices/red/NOTICE +31 -31
  204. package/format-notices/stl/LICENSE +21 -21
  205. package/format-notices/stl/NOTICE +21 -21
  206. package/format-notices/tga/LICENSE +21 -21
  207. package/format-notices/tga/NOTICE +14 -14
  208. package/format-notices/wav/LICENSE +21 -21
  209. package/format-notices/wav/NOTICE +14 -14
  210. package/format-notices/webm/LICENSE +21 -21
  211. package/format-notices/webm/NOTICE +14 -14
  212. package/format-notices/webp/LICENSE +21 -21
  213. package/format-notices/webp/NOTICE +14 -14
  214. package/format-notices/wem/LICENSE +57 -57
  215. package/format-notices/wem/NOTICE +33 -33
  216. package/format-notices/yaml/LICENSE +21 -21
  217. package/format-notices/yaml/NOTICE +44 -44
  218. package/package.json +2 -2
  219. package/resource-lifecycle.md +679 -679
@@ -1,163 +1,163 @@
1
- const CMF_CLASS_KEYS = Object.freeze(["Root", "Section", "Metadata", "MetadataEntry", "Mesh", "IndexGroup", "VertexElement", "MeshLod", "MeshArea", "LodMeshArea", "BoneBinding", "MorphTargets", "MorphTarget", "LodMorphTarget", "AudioOcclusionMesh", "Skeleton", "BoneMask", "BoneWeight", "Animation", "AnimationChannel", "AnimationCurve"]);
2
- function buildCmfFromShared(root) {
3
- return {
4
- version: 1,
5
- metadata: null,
6
- meshes: (root.meshes ?? []).map(mesh => buildMesh(mesh)),
7
- skeletons: [],
8
- animations: []
9
- };
10
- }
11
- function buildMesh(mesh) {
12
- const vertex = mesh.vertex ?? {},
13
- indices = mesh.indices ?? [],
14
- stride = estimateVertexStride(vertex),
15
- vertexCount = stride === 0 ? 0 : Math.floor((vertex.position ?? []).length / 3);
16
- return {
17
- name: mesh.name ?? "",
18
- decl: buildDecl(vertex),
19
- lods: [{
20
- vb: {
21
- index: 1,
22
- offset: 0,
23
- size: vertexCount * stride,
24
- stride
25
- },
26
- ib: {
27
- index: 2,
28
- offset: 0,
29
- size: totalIndexCount(indices) * bytesPerIndex(indices),
30
- stride: bytesPerIndex(indices)
31
- },
32
- areas: indices.map((group, index) => ({
33
- firstElement: firstTriangle(indices, index),
34
- elementCount: Math.floor((group.faces ?? []).length / 3)
35
- })),
36
- morphTargets: [],
37
- threshold: 0xffffffff,
38
- vertex,
39
- indices
40
- }],
41
- areas: indices.map(group => ({
42
- name: group.name ?? "",
43
- bounds: bounds(mesh),
44
- bones: [],
45
- affectedByBones: false,
46
- affectedByMorphTargets: false
47
- })),
48
- boneBindings: [],
49
- morphTargets: {
50
- decl: [],
51
- targets: []
52
- },
53
- uvDensities: [],
54
- bounds: bounds(mesh),
55
- audioOcclusionMesh: {
56
- vertices: [],
57
- indices: [],
58
- bounds: {
59
- min: [0, 0, 0],
60
- max: [0, 0, 0]
61
- }
62
- },
63
- topology: "TriangleList",
64
- skeleton: null,
65
- vertex,
66
- indices
67
- };
68
- }
69
- function buildDecl(vertex) {
70
- const decl = [];
71
- let offset = 0;
72
- for (const channel of [["position", "Position", 3], ["normal", "Normal", 3], ["tangent", "Tangent", 3], ["binormal", "Binormal", 3], ["texcoord0", "TexCoord", 2, 0], ["texcoord1", "TexCoord", 2, 1], ["color0", "Color", 4, 0], ["blendIndice", "BoneIndices", 4, 0, "UInt16"], ["blendWeight", "BoneWeights", 4, 0]]) {
73
- const [name, usage, elementCount, usageIndex = 0, type = "Float32"] = channel;
74
- if (!Array.isArray(vertex[name]) || vertex[name].length === 0) continue;
75
- decl.push({
76
- usage,
77
- usageIndex,
78
- type,
79
- elementCount,
80
- offset
81
- });
82
- offset += elementCount * elementTypeSize(type);
83
- }
84
- return decl;
85
- }
86
- function estimateVertexStride(vertex) {
87
- return buildDecl(vertex).reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);
88
- }
89
- function elementTypeSize(type) {
90
- return type === "Float32" ? 4 : type.includes("16") ? 2 : 1;
91
- }
92
- function totalIndexCount(indices) {
93
- return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);
94
- }
95
- function bytesPerIndex(indices) {
96
- return indices.some(group => group.bytesPerIndex === 4 || (group.faces ?? []).some(index => index > 0xffff)) ? 4 : 2;
97
- }
98
- function firstTriangle(indices, areaIndex) {
99
- let first = 0;
100
- for (let i = 0; i < areaIndex; i++) first += Math.floor((indices[i].faces ?? []).length / 3);
101
- return first;
102
- }
103
- function bounds(mesh) {
104
- return {
105
- min: mesh.minBounds ?? [0, 0, 0],
106
- max: mesh.maxBounds ?? [0, 0, 0]
107
- };
108
- }
109
- function hydrateCmf(root, classes, hydrationOptions = {}) {
110
- const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
111
- return hydrate("Root", {
112
- ...root,
113
- metadata: root.metadata ? hydrate("Metadata", root.metadata, hydrationClasses) : null,
114
- meshes: root.meshes.map(mesh => hydrateMesh(mesh, hydrationClasses)),
115
- skeletons: root.skeletons.map(skeleton => hydrate("Skeleton", skeleton, hydrationClasses)),
116
- animations: root.animations.map(animation => hydrate("Animation", animation, hydrationClasses))
117
- }, hydrationClasses, hydrationOptions);
118
- }
119
- function hydrateMesh(mesh, classes) {
120
- return hydrate("Mesh", {
121
- ...mesh,
122
- decl: mesh.decl.map(element => hydrate("VertexElement", element, classes)),
123
- lods: mesh.lods.map(lod => hydrate("MeshLod", {
124
- ...lod,
125
- areas: lod.areas.map(area => hydrate("LodMeshArea", area, classes)),
126
- morphTargets: lod.morphTargets.map(target => hydrate("LodMorphTarget", target, classes))
127
- }, classes)),
128
- areas: mesh.areas.map(area => hydrate("MeshArea", area, classes)),
129
- boneBindings: mesh.boneBindings.map(binding => hydrate("BoneBinding", binding, classes)),
130
- morphTargets: hydrate("MorphTargets", {
131
- decl: mesh.morphTargets.decl.map(element => hydrate("VertexElement", element, classes)),
132
- targets: mesh.morphTargets.targets.map(target => hydrate("MorphTarget", target, classes))
133
- }, classes),
134
- audioOcclusionMesh: hydrate("AudioOcclusionMesh", mesh.audioOcclusionMesh, classes)
135
- }, classes);
136
- }
137
- function hydrate(type, fields, classes, hydrationOptions = {}) {
138
- const Class = classes?.[type];
139
- const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};
140
- return Class ? populate(new Class(), fields, options) : fields;
141
- }
142
- function populate(instance, fields, hydrationOptions = {}) {
143
- if (!instance || typeof instance.SetValues !== "function") {
144
- throw new TypeError("CjsGltfFormat CMF class population requires classes to implement SetValues(values)");
145
- }
146
- instance.SetValues(fields, {
147
- ...hydrationOptions,
148
- skipUpdate: true,
149
- skipEvents: true
150
- });
151
- return instance;
152
- }
153
- function createHydrationClasses(classes, hydrationOptions) {
154
- const map = Object.create(classes || null);
155
- Object.defineProperty(map, "__hydrationOptions", {
156
- value: hydrationOptions,
157
- enumerable: false
158
- });
159
- return map;
160
- }
161
-
162
- export { CMF_CLASS_KEYS, buildCmfFromShared, hydrateCmf };
163
- //# sourceMappingURL=targets.js.map
1
+ const CMF_CLASS_KEYS = Object.freeze(["Root", "Section", "Metadata", "MetadataEntry", "Mesh", "IndexGroup", "VertexElement", "MeshLod", "MeshArea", "LodMeshArea", "BoneBinding", "MorphTargets", "MorphTarget", "LodMorphTarget", "AudioOcclusionMesh", "Skeleton", "BoneMask", "BoneWeight", "Animation", "AnimationChannel", "AnimationCurve"]);
2
+ function buildCmfFromShared(root) {
3
+ return {
4
+ version: 1,
5
+ metadata: null,
6
+ meshes: (root.meshes ?? []).map(mesh => buildMesh(mesh)),
7
+ skeletons: [],
8
+ animations: []
9
+ };
10
+ }
11
+ function buildMesh(mesh) {
12
+ const vertex = mesh.vertex ?? {},
13
+ indices = mesh.indices ?? [],
14
+ stride = estimateVertexStride(vertex),
15
+ vertexCount = stride === 0 ? 0 : Math.floor((vertex.position ?? []).length / 3);
16
+ return {
17
+ name: mesh.name ?? "",
18
+ decl: buildDecl(vertex),
19
+ lods: [{
20
+ vb: {
21
+ index: 1,
22
+ offset: 0,
23
+ size: vertexCount * stride,
24
+ stride
25
+ },
26
+ ib: {
27
+ index: 2,
28
+ offset: 0,
29
+ size: totalIndexCount(indices) * bytesPerIndex(indices),
30
+ stride: bytesPerIndex(indices)
31
+ },
32
+ areas: indices.map((group, index) => ({
33
+ firstElement: firstTriangle(indices, index),
34
+ elementCount: Math.floor((group.faces ?? []).length / 3)
35
+ })),
36
+ morphTargets: [],
37
+ threshold: 0xffffffff,
38
+ vertex,
39
+ indices
40
+ }],
41
+ areas: indices.map(group => ({
42
+ name: group.name ?? "",
43
+ bounds: bounds(mesh),
44
+ bones: [],
45
+ affectedByBones: false,
46
+ affectedByMorphTargets: false
47
+ })),
48
+ boneBindings: [],
49
+ morphTargets: {
50
+ decl: [],
51
+ targets: []
52
+ },
53
+ uvDensities: [],
54
+ bounds: bounds(mesh),
55
+ audioOcclusionMesh: {
56
+ vertices: [],
57
+ indices: [],
58
+ bounds: {
59
+ min: [0, 0, 0],
60
+ max: [0, 0, 0]
61
+ }
62
+ },
63
+ topology: "TriangleList",
64
+ skeleton: null,
65
+ vertex,
66
+ indices
67
+ };
68
+ }
69
+ function buildDecl(vertex) {
70
+ const decl = [];
71
+ let offset = 0;
72
+ for (const channel of [["position", "Position", 3], ["normal", "Normal", 3], ["tangent", "Tangent", 3], ["binormal", "Binormal", 3], ["texcoord0", "TexCoord", 2, 0], ["texcoord1", "TexCoord", 2, 1], ["color0", "Color", 4, 0], ["blendIndice", "BoneIndices", 4, 0, "UInt16"], ["blendWeight", "BoneWeights", 4, 0]]) {
73
+ const [name, usage, elementCount, usageIndex = 0, type = "Float32"] = channel;
74
+ if (!Array.isArray(vertex[name]) || vertex[name].length === 0) continue;
75
+ decl.push({
76
+ usage,
77
+ usageIndex,
78
+ type,
79
+ elementCount,
80
+ offset
81
+ });
82
+ offset += elementCount * elementTypeSize(type);
83
+ }
84
+ return decl;
85
+ }
86
+ function estimateVertexStride(vertex) {
87
+ return buildDecl(vertex).reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);
88
+ }
89
+ function elementTypeSize(type) {
90
+ return type === "Float32" ? 4 : type.includes("16") ? 2 : 1;
91
+ }
92
+ function totalIndexCount(indices) {
93
+ return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);
94
+ }
95
+ function bytesPerIndex(indices) {
96
+ return indices.some(group => group.bytesPerIndex === 4 || (group.faces ?? []).some(index => index > 0xffff)) ? 4 : 2;
97
+ }
98
+ function firstTriangle(indices, areaIndex) {
99
+ let first = 0;
100
+ for (let i = 0; i < areaIndex; i++) first += Math.floor((indices[i].faces ?? []).length / 3);
101
+ return first;
102
+ }
103
+ function bounds(mesh) {
104
+ return {
105
+ min: mesh.minBounds ?? [0, 0, 0],
106
+ max: mesh.maxBounds ?? [0, 0, 0]
107
+ };
108
+ }
109
+ function hydrateCmf(root, classes, hydrationOptions = {}) {
110
+ const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
111
+ return hydrate("Root", {
112
+ ...root,
113
+ metadata: root.metadata ? hydrate("Metadata", root.metadata, hydrationClasses) : null,
114
+ meshes: root.meshes.map(mesh => hydrateMesh(mesh, hydrationClasses)),
115
+ skeletons: root.skeletons.map(skeleton => hydrate("Skeleton", skeleton, hydrationClasses)),
116
+ animations: root.animations.map(animation => hydrate("Animation", animation, hydrationClasses))
117
+ }, hydrationClasses, hydrationOptions);
118
+ }
119
+ function hydrateMesh(mesh, classes) {
120
+ return hydrate("Mesh", {
121
+ ...mesh,
122
+ decl: mesh.decl.map(element => hydrate("VertexElement", element, classes)),
123
+ lods: mesh.lods.map(lod => hydrate("MeshLod", {
124
+ ...lod,
125
+ areas: lod.areas.map(area => hydrate("LodMeshArea", area, classes)),
126
+ morphTargets: lod.morphTargets.map(target => hydrate("LodMorphTarget", target, classes))
127
+ }, classes)),
128
+ areas: mesh.areas.map(area => hydrate("MeshArea", area, classes)),
129
+ boneBindings: mesh.boneBindings.map(binding => hydrate("BoneBinding", binding, classes)),
130
+ morphTargets: hydrate("MorphTargets", {
131
+ decl: mesh.morphTargets.decl.map(element => hydrate("VertexElement", element, classes)),
132
+ targets: mesh.morphTargets.targets.map(target => hydrate("MorphTarget", target, classes))
133
+ }, classes),
134
+ audioOcclusionMesh: hydrate("AudioOcclusionMesh", mesh.audioOcclusionMesh, classes)
135
+ }, classes);
136
+ }
137
+ function hydrate(type, fields, classes, hydrationOptions = {}) {
138
+ const Class = classes?.[type];
139
+ const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};
140
+ return Class ? populate(new Class(), fields, options) : fields;
141
+ }
142
+ function populate(instance, fields, hydrationOptions = {}) {
143
+ if (!instance || typeof instance.SetValues !== "function") {
144
+ throw new TypeError("CjsGltfFormat CMF class population requires classes to implement SetValues(values)");
145
+ }
146
+ instance.SetValues(fields, {
147
+ ...hydrationOptions,
148
+ skipUpdate: true,
149
+ skipEvents: true
150
+ });
151
+ return instance;
152
+ }
153
+ function createHydrationClasses(classes, hydrationOptions) {
154
+ const map = Object.create(classes || null);
155
+ Object.defineProperty(map, "__hydrationOptions", {
156
+ value: hydrationOptions,
157
+ enumerable: false
158
+ });
159
+ return map;
160
+ }
161
+
162
+ export { CMF_CLASS_KEYS, buildCmfFromShared, hydrateCmf };
163
+ //# sourceMappingURL=targets.js.map
@@ -1,2 +1,2 @@
1
- export { CjsGltfFormat, CjsGltfFormat as default } from './CjsGltfFormat.js';
2
- //# sourceMappingURL=index.js.map
1
+ export { CjsGltfFormat, CjsGltfFormat as default } from './CjsGltfFormat.js';
2
+ //# sourceMappingURL=index.js.map
@@ -1,23 +1,23 @@
1
- export { CjsBlackFormat } from './black/CjsBlackFormat.js';
2
- export { CjsBnkFormat } from './bnk/CjsBnkFormat.js';
3
- export { CjsCmfFormat } from './cmf/CjsCmfFormat.js';
4
- export { CjsDdsFormat } from './dds/CjsDdsFormat.js';
5
- export { CjsFbxFormat } from './fbx/CjsFbxFormat.js';
6
- export { CjsFlacFormat } from './flac/CjsFlacFormat.js';
7
- export { CjsGifFormat } from './gif/CjsGifFormat.js';
8
- export { CjsGltfFormat } from './gltf/CjsGltfFormat.js';
9
- export { CjsJpegFormat } from './jpeg/CjsJpegFormat.js';
10
- export { CjsMp3Format } from './mp3/CjsMp3Format.js';
11
- export { CjsMp4Format } from './mp4/CjsMp4Format.js';
12
- export { CjsObjFormat } from './obj/CjsObjFormat.js';
13
- export { CjsOggFormat } from './ogg/CjsOggFormat.js';
14
- export { CjsPngFormat } from './png/CjsPngFormat.js';
15
- export { CjsRedFormat } from './red/CjsRedFormat.js';
16
- export { CjsStlFormat } from './stl/CjsStlFormat.js';
17
- export { CjsTgaFormat } from './tga/CjsTgaFormat.js';
18
- export { CjsWavFormat } from './wav/CjsWavFormat.js';
19
- export { CjsWebmFormat } from './webm/CjsWebmFormat.js';
20
- export { CjsWebpFormat } from './webp/CjsWebpFormat.js';
21
- export { CjsWemFormat } from './wem/CjsWemFormat.js';
22
- export { CjsYamlFormat } from './yaml/CjsYamlFormat.js';
23
- //# sourceMappingURL=index.js.map
1
+ export { CjsBlackFormat } from './black/CjsBlackFormat.js';
2
+ export { CjsBnkFormat } from './bnk/CjsBnkFormat.js';
3
+ export { CjsCmfFormat } from './cmf/CjsCmfFormat.js';
4
+ export { CjsDdsFormat } from './dds/CjsDdsFormat.js';
5
+ export { CjsFbxFormat } from './fbx/CjsFbxFormat.js';
6
+ export { CjsFlacFormat } from './flac/CjsFlacFormat.js';
7
+ export { CjsGifFormat } from './gif/CjsGifFormat.js';
8
+ export { CjsGltfFormat } from './gltf/CjsGltfFormat.js';
9
+ export { CjsJpegFormat } from './jpeg/CjsJpegFormat.js';
10
+ export { CjsMp3Format } from './mp3/CjsMp3Format.js';
11
+ export { CjsMp4Format } from './mp4/CjsMp4Format.js';
12
+ export { CjsObjFormat } from './obj/CjsObjFormat.js';
13
+ export { CjsOggFormat } from './ogg/CjsOggFormat.js';
14
+ export { CjsPngFormat } from './png/CjsPngFormat.js';
15
+ export { CjsRedFormat } from './red/CjsRedFormat.js';
16
+ export { CjsStlFormat } from './stl/CjsStlFormat.js';
17
+ export { CjsTgaFormat } from './tga/CjsTgaFormat.js';
18
+ export { CjsWavFormat } from './wav/CjsWavFormat.js';
19
+ export { CjsWebmFormat } from './webm/CjsWebmFormat.js';
20
+ export { CjsWebpFormat } from './webp/CjsWebpFormat.js';
21
+ export { CjsWemFormat } from './wem/CjsWemFormat.js';
22
+ export { CjsYamlFormat } from './yaml/CjsYamlFormat.js';
23
+ //# sourceMappingURL=index.js.map