@carbonenginejs/runtime-resource 0.1.0 → 0.7.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 (186) hide show
  1. package/FORMAT-PROVENANCE.md +14 -5
  2. package/README.md +537 -241
  3. package/dist/CjsMotherLode.js +1244 -29
  4. package/dist/CjsMotherLode.js.map +1 -1
  5. package/dist/CjsResMan.js +2537 -272
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResource.js +218 -18
  8. package/dist/CjsResource.js.map +1 -1
  9. package/dist/format/CjsBlueReader.js +269 -0
  10. package/dist/format/CjsBlueReader.js.map +1 -0
  11. package/dist/format/CjsFormat.js +44 -30
  12. package/dist/format/CjsFormat.js.map +1 -1
  13. package/dist/format/CjsReader.js +18 -0
  14. package/dist/format/CjsReader.js.map +1 -0
  15. package/dist/format/CjsResourceProbe.js +12 -4
  16. package/dist/format/CjsResourceProbe.js.map +1 -1
  17. package/dist/formats/black/CjsBlackFormat.js +12 -6
  18. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  19. package/dist/formats/black/core/CjsBlackReader.js +27 -148
  20. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  21. package/dist/formats/bnk/CjsBnkFormat.js +140 -147
  22. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  23. package/dist/formats/bnk/core/graph.js +140 -0
  24. package/dist/formats/bnk/core/graph.js.map +1 -0
  25. package/dist/formats/bnk/core/helpers.js +58 -3
  26. package/dist/formats/bnk/core/helpers.js.map +1 -1
  27. package/dist/formats/bnk/core/musicNodes.js +521 -0
  28. package/dist/formats/bnk/core/musicNodes.js.map +1 -0
  29. package/dist/formats/bnk/index.js +0 -1
  30. package/dist/formats/bnk/index.js.map +1 -1
  31. package/dist/formats/cmf/CjsCmfFormat.js +14 -8
  32. package/dist/formats/cmf/CjsCmfFormat.js.map +1 -1
  33. package/dist/formats/dds/CjsDdsFormat.js +12 -6
  34. package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
  35. package/dist/formats/fbx/CjsFbxFormat.js +12 -6
  36. package/dist/formats/fbx/CjsFbxFormat.js.map +1 -1
  37. package/dist/formats/flac/CjsFlacFormat.js +10 -4
  38. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  39. package/dist/formats/gif/CjsGifFormat.js +11 -5
  40. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  41. package/dist/formats/gltf/CjsGltfFormat.js +12 -6
  42. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
  43. package/dist/formats/jpeg/CjsJpegFormat.js +11 -5
  44. package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
  45. package/dist/formats/mp3/CjsMp3Format.js +11 -5
  46. package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
  47. package/dist/formats/mp4/CjsMp4Format.js +10 -4
  48. package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
  49. package/dist/formats/obj/CjsObjFormat.js +12 -6
  50. package/dist/formats/obj/CjsObjFormat.js.map +1 -1
  51. package/dist/formats/ogg/CjsOggFormat.js +9 -3
  52. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  53. package/dist/formats/png/CjsPngFormat.js +11 -5
  54. package/dist/formats/png/CjsPngFormat.js.map +1 -1
  55. package/dist/formats/red/CjsRedFormat.js +19 -5
  56. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  57. package/dist/formats/red/core/CjsRedReader.js +63 -70
  58. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  59. package/dist/formats/red/core/helpers.js +3 -0
  60. package/dist/formats/red/core/helpers.js.map +1 -1
  61. package/dist/formats/stl/CjsStlFormat.js +77 -16
  62. package/dist/formats/stl/CjsStlFormat.js.map +1 -1
  63. package/dist/formats/stl/core/helpers.js +4 -0
  64. package/dist/formats/stl/core/helpers.js.map +1 -1
  65. package/dist/formats/stl/core/stl.js +100 -15
  66. package/dist/formats/stl/core/stl.js.map +1 -1
  67. package/dist/formats/tga/CjsTgaFormat.js +11 -5
  68. package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
  69. package/dist/formats/wav/CjsWavFormat.js +11 -5
  70. package/dist/formats/wav/CjsWavFormat.js.map +1 -1
  71. package/dist/formats/webm/CjsWebmFormat.js +10 -4
  72. package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
  73. package/dist/formats/webp/CjsWebpFormat.js +9 -3
  74. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  75. package/dist/formats/wem/CjsWemFormat.js +50 -6
  76. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  77. package/dist/formats/wem/core/helpers.js +84 -3
  78. package/dist/formats/wem/core/helpers.js.map +1 -1
  79. package/dist/formats/wem/core/ptadpcm.js +77 -0
  80. package/dist/formats/wem/core/ptadpcm.js.map +1 -0
  81. package/dist/formats/wem/core/resolve.js +121 -0
  82. package/dist/formats/wem/core/resolve.js.map +1 -0
  83. package/dist/formats/yaml/CjsYamlFormat.js +11 -5
  84. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  85. package/dist/formats/yaml/core/CjsYamlReader.js +3 -2
  86. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  87. package/dist/index.js +28 -32
  88. package/dist/index.js.map +1 -1
  89. package/dist/{generated/resources → resources}/AudioGeometryResData.js +2 -2
  90. package/dist/resources/AudioGeometryResData.js.map +1 -0
  91. package/dist/{generated/resources → resources}/GStateBindingCallbackData.js +2 -2
  92. package/dist/resources/GStateBindingCallbackData.js.map +1 -0
  93. package/dist/{generated/resources → resources}/MeshDecalData.js +2 -2
  94. package/dist/resources/MeshDecalData.js.map +1 -0
  95. package/dist/{generated/resources → resources}/MeshDecalLodData.js +2 -2
  96. package/dist/resources/MeshDecalLodData.js.map +1 -0
  97. package/dist/resources/Tr2GrannyIntersectionResult.js +60 -0
  98. package/dist/resources/Tr2GrannyIntersectionResult.js.map +1 -0
  99. package/dist/{generated/resources → resources}/Tr2MaterialArea.js +2 -2
  100. package/dist/resources/Tr2MaterialArea.js.map +1 -0
  101. package/dist/{generated/resources → resources}/Tr2MaterialMesh.js +2 -2
  102. package/dist/resources/Tr2MaterialMesh.js.map +1 -0
  103. package/dist/{generated/resources → resources}/Tr2MaterialRes.js +2 -2
  104. package/dist/resources/Tr2MaterialRes.js.map +1 -0
  105. package/dist/{generated/resources → resources}/Tr2ShaderPermutation.js +2 -2
  106. package/dist/resources/Tr2ShaderPermutation.js.map +1 -0
  107. package/dist/{generated/resources → resources}/Tr2TextureLodManager.js +50 -10
  108. package/dist/resources/Tr2TextureLodManager.js.map +1 -0
  109. package/dist/{generated/resources → resources}/Tr2TextureLodUpdateRequest.js +2 -2
  110. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
  111. package/dist/{generated/resources → resources}/Tr2TexturePackChannel.js +2 -2
  112. package/dist/resources/Tr2TexturePackChannel.js.map +1 -0
  113. package/dist/resources/Tr2TexturePipeline.js +68 -0
  114. package/dist/resources/Tr2TexturePipeline.js.map +1 -0
  115. package/dist/{generated/resources → resources}/Tr2TexturePipelineParams.js +2 -2
  116. package/dist/resources/Tr2TexturePipelineParams.js.map +1 -0
  117. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepCompress.js +3 -3
  118. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
  119. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepLimitSize.js +2 -2
  120. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  121. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepLoad.js +2 -2
  122. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
  123. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepPack.js +3 -3
  124. package/dist/resources/Tr2TexturePipelineStepPack.js.map +1 -0
  125. package/dist/{generated/resources → resources}/TriGeometryResAreaData.js +2 -2
  126. package/dist/resources/TriGeometryResAreaData.js.map +1 -0
  127. package/dist/{generated/resources → resources}/TriGeometryResJointData.js +2 -2
  128. package/dist/resources/TriGeometryResJointData.js.map +1 -0
  129. package/dist/{generated/resources → resources}/TriGeometryResLodData.js +2 -2
  130. package/dist/resources/TriGeometryResLodData.js.map +1 -0
  131. package/dist/{generated/resources → resources}/TriGeometryResMeshData.js +2 -2
  132. package/dist/resources/TriGeometryResMeshData.js.map +1 -0
  133. package/dist/{generated/resources → resources}/TriGeometryResSkeletonData.js +2 -2
  134. package/dist/resources/TriGeometryResSkeletonData.js.map +1 -0
  135. package/dist/{generated/resources → resources}/TriJointBinding.js +2 -2
  136. package/dist/resources/TriJointBinding.js.map +1 -0
  137. package/dist/{generated/resources → resources}/TriMorphTargetGeometryConstants.js +2 -2
  138. package/dist/resources/TriMorphTargetGeometryConstants.js.map +1 -0
  139. package/dist/{generated/resources → resources}/TriRtGeometryConstants.js +2 -2
  140. package/dist/resources/TriRtGeometryConstants.js.map +1 -0
  141. package/dist/resources/enums.js.map +1 -0
  142. package/dist/resources/texturePipelineBehavior.js +320 -0
  143. package/dist/resources/texturePipelineBehavior.js.map +1 -0
  144. package/format-notices/bnk/NOTICE +7 -4
  145. package/package.json +51 -51
  146. package/resource-lifecycle.md +262 -70
  147. package/dist/generated/resources/AudioGeometryResData.js.map +0 -1
  148. package/dist/generated/resources/CmfVertexReader.js +0 -46
  149. package/dist/generated/resources/CmfVertexReader.js.map +0 -1
  150. package/dist/generated/resources/GStateBindingCallbackData.js.map +0 -1
  151. package/dist/generated/resources/MeshDecalData.js.map +0 -1
  152. package/dist/generated/resources/MeshDecalLodData.js.map +0 -1
  153. package/dist/generated/resources/Tr2AsyncSave.js +0 -46
  154. package/dist/generated/resources/Tr2AsyncSave.js.map +0 -1
  155. package/dist/generated/resources/Tr2CmfContents.js +0 -37
  156. package/dist/generated/resources/Tr2CmfContents.js.map +0 -1
  157. package/dist/generated/resources/Tr2GrannyIntersectionResult.js +0 -58
  158. package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  159. package/dist/generated/resources/Tr2LoadPrepareFence.js +0 -37
  160. package/dist/generated/resources/Tr2LoadPrepareFence.js.map +0 -1
  161. package/dist/generated/resources/Tr2MaterialArea.js.map +0 -1
  162. package/dist/generated/resources/Tr2MaterialMesh.js.map +0 -1
  163. package/dist/generated/resources/Tr2MaterialRes.js.map +0 -1
  164. package/dist/generated/resources/Tr2ShaderPermutation.js.map +0 -1
  165. package/dist/generated/resources/Tr2TextureLodManager.js.map +0 -1
  166. package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  167. package/dist/generated/resources/Tr2TexturePackChannel.js.map +0 -1
  168. package/dist/generated/resources/Tr2TexturePipeline.js +0 -44
  169. package/dist/generated/resources/Tr2TexturePipeline.js.map +0 -1
  170. package/dist/generated/resources/Tr2TexturePipelineParams.js.map +0 -1
  171. package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  172. package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  173. package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  174. package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  175. package/dist/generated/resources/TriGeometryResAreaData.js.map +0 -1
  176. package/dist/generated/resources/TriGeometryResJointData.js.map +0 -1
  177. package/dist/generated/resources/TriGeometryResLodData.js.map +0 -1
  178. package/dist/generated/resources/TriGeometryResMeshData.js.map +0 -1
  179. package/dist/generated/resources/TriGeometryResSkeletonData.js.map +0 -1
  180. package/dist/generated/resources/TriJointBinding.js.map +0 -1
  181. package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  182. package/dist/generated/resources/TriRtGeometryConstants.js.map +0 -1
  183. package/dist/generated/resources/enums.js.map +0 -1
  184. package/dist/generated/resources/index.js +0 -32
  185. package/dist/generated/resources/index.js.map +0 -1
  186. /package/dist/{generated/resources → resources}/enums.js +0 -0
@@ -48,13 +48,16 @@ Current state meanings:
48
48
 
49
49
  - `EMPTY`: resource identity exists, but no payload has been read.
50
50
  - `REQUESTED`: the resource is waiting on a queued or shared source load.
51
- - `LOADING`: source bytes are available and staged object preparation is active.
51
+ - `LOADING`: source bytes are available and CPU reader/format work is active.
52
52
  - `LOADED`: CPU payload or hydrated object graph exists.
53
53
  - `PREPARING`: an engine adapter is realizing backend-owned resources.
54
54
  - `PREPARED`: preparation completed successfully and the resource is usable.
55
- - `FAILED`: load or prepare failed.
55
+ - `FAILED`: CPU loading, conversion, validation, or publication failed before a valid payload was published.
56
56
  - `UNLOADED`: resource payload was released.
57
- - `PURGED`: resource was purged from active ownership.
57
+ - `PURGED`: an inactivity or recorded-byte cache policy evicted the resource
58
+ from active ownership. Ordinary replacement, `Delete()`, `Clear()`,
59
+ `ClearCached()`, and shutdown clean owned payloads/adapters but preserve the
60
+ detached handle's last valid state.
58
61
 
59
62
  `CjsResMan.LoadObject()` now queues one deduplicated background source operation
60
63
  per source/path and limits active source operations with `maxConcurrentLoads`.
@@ -62,26 +65,59 @@ After bytes arrive, object construction is split into separate main-queue
62
65
  items:
63
66
 
64
67
  ```text
65
- read -> registered/requested prepare stage 1 -> stage 2 -> ... -> publish
68
+ reader/format conversion -> publish
66
69
  ```
67
70
 
68
71
  `maxPrepareTime` limits seconds spent starting synchronous main-queue work in
69
72
  one pump, and `maxPrepareItemsPerTick` can add a count limit. Promise-returning
70
- stages remain in flight without blocking the JavaScript event loop. Publication
71
- moves the resource to `LOADED`, then stops. It must not mark the resource
72
- `PREPARED` or `GOOD` unless an explicitly supplied preparation stage has
73
- actually completed backend realization and marked it accordingly.
74
-
75
- Named pipelines are registration/configuration, not capability policy.
76
- `CjsLibrary` or a direct caller determines the required output and selects a
77
- registered `preparePipeline`; `CjsResMan` executes the supplied stages without
78
- probing device support. Per-request `prepareStages` are explicit overrides.
73
+ format work remains in flight without blocking the JavaScript event loop.
74
+ Publication moves the resource to `LOADED`, then stops. ResMan never performs
75
+ backend realization or marks the resource `PREPARED`/`GOOD`.
76
+
77
+ Format classes own conversion to the promised CPU output. Backend realization
78
+ is a separate explicit engine operation after publication. A realization
79
+ failure destroys its candidate and returns a current resource to `LOADED`
80
+ without discarding the valid CPU payload; an existing usable adapter may remain
81
+ `PREPARED`.
82
+
83
+ Every requested handle uses a normalized source path plus one promised output
84
+ tag. `variant` is explicit; `emit`, `requirement`, and `payload` are fallbacks.
85
+ The selected constructor, reader, and format defaults/options are setup-time
86
+ execution details, not MotherLode identity. A changed
87
+ registration does not create a hidden second resource; reset the affected
88
+ identity or create a new manager. A changed output contract uses a new tag.
89
+
90
+ Output matching is case-insensitive, then the canonical declaration spelling
91
+ is passed to the format reader. Direct object loaders expose only their
92
+ unforced default; multiple named outputs belong on a format class. Unsupported
93
+ output is rejected before a MotherLode cache hit can return.
94
+
95
+ Releasing an unlocked CPU payload keeps the lightweight handle and a small
96
+ reconstruction request containing its path/output and source provenance. Its
97
+ promised-output fields and retained source provenance remain pinned during
98
+ `Ready()`/`GetObject()` so another output/source cannot silently replace the
99
+ old identity. `Ready()` may re-read and rebuild it through current
100
+ registrations. Queries, lease renewal, sweeps, and adapter cleanup never
101
+ trigger that read. Engine adapters own their backend allocations and may
102
+ release those independently.
79
103
 
80
104
  The Blue method names remain the public queue vocabulary: `AddToQueue`,
81
105
  `CancelFromQueue`, `GetNextIdForQueue`, `PumpMainThreadQueue`, `PauseQueue`,
82
106
  `ResumeQueue`, `GetPendingLoads`, and `GetPendingPrepares`. `Update()`/`Tick()`
83
- pump queues. `Wait()` provides a method-level fence until both queues become
84
- idle, rather than introducing a runtime fence resource.
107
+ pump queues. `Wait()` snapshots queued resource-operation roots and already
108
+ submitted low-level queue tasks before its first await. Captured roots remain
109
+ open through publication enqueued after an asynchronous read, failure, and
110
+ lock release; later unrelated roots/tasks are excluded. Failure and queued
111
+ cancellation cross the fence without making `Wait()` reject.
112
+
113
+ The default wait pumps only the two queues, never automatic retention sweeps,
114
+ and honors existing pause state and budgets. `{ pump: false }` requires an
115
+ external driver. A standalone canonical `PrepareResourceObjectQueued()` call
116
+ opens a queued root. Direct `LoadResourceObject()`, direct
117
+ `PrepareResourceObject()`, and standalone source/format reads bypass both
118
+ queues and are outside the fence. They are still tracked as active mutations
119
+ so synchronous MotherLode replacement cannot detach them. `WaitUrgent()`
120
+ remains open until real per-item priority and urgent membership exist.
85
121
 
86
122
  ## CjsLibrary resource-path workflow
87
123
 
@@ -98,7 +134,7 @@ Application / runtime object
98
134
  | |
99
135
  | - starts from registered default behavior |
100
136
  | - considers registered capability reports |
101
- | - chooses requirement / emit / pipeline |
137
+ | - chooses requirement / emit / format |
102
138
  | - applies explicit request overrides |
103
139
  +-----------------------------------------------+
104
140
  |
@@ -107,13 +143,13 @@ Application / runtime object
107
143
  +-----------------------------------------------+
108
144
  | CjsResMan.GetResource(path, options) |
109
145
  | |
110
- | - normalize path and extension |
111
- | - calculate requested resource variant |
146
+ | - normalize source path and extension |
147
+ | - resolve the promised output tag |
112
148
  +-----------------------------------------------+
113
149
  |
114
150
  v
115
151
  +-----------------------------------------------+
116
- | CjsMotherLode.Lookup(path, variant) |
152
+ | CjsMotherLode.Lookup(resolved key) |
117
153
  +-----------------------------------------------+
118
154
  |
119
155
  +--- cache hit ------------------------------+
@@ -152,28 +188,20 @@ Application / runtime object
152
188
  +-----------------------------------------------+
153
189
  | Read stage |
154
190
  | |
155
- | registered object loader for extension? |
191
+ | current object loader for extension? |
156
192
  | yes -> call it |
157
- | no -> resolve registered format by |
158
- | extension + request options |
193
+ | no -> resolve registered formats by |
194
+ | bytes + request options |
159
195
  +-----------------------------------------------+
160
196
  |
161
197
  | plain payload / hydrated object
162
198
  v
163
199
  +-----------------------------------------------+
164
- | Optional configured prepare stages |
165
- | |
166
- | stage 1 -> stage 2 -> ... |
167
- | examples: normalize, convert, adapt |
168
- +-----------------------------------------------+
169
- |
170
- | no configured stages skips this box
171
- v
172
- +-----------------------------------------------+
173
200
  | Publish stage |
174
201
  | |
175
202
  | semantic resource -> SetPayload(payload) |
176
- | generic resource -> resource.object = value |
203
+ | generic resource -> SetPayload(value) |
204
+ | object aliases payload |
177
205
  +-----------------------------------------------+
178
206
  |
179
207
  +--- validation failure --------------------+
@@ -189,20 +217,22 @@ Application / runtime object
189
217
  the built CjsResource/object
190
218
  ```
191
219
 
192
- Device realization is a separate continuation selected outside ResMan:
220
+ Device realization is a separate continuation selected outside ResMan. It can
221
+ run again after adapter eviction or device loss while the CPU payload remains
222
+ resident:
193
223
 
194
224
  ```text
195
225
  CjsResource LOADED
196
226
  |
197
227
  | selected engine adapter
198
228
  v
199
- PREPARING -> attach opaque adapter resource -> PREPARED
200
- ```
201
-
202
- With no named or direct prepare stages, the main queue reduces to:
229
+ PREPARING
230
+ |
231
+ | create candidate -> verify current target -> synchronous attach
232
+ v
233
+ PREPARED
203
234
 
204
- ```text
205
- extension object-loader/format read -> validate -> publish
235
+ failure: destroy candidate -> LOADED (CPU payload retained)
206
236
  ```
207
237
 
208
238
  ## Texture Array Generations
@@ -244,20 +274,23 @@ topology after destroying an unusable adapter allocation. Topology snapshots
244
274
  report an explicit `topologyChanged` flag and contain only valid current dirty
245
275
  layer indices.
246
276
 
247
- ## Remaining Runtime Manager Work
277
+ ## Optional Runtime Manager Follow-up
248
278
 
249
- The first load/prepare queue slice is implemented. `CjsResMan` and
250
- `CjsMotherLode` still do not cover several browser/runtime concerns that
251
- ccpwgl handles:
279
+ The runtime-resource 0.6.0 ResMan/MotherLode contract is complete. Future
280
+ work should be driven by measured application needs rather than another
281
+ resource preparation abstraction:
252
282
 
253
- - prepare priority and starvation policy
283
+ - main-queue priority and starvation policy
254
284
  - cancellation/abort propagation for work that has already started
255
- - queue-time and stage-time telemetry
256
- - `KeepAlive()` style active-frame updates
257
- - automatic purge windows for inactive resources
258
- - reload policy
285
+ - `WaitUrgent()` after real priority and bounded fairness
286
+ - queue-time and reader/format-time telemetry
287
+ - application-level default retention policy selection
288
+ - automatic resource/payload byte estimation and separate CPU/adapter budgets
259
289
  - browser-aware source behavior such as fetch response type selection
260
290
 
291
+ Explicit `Ready()`/`GetObject()` reconstructs released CPU payloads. Backend
292
+ device-loss recovery belongs to the engine's realization operation.
293
+
261
294
  ## Memory Retention and Purging
262
295
 
263
296
  ccpwgl keeps every resource in `Tw2MotherLode` until it is explicitly cleared or
@@ -274,18 +307,43 @@ enough. It then marks them purged and removes them from the cache. In ccpwgl,
274
307
  `IsGood()` also calls `KeepAlive()`, so many read/check paths implicitly keep
275
308
  resources resident.
276
309
 
277
- That model works for ccpwgl, but CarbonEngineJS should be more explicit:
310
+ That model works for ccpwgl, but CarbonEngineJS is deliberately more explicit:
278
311
 
279
- - `IsGood()`, `IsPrepared()`, and `HasLoaded()` should stay pure state checks.
280
- - `KeepAlive()` or `Touch()` should be the explicit liveness operation.
281
- - `Lock()` / `Unlock()` should prevent automatic purge, probably with a lock
282
- count rather than a boolean.
283
- - resources should track `lastUsedFrame` or `lastUsedTime`, not rely on boolean
284
- state alone.
285
- - `CjsMotherLode` should support purge scanning without forcing all resources to
286
- be held forever by accidental cache references.
312
+ - `IsGood()`, `IsPrepared()`, and `HasLoaded()` remain pure state checks.
313
+ - `KeepAlive()` and `KeepPayloadAlive()` are the explicit liveness operations.
314
+ - `Lock()` / `Unlock()` maintain a non-underflowing count and prevent identity
315
+ and payload eviction during a sweep.
316
+ - MotherLode tracks separate identity and CPU-payload frame/time observations.
317
+ - `CjsMotherLode.PurgeInactive()` itself scans only when explicitly requested
318
+ and never infers JavaScript reachability. `CjsResMan.Update()` may request it
319
+ only under an explicitly configured automatic policy.
287
320
  - `Unload()` should release engine adapter resources and optionally CPU payloads.
288
- - `Purge()` should remove the resource from the cache after unload/cleanup.
321
+ - A resource-level `Purge()`/`Reload()` vocabulary remains future policy work.
322
+
323
+ ### Recorded-Byte Cache Contract
324
+
325
+ Carbon can infer when only its cache retains a resource through weak-reference
326
+ and refcount transitions. JavaScript cannot reproduce that ownership test
327
+ reliably, so `CjsMotherLode` budgets only entries that a caller explicitly
328
+ classifies with `{ cached: true, bytes }`. The byte value is an exact
329
+ caller-supplied safe-integer eviction weight; runtime-resource does not walk
330
+ arbitrary cyclic/shared object graphs or invoke payload getters to guess size.
331
+
332
+ Explicit cached entries receive a monotonic admission sequence.
333
+ With its default cleanup, `TrimCache(options)` destroys adapters, releases
334
+ payloads, detaches lifecycle callbacks, marks compatible handles `PURGED`, and
335
+ removes positive-byte entries oldest-first until `cacheBytes <= cacheSize`.
336
+ Live, locked, non-cacheable, and zero-byte entries do not create byte pressure.
337
+ `KeepAlive()` and `Lock()` promote a cached record to live; `Unlock()` does not
338
+ silently re-admit it.
339
+
340
+ `SetCacheSize(bytes, options)` installs and immediately enforces the new budget.
341
+ `CjsResMan.Update()` / `Tick()` also run cache housekeeping after queue pumping;
342
+ `{ cache: false }` skips one update without changing policy. Cleanup is
343
+ transactional per identity: a failed candidate remains canonical, later
344
+ candidates are still attempted, and the aggregate
345
+ `CJS_MOTHERLODE_CACHE_TRIM_FAILED` error carries successful evictions and any
346
+ remaining over-budget state. Trimming never reads, prepares, or reloads data.
289
347
 
290
348
  The JS/browser split adds one more axis that ccpwgl blurs: CPU payload memory and
291
349
  GPU/device memory are different budgets. A large decoded image, geometry buffer,
@@ -326,9 +384,143 @@ resource.ReleasePayload()
326
384
  -> explicitly release the full payload reference
327
385
  ```
328
386
 
329
- `ReleasePayload()` is implemented; `KeepPayloadAlive()` remains target
330
- behavior. `GetPayload()` and `HasPayload()` are pure queries; reading the payload
331
- must not implicitly renew its lease.
387
+ `CjsResMan` binds resource-facing `KeepAlive()`, `KeepPayloadAlive()`, `Lock()`,
388
+ and `Unlock()` to the resource's canonical MotherLode key. `SetPayload()` renews
389
+ both identity and payload activity when it publishes a non-null payload.
390
+ `GetPayload()` and `HasPayload()` are pure queries; reading the payload does not
391
+ implicitly renew its lease. Detached and purged handles retain deterministic
392
+ no-op liveness methods rather than silently starting work.
393
+
394
+ Both semantic and generic/base resource results use that payload slot. A base
395
+ resource also mirrors its payload on the compatibility `object` property;
396
+ `ReleasePayload()` clears the alias only when it still references that exact
397
+ payload. Semantic resources continue to expose `object === resource` while
398
+ holding their validated plain payload privately.
399
+
400
+ Object-operation promises are retained only while in flight. Concurrent
401
+ `GetObject()`/`Ready()` calls share one operation; a resident result is returned
402
+ without source work and renews the explicit payload lease. Settlement removes
403
+ the operation record so its result graph can be reclaimed and a failure can be
404
+ retried. After payload release, only a new explicit object/readiness call
405
+ reconstructs it; queries, lease calls, and purge sweeps do not.
406
+
407
+ Read-cache provenance is explicit and separate from path/output resource identity.
408
+ For a selected source object and normalized path, `sourceRevision` is an opaque
409
+ caller/source-supplied string or finite-number content token. Source and format
410
+ records do not share across revisions. Format records are additionally isolated
411
+ by source object, frozen registration descriptor, and effective format options,
412
+ so another source or a re-registered default cannot reuse a stale parse.
413
+ Registered defaults are deeply snapshotted for supported plain-object/array
414
+ configuration. Requests containing option values that cannot be represented
415
+ safely bypass parsed-format sharing instead of accepting an ambiguous key.
416
+
417
+ `cacheSource` and `cacheFormat` use the same per-call tri-state contract:
418
+ omitted shares existing in-flight/retained work but drops a newly completed
419
+ record; `true` retains success and upgrades joined work; `false` bypasses both
420
+ sharing and retention. Failures are never retained. Resource loaders capture
421
+ the effective selected source (including the creation-time manager default)
422
+ and revision for later reconstruction, but do not capture cache flags or
423
+ one-shot reload.
424
+
425
+ `reload: true` detaches all queued/source/format records for the selected
426
+ source/path when fresh candidate work begins. `InvalidateReadCache()` exposes
427
+ explicit path invalidation, optionally restricted to one revision. Detachment
428
+ never aborts or rejects existing consumers and never touches MotherLode or the
429
+ already-published canonical payload. `Delete()` remains resource-identity-only;
430
+ `Clear()` resets all read ledgers. A failed reload preserves the former payload
431
+ but does not restore reusable read-cache entries detached by its explicit
432
+ freshness request.
433
+
434
+ ### Candidate-First Atomic Reload
435
+
436
+ When an owner already exists, `GetResource(path, { reload: true })` constructs
437
+ and initializes a distinct off-registry candidate. Ordinary `Lookup()` remains
438
+ on the former resource. Calling `Ready()` on the candidate, using
439
+ `GetObject()` / `FetchResource()` with `reload: true`, or calling the explicit
440
+ `ReloadObject()` / `ReloadResource()` helpers starts one shared candidate
441
+ operation.
442
+
443
+ The manager captures the exact MotherLode, key, former handle, former ownership
444
+ generation, and a newest-request token. It purge-locks the former owner and
445
+ tracks the candidate as a normal `Wait()` root. Reader, prepare, and publication
446
+ stages mutate only the detached candidate and validate candidate authority
447
+ before and after asynchronous boundaries. A fully loaded CPU candidate commits
448
+ through `CjsMotherLode.ReplaceExpected()` only if the exact former owner and
449
+ newest token still match. The final authority callback and exact-record check
450
+ run immediately before the synchronous map switch, with no user cleanup or
451
+ `await` between the comparison and publication.
452
+
453
+ After the switch, the displaced ownership generation is invalidated, the
454
+ candidate receives ordinary lifecycle/reconstruction callbacks, and the former
455
+ handle is cleaned exactly once. Existing JavaScript references are not
456
+ retargeted; fresh lookup returns the new handle. Source, format, or publication
457
+ failure leaves the exact former state, payload, and adapters canonical, retains
458
+ its original error, and cleans payload/adapters attached to the never-canonical
459
+ candidate. An otherwise-successful candidate that was superseded, deleted,
460
+ cleared, or replaced rejects with `CJS_RESMAN_STALE_RELOAD_CANDIDATE` and cannot
461
+ resurrect the key. Constructors that return the former singleton are rejected
462
+ before `Initialize()` can mutate it because staging requires a distinct handle.
463
+
464
+ Cleanup errors have explicit sides. Candidate cleanup failure aggregates with
465
+ the original preparation/stale error as
466
+ `CJS_RESMAN_RELOAD_CANDIDATE_CLEANUP_FAILED` while the former owner remains
467
+ canonical. A displaced-owner cleanup failure occurs after publication and
468
+ rejects as `CJS_MOTHERLODE_REPLACE_CLEANUP_FAILED` with a result where
469
+ `committed === true`; the already-good candidate remains canonical.
470
+ Started source/format work abort remains separate work.
471
+
472
+ This availability contract intentionally differs from Carbon.
473
+ `BlueAsyncRes::Reload` cancels/joins work, releases dependent cached data, and
474
+ reloads the same canonical object in place; failure can therefore leave that
475
+ stable handle bad. Carbon MotherLode replacement also switches immediately and
476
+ has no prepare-success gate or rollback. Runtime-resource instead preserves the
477
+ last published good handle until a distinct candidate has succeeded.
478
+
479
+ Every canonical queued/direct/standalone preparation captures an immutable
480
+ publication authority: exact MotherLode, canonical key, resource handle, and a
481
+ manager-local ownership generation. The manager validates that authority
482
+ before and after state changes, asynchronous reader/format work, and publication.
483
+ Delete, Clear, successful reload commit, or exact-handle reinsertion therefore makes
484
+ older work reject with `CJS_RESMAN_STALE_RESOURCE_OPERATION` before it can
485
+ publish. If stale work independently rejects, its original source/format error
486
+ is preserved and `SetError()` is suppressed on the detached handle.
487
+
488
+ `Register({ motherLode })` rejects with
489
+ `CJS_RESMAN_ACTIVE_RESOURCE_OPERATIONS` while queued or direct mutations are
490
+ active, including a reload candidate. Normal `Wait()` drains queued roots and
491
+ candidate lineages; a direct caller must await its own load/prepare promise
492
+ before retrying replacement. Canonical and candidate authority prevent late
493
+ publication, but started-work abort remains separate. Backend candidate
494
+ cleanup belongs to the explicit engine realization operation.
495
+
496
+ An explicit `PurgeInactive()` sweep accepts separate frame/time limits for
497
+ identity and payload residency. Identity expiry destroys adapter resources,
498
+ releases the payload, detaches lifecycle callbacks, marks compatible handles
499
+ `PURGED`, and removes the canonical key. Payload expiry calls
500
+ `ReleasePayload()` while retaining identity and adapter allocations. Locks skip
501
+ both operations, and candidate failures are aggregated after the sweep has
502
+ continued over other entries.
503
+
504
+ `CjsResMan` also exposes opt-in automatic scheduling through
505
+ `SetAutoPurgePolicy()` or the `autoPurgePolicy` registration option. It is
506
+ disabled by default. Automatic policy is time-only because MotherLode's current
507
+ activity frame counts observations rather than renderer frames. A policy must
508
+ set at least one of `maxIdleMilliseconds` or
509
+ `payloadMaxIdleMilliseconds`; `intervalMilliseconds` defaults to 1000. The
510
+ first `PumpAutoPurge()`/`Update()` after configuration sweeps immediately, then
511
+ the interval sets the minimum cadence. `Update({ purge: false })` suppresses a
512
+ sweep for one update without changing cadence. A regressing clock rebases and
513
+ skips one pump; custom deterministic clocks should be shared with MotherLode.
514
+ Recorded-byte cache trimming is separate from this opt-in inactivity policy and
515
+ runs on ordinary updates unless `{ cache: false }` is supplied.
516
+
517
+ Both queued `QueueResourceObject()` work and direct `LoadResourceObject()` work
518
+ hold one manager-owned lock from request/loading publication through success or
519
+ failure. The lock is balanced independently of caller locks, so automatic or
520
+ manual sweeps cannot detach a handle while its read/prepare operation is still
521
+ active. Lock release is conditional on the same captured ownership generation,
522
+ so stale work cannot decrement a newly rebound handle's lock. Scheduling and
523
+ active-work protection do not fetch or reload data.
332
524
 
333
525
  The processor preparing a resource decides when the full payload can be
334
526
  released:
@@ -342,11 +534,11 @@ format reader -> plain payload -> resource validation + adapter prepare
342
534
  `-> or renew its lease for deferred/further work
343
535
  ```
344
536
 
345
- A time-based lease is a fallback against abandoned payloads. An owner performing
346
- deferred work can renew the lease. If the payload has expired and is required
347
- again, the manager reloads the source and reconstructs it. Dynamic or
348
- non-reloadable resources must retain or be able to recreate any payload they
349
- still require.
537
+ A time- or frame-based lease is a fallback against abandoned payloads. An owner
538
+ performing deferred work can renew the lease. If an expired payload is required
539
+ again, the caller must explicitly request reconstruction; lease renewal and
540
+ purging never fetch or reload source data. Dynamic or non-reloadable resources
541
+ must remain locked, retain the required payload, or be able to recreate it.
350
542
 
351
543
  Payload references are shared read-only by default. Preparing WebGL and WebGPU
352
544
  adapters side by side should normally pass the same payload to both consumers
@@ -362,12 +554,12 @@ Open design questions:
362
554
  - Should `Unload()` drop only adapter payloads by default, or CPU payloads too?
363
555
  - Should there be explicit `UnloadAdapterResources()`, `UnloadPayload()`, and
364
556
  `Purge()` phases?
365
- - Should loaded CPU payloads have a byte-size estimate so the purge policy can
366
- be memory-budget based instead of only time/frame based?
557
+ - Which format/resource-specific estimators should supply separate identity,
558
+ CPU-payload, and adapter byte weights without double-counting shared buffers?
367
559
  - Should manually attached/dynamic resources default to locked, like ccpwgl's
368
560
  manual shader resources use `doNotPurge`?
369
- - Should `KeepAlive()` reload purged resources, or should reload be an explicit
370
- `Reload()` call to avoid surprising browser/network work?
561
+ - What explicit `Reload()`/reconstruction API should restore purged resources
562
+ without introducing surprising browser or network work?
371
563
 
372
564
  ccpwgl's raw event emitter shape is useful. The part we should not copy is the
373
565
  separate resource notification/callback compatibility layer that sits beside
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioGeometryResData.js","sources":["../../../../src/generated/resources/AudioGeometryResData.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TriGeometryRes.h\n// Generated by format-carbon carbon-class --emit. Verify against resources/AudioGeometryResData.json.\nimport { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsModel } from \"@carbonenginejs/core-types/model\";\nimport { vec3 } from \"@carbonenginejs/core-math/vec3\";\n\n/** AudioGeometryResData (resources) - generated from schema shapeHash 89e7ddb7.... */\n@type.define({ className: \"AudioGeometryResData\", family: \"resources\" })\nexport class AudioGeometryResData extends CjsModel\n{\n\n /** m_id (uint64_t) */\n @type.uint64\n id = 0;\n\n /** m_vertices (std::vector<Vector3>) */\n @type.list(\"Vector3\")\n vertices = [];\n\n /** m_indices (std::vector<uint32_t>) */\n @type.list(\"uint32_t\")\n indices = [];\n\n /** m_minBounds (Vector3) */\n @type.vec3\n minBounds = vec3.create();\n\n /** m_maxBounds (Vector3) */\n @type.vec3\n maxBounds = vec3.create();\n\n /** s_nextId (static std::atomic<uint64_t>) */\n @type.rawStruct(\"static std::atomic<uint64_t>\")\n s_nextId = null;\n\n}\n"],"names":["_AudioGeometryResData","AudioGeometryResData","CjsModel","e","_init_id","_init_extra_id","_init_vertices","_init_extra_vertices","_init_indices","_init_extra_indices","_init_minBounds","_init_extra_minBounds","_init_maxBounds","_init_extra_maxBounds","_init_s_nextId","_init_extra_s_nextId","c","_initClass","_applyDecs","type","define","className","family","uint64","list","vec3","rawStruct","constructor","args","id","vertices","indices","minBounds","create","maxBounds","s_nextId"],"mappings":";;;;;;;AAMA;AAAA,IAAAA;AACA,MAAAC,oBAAA,SAC0CC,QAAQ,CAClD;AAAA,EAAA;AAAA,IAAA,CAAA;MAAAC,CAAA,EAAA,CAAAC,QAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,oBAAA,EAAAC,aAAA,EAAAC,mBAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,cAAA,EAAAC,oBAAA,CAAA;MAAAC,CAAA,EAAA,CAAAhB,qBAAA,EAAAiB,UAAA;AAAA,KAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,MAAAA,SAAS,EAAE,sBAAsB;AAAEC,MAAAA,MAAM,EAAE;AAAY,KAAC,CAAC,CAAA,EAAA,CAAA,CAAA,CAKrEH,IAAI,EAAJA,IAAI,CAACI,MAAM,CAAA,EAAA,EAAA,EAAA,IAAA,CAAA,EAAA,CAIXJ,IAAI,CAACK,IAAI,CAAC,SAAS,CAAC,mBAIpBL,IAAI,CAACK,IAAI,CAAC,UAAU,CAAC,EAAA,CAAA,EAAA,SAAA,CAAA,EAAA,CAAA,CAIrBL,IAAI,EAAJA,IAAI,CAACM,IAAI,CAAA,EAAA,EAAA,EAAA,WAAA,CAAA,EAAA,CAAA,CAITN,IAAI,EAAJA,IAAI,CAACM,IAAI,CAAA,EAAA,EAAA,EAAA,WAAA,CAAA,EAAA,CAITN,IAAI,CAACO,SAAS,CAAC,8BAA8B,CAAC,8BAxBPxB,QAAQ,CAAA;AAAA;AAAAyB,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAAb,oBAAA,CAAA,IAAA,CAAA;AAAA,EAAA;AAGhD;EAEAc,EAAE,GAAAzB,QAAA,CAAA,IAAA,EAAG,CAAC,CAAA;;AAEN;AAEA0B,EAAAA,QAAQ,IAAAzB,cAAA,CAAA,IAAA,CAAA,EAAAC,cAAA,OAAG,EAAE,CAAA;;AAEb;AAEAyB,EAAAA,OAAO,IAAAxB,oBAAA,CAAA,IAAA,CAAA,EAAAC,aAAA,OAAG,EAAE,CAAA;;AAEZ;EAEAwB,SAAS,IAAAvB,mBAAA,CAAA,IAAA,CAAA,EAAAC,eAAA,OAAGe,IAAI,CAACQ,MAAM,EAAE,CAAA;;AAEzB;EAEAC,SAAS,IAAAvB,qBAAA,CAAA,IAAA,CAAA,EAAAC,eAAA,OAAGa,IAAI,CAACQ,MAAM,EAAE,CAAA;;AAEzB;AAEAE,EAAAA,QAAQ,IAAAtB,qBAAA,CAAA,IAAA,CAAA,EAAAC,cAAA,OAAG,IAAI,CAAA;AAAC,EAAA;IAAAG,UAAA,EAAA;AAAA;AAElB;;;;"}
@@ -1,46 +0,0 @@
1
- import { applyDecs2311 as _applyDecs2311 } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
- import { type } from '@carbonenginejs/core-types/schema';
3
- import { CjsModel } from '@carbonenginejs/core-types/model';
4
-
5
- let _initClass, _init_posElem, _init_extra_posElem, _init_normElem, _init_extra_normElem, _init_tanElem, _init_extra_tanElem, _init_binormElem, _init_extra_binormElem, _init_pkdTanElem, _init_extra_pkdTanElem, _init_pkdLegElem, _init_extra_pkdLegElem;
6
-
7
- /** CmfVertexReader (resources) - generated from schema shapeHash b28887e3.... */
8
- let _CmfVertexReader;
9
- class CmfVertexReader extends CjsModel {
10
- static {
11
- ({
12
- e: [_init_posElem, _init_extra_posElem, _init_normElem, _init_extra_normElem, _init_tanElem, _init_extra_tanElem, _init_binormElem, _init_extra_binormElem, _init_pkdTanElem, _init_extra_pkdTanElem, _init_pkdLegElem, _init_extra_pkdLegElem],
13
- c: [_CmfVertexReader, _initClass]
14
- } = _applyDecs2311(this, [type.define({
15
- className: "CmfVertexReader",
16
- family: "resources"
17
- })], [[type.objectRef("cmf::VertexElement"), 0, "posElem"], [type.objectRef("cmf::VertexElement"), 0, "normElem"], [type.objectRef("cmf::VertexElement"), 0, "tanElem"], [type.objectRef("cmf::VertexElement"), 0, "binormElem"], [type.objectRef("cmf::VertexElement"), 0, "pkdTanElem"], [type.objectRef("cmf::VertexElement"), 0, "pkdLegElem"]], 0, void 0, CjsModel));
18
- }
19
- constructor(...args) {
20
- super(...args);
21
- _init_extra_pkdLegElem(this);
22
- }
23
- /** posElem (cmf::VertexElement*) */
24
- posElem = _init_posElem(this, null);
25
-
26
- /** normElem (cmf::VertexElement*) */
27
- normElem = (_init_extra_posElem(this), _init_normElem(this, null));
28
-
29
- /** tanElem (cmf::VertexElement*) */
30
- tanElem = (_init_extra_normElem(this), _init_tanElem(this, null));
31
-
32
- /** binormElem (cmf::VertexElement*) */
33
- binormElem = (_init_extra_tanElem(this), _init_binormElem(this, null));
34
-
35
- /** pkdTanElem (cmf::VertexElement*) */
36
- pkdTanElem = (_init_extra_binormElem(this), _init_pkdTanElem(this, null));
37
-
38
- /** pkdLegElem (cmf::VertexElement*) */
39
- pkdLegElem = (_init_extra_pkdTanElem(this), _init_pkdLegElem(this, null));
40
- static {
41
- _initClass();
42
- }
43
- }
44
-
45
- export { _CmfVertexReader as CmfVertexReader };
46
- //# sourceMappingURL=CmfVertexReader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CmfVertexReader.js","sources":["../../../../src/generated/resources/CmfVertexReader.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TriGrannyRes.h\n// Generated by format-carbon carbon-class --emit. Verify against resources/CmfVertexReader.json.\nimport { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsModel } from \"@carbonenginejs/core-types/model\";\n\n/** CmfVertexReader (resources) - generated from schema shapeHash b28887e3.... */\n@type.define({ className: \"CmfVertexReader\", family: \"resources\" })\nexport class CmfVertexReader extends CjsModel\n{\n\n /** posElem (cmf::VertexElement*) */\n @type.objectRef(\"cmf::VertexElement\")\n posElem = null;\n\n /** normElem (cmf::VertexElement*) */\n @type.objectRef(\"cmf::VertexElement\")\n normElem = null;\n\n /** tanElem (cmf::VertexElement*) */\n @type.objectRef(\"cmf::VertexElement\")\n tanElem = null;\n\n /** binormElem (cmf::VertexElement*) */\n @type.objectRef(\"cmf::VertexElement\")\n binormElem = null;\n\n /** pkdTanElem (cmf::VertexElement*) */\n @type.objectRef(\"cmf::VertexElement\")\n pkdTanElem = null;\n\n /** pkdLegElem (cmf::VertexElement*) */\n @type.objectRef(\"cmf::VertexElement\")\n pkdLegElem = null;\n\n}\n"],"names":["_CmfVertexReader","CmfVertexReader","CjsModel","e","_init_posElem","_init_extra_posElem","_init_normElem","_init_extra_normElem","_init_tanElem","_init_extra_tanElem","_init_binormElem","_init_extra_binormElem","_init_pkdTanElem","_init_extra_pkdTanElem","_init_pkdLegElem","_init_extra_pkdLegElem","c","_initClass","_applyDecs","type","define","className","family","objectRef","constructor","args","posElem","normElem","tanElem","binormElem","pkdTanElem","pkdLegElem"],"mappings":";;;;;;AAKA;AAAA,IAAAA;AACA,MAAAC,eAAA,SACqCC,QAAQ,CAC7C;AAAA,EAAA;AAAA,IAAA,CAAA;MAAAC,CAAA,EAAA,CAAAC,aAAA,EAAAC,mBAAA,EAAAC,cAAA,EAAAC,oBAAA,EAAAC,aAAA,EAAAC,mBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,gBAAA,EAAAC,sBAAA,CAAA;MAAAC,CAAA,EAAA,CAAAhB,gBAAA,EAAAiB,UAAA;AAAA,KAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,MAAAA,SAAS,EAAE,iBAAiB;AAAEC,MAAAA,MAAM,EAAE;KAAa,CAAC,KAKhEH,IAAI,CAACI,SAAS,CAAC,oBAAoB,CAAC,EAAA,CAAA,EAAA,SAAA,CAAA,EAAA,CAIpCJ,IAAI,CAACI,SAAS,CAAC,oBAAoB,CAAC,EAAA,CAAA,EAAA,UAAA,CAAA,EAAA,CAIpCJ,IAAI,CAACI,SAAS,CAAC,oBAAoB,CAAC,kBAIpCJ,IAAI,CAACI,SAAS,CAAC,oBAAoB,CAAC,EAAA,CAAA,EAAA,YAAA,CAAA,EAAA,CAIpCJ,IAAI,CAACI,SAAS,CAAC,oBAAoB,CAAC,EAAA,CAAA,EAAA,YAAA,CAAA,EAAA,CAIpCJ,IAAI,CAACI,SAAS,CAAC,oBAAoB,CAAC,gCAxBFrB,QAAQ,CAAA;AAAA;AAAAsB,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAAV,sBAAA,CAAA,IAAA,CAAA;AAAA,EAAA;AAG3C;EAEAW,OAAO,GAAAtB,aAAA,CAAA,IAAA,EAAG,IAAI,CAAA;;AAEd;AAEAuB,EAAAA,QAAQ,IAAAtB,mBAAA,CAAA,IAAA,CAAA,EAAAC,cAAA,OAAG,IAAI,CAAA;;AAEf;AAEAsB,EAAAA,OAAO,IAAArB,oBAAA,CAAA,IAAA,CAAA,EAAAC,aAAA,OAAG,IAAI,CAAA;;AAEd;AAEAqB,EAAAA,UAAU,IAAApB,mBAAA,CAAA,IAAA,CAAA,EAAAC,gBAAA,OAAG,IAAI,CAAA;;AAEjB;AAEAoB,EAAAA,UAAU,IAAAnB,sBAAA,CAAA,IAAA,CAAA,EAAAC,gBAAA,OAAG,IAAI,CAAA;;AAEjB;AAEAmB,EAAAA,UAAU,IAAAlB,sBAAA,CAAA,IAAA,CAAA,EAAAC,gBAAA,OAAG,IAAI,CAAA;AAAC,EAAA;IAAAG,UAAA,EAAA;AAAA;AAEpB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GStateBindingCallbackData.js","sources":["../../../../src/generated/resources/GStateBindingCallbackData.js"],"sourcesContent":["// Source: trinity/trinity/Resources/Tr2GrannyStateRes.h\n// Generated by format-carbon carbon-class --emit. Verify against resources/GStateBindingCallbackData.json.\nimport { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsModel } from \"@carbonenginejs/core-types/model\";\n\n/** GStateBindingCallbackData (resources) - generated from schema shapeHash ffae27cd.... */\n@type.define({ className: \"GStateBindingCallbackData\", family: \"resources\" })\nexport class GStateBindingCallbackData extends CjsModel\n{\n\n /** gsf_path (std::string) */\n @type.string\n gsf_path = \"\";\n\n}\n"],"names":["_GStateBindingCallbac","GStateBindingCallbackData","CjsModel","e","_init_gsf_path","_init_extra_gsf_path","c","_initClass","_applyDecs","type","define","className","family","string","constructor","args","gsf_path"],"mappings":";;;;;;AAKA;AAAA,IAAAA;AACA,MAAAC,yBAAA,SAC+CC,QAAQ,CACvD;AAAA,EAAA;AAAA,IAAA,CAAA;MAAAC,CAAA,EAAA,CAAAC,cAAA,EAAAC,oBAAA,CAAA;MAAAC,CAAA,EAAA,CAAAN,qBAAA,EAAAO,UAAA;AAAA,KAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,MAAAA,SAAS,EAAE,2BAA2B;AAAEC,MAAAA,MAAM,EAAE;KAAa,CAAC,MAK1EH,IAAI,EAAJA,IAAI,CAACI,MAAM,gCAJiCX,QAAQ,CAAA;AAAA;AAAAY,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAAV,oBAAA,CAAA,IAAA,CAAA;AAAA,EAAA;AAGrD;EAEAW,QAAQ,GAAAZ,cAAA,CAAA,IAAA,EAAG,EAAE,CAAA;AAAC,EAAA;IAAAG,UAAA,EAAA;AAAA;AAEhB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MeshDecalData.js","sources":["../../../../src/generated/resources/MeshDecalData.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TriGeometryRes.h\n// Generated by format-carbon carbon-class --emit. Verify against resources/MeshDecalData.json.\nimport { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsModel } from \"@carbonenginejs/core-types/model\";\n\n/** MeshDecalData (resources) - generated from schema shapeHash edd09cef.... */\n@type.define({ className: \"MeshDecalData\", family: \"resources\" })\nexport class MeshDecalData extends CjsModel\n{\n\n /** m_indexBuffer (Tr2SuballocatedBuffer::Allocation) */\n @type.rawStruct(\"Tr2SuballocatedBuffer::Allocation\")\n indexBuffer = null;\n\n /** m_lodMask (uint32_t) */\n @type.uint32\n lodMask = 0;\n\n /** m_lods (std::vector<MeshDecalLodData>) */\n @type.list(\"MeshDecalLodData\")\n lods = [];\n\n}\n"],"names":["_MeshDecalData","MeshDecalData","CjsModel","e","_init_indexBuffer","_init_extra_indexBuffer","_init_lodMask","_init_extra_lodMask","_init_lods","_init_extra_lods","c","_initClass","_applyDecs","type","define","className","family","rawStruct","uint32","list","constructor","args","indexBuffer","lodMask","lods"],"mappings":";;;;;;AAKA;AAAA,IAAAA;AACA,MAAAC,aAAA,SACmCC,QAAQ,CAC3C;AAAA,EAAA;AAAA,IAAA,CAAA;MAAAC,CAAA,EAAA,CAAAC,iBAAA,EAAAC,uBAAA,EAAAC,aAAA,EAAAC,mBAAA,EAAAC,UAAA,EAAAC,gBAAA,CAAA;MAAAC,CAAA,EAAA,CAAAV,cAAA,EAAAW,UAAA;AAAA,KAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,MAAAA,SAAS,EAAE,eAAe;AAAEC,MAAAA,MAAM,EAAE;KAAa,CAAC,KAK9DH,IAAI,CAACI,SAAS,CAAC,mCAAmC,CAAC,EAAA,CAAA,EAAA,aAAA,CAAA,EAAA,CAAA,CAInDJ,IAAI,EAAJA,IAAI,CAACK,MAAM,oBAIXL,IAAI,CAACM,IAAI,CAAC,kBAAkB,CAAC,EAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAZGjB,QAAQ,CAAA;AAAA;AAAAkB,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAAZ,gBAAA,CAAA,IAAA,CAAA;AAAA,EAAA;AAGzC;EAEAa,WAAW,GAAAlB,iBAAA,CAAA,IAAA,EAAG,IAAI,CAAA;;AAElB;AAEAmB,EAAAA,OAAO,IAAAlB,uBAAA,CAAA,IAAA,CAAA,EAAAC,aAAA,OAAG,CAAC,CAAA;;AAEX;AAEAkB,EAAAA,IAAI,IAAAjB,mBAAA,CAAA,IAAA,CAAA,EAAAC,UAAA,OAAG,EAAE,CAAA;AAAC,EAAA;IAAAG,UAAA,EAAA;AAAA;AAEZ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MeshDecalLodData.js","sources":["../../../../src/generated/resources/MeshDecalLodData.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TriGeometryRes.h\n// Generated by format-carbon carbon-class --emit. Verify against resources/MeshDecalLodData.json.\nimport { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsModel } from \"@carbonenginejs/core-types/model\";\n\n/** MeshDecalLodData (resources) - generated from schema shapeHash 932b2966.... */\n@type.define({ className: \"MeshDecalLodData\", family: \"resources\" })\nexport class MeshDecalLodData extends CjsModel\n{\n\n /** m_startIndex (uint32_t) */\n @type.uint32\n startIndex = 0;\n\n /** m_primitiveCount (uint32_t) */\n @type.uint32\n primitiveCount = 0;\n\n}\n"],"names":["_MeshDecalLodData","MeshDecalLodData","CjsModel","e","_init_startIndex","_init_extra_startIndex","_init_primitiveCount","_init_extra_primitiveCount","c","_initClass","_applyDecs","type","define","className","family","uint32","constructor","args","startIndex","primitiveCount"],"mappings":";;;;;;AAKA;AAAA,IAAAA;AACA,MAAAC,gBAAA,SACsCC,QAAQ,CAC9C;AAAA,EAAA;AAAA,IAAA,CAAA;AAAAC,MAAAA,CAAA,GAAAC,gBAAA,EAAAC,sBAAA,EAAAC,oBAAA,EAAAC,0BAAA,CAAA;MAAAC,CAAA,EAAA,CAAAR,iBAAA,EAAAS,UAAA;AAAA,KAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,MAAAA,SAAS,EAAE,kBAAkB;AAAEC,MAAAA,MAAM,EAAE;AAAY,KAAC,CAAC,CAAA,EAAA,CAAA,CAAA,CAKjEH,IAAI,EAAJA,IAAI,CAACI,MAAM,CAAA,EAAA,EAAA,EAAA,YAAA,CAAA,EAAA,CAAA,CAIXJ,IAAI,EAAJA,IAAI,CAACI,MAAM,sCARwBb,QAAQ,CAAA;AAAA;AAAAc,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAAV,0BAAA,CAAA,IAAA,CAAA;AAAA,EAAA;AAG5C;EAEAW,UAAU,GAAAd,gBAAA,CAAA,IAAA,EAAG,CAAC,CAAA;;AAEd;AAEAe,EAAAA,cAAc,IAAAd,sBAAA,CAAA,IAAA,CAAA,EAAAC,oBAAA,OAAG,CAAC,CAAA;AAAC,EAAA;IAAAG,UAAA,EAAA;AAAA;AAErB;;;;"}
@@ -1,46 +0,0 @@
1
- import { applyDecs2311 as _applyDecs2311 } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
- import { type } from '@carbonenginejs/core-types/schema';
3
- import { CjsModel } from '@carbonenginejs/core-types/model';
4
-
5
- let _initClass, _init_prepareSaveCbId, _init_extra_prepareSaveCbId, _init_saveFilename, _init_extra_saveFilename, _init_isSaving, _init_extra_isSaving, _init_isSavePrepared, _init_extra_isSavePrepared, _init_saveSucceeded, _init_extra_saveSucceeded, _init_saveCbId, _init_extra_saveCbId;
6
-
7
- /** Tr2AsyncSave (resources) - generated from schema shapeHash 2d9b1936.... */
8
- let _Tr2AsyncSave;
9
- class Tr2AsyncSave extends CjsModel {
10
- static {
11
- ({
12
- e: [_init_prepareSaveCbId, _init_extra_prepareSaveCbId, _init_saveFilename, _init_extra_saveFilename, _init_isSaving, _init_extra_isSaving, _init_isSavePrepared, _init_extra_isSavePrepared, _init_saveSucceeded, _init_extra_saveSucceeded, _init_saveCbId, _init_extra_saveCbId],
13
- c: [_Tr2AsyncSave, _initClass]
14
- } = _applyDecs2311(this, [type.define({
15
- className: "Tr2AsyncSave",
16
- family: "resources"
17
- })], [[[type, type.unknown], 16, "prepareSaveCbId"], [[type, type.string], 16, "saveFilename"], [[type, type.unknown], 16, "isSaving"], [[type, type.unknown], 16, "isSavePrepared"], [[type, type.unknown], 16, "saveSucceeded"], [[type, type.unknown], 16, "saveCbId"]], 0, void 0, CjsModel));
18
- }
19
- constructor(...args) {
20
- super(...args);
21
- _init_extra_saveCbId(this);
22
- }
23
- /** m_prepareSaveCbId (return m_isSavePrepared || m_saveCbId ||) */
24
- prepareSaveCbId = _init_prepareSaveCbId(this, 0);
25
-
26
- /** m_saveFilename (std::wstring) */
27
- saveFilename = (_init_extra_prepareSaveCbId(this), _init_saveFilename(this, ""));
28
-
29
- /** m_isSaving (CcpAtomic<uint32_t>) */
30
- isSaving = (_init_extra_saveFilename(this), _init_isSaving(this, null));
31
-
32
- /** m_isSavePrepared (CcpAtomic<uint32_t>) */
33
- isSavePrepared = (_init_extra_isSaving(this), _init_isSavePrepared(this, null));
34
-
35
- /** m_saveSucceeded (CcpAtomic<uint32_t>) */
36
- saveSucceeded = (_init_extra_isSavePrepared(this), _init_saveSucceeded(this, null));
37
-
38
- /** m_saveCbId (CcpAtomic<uint32_t>) */
39
- saveCbId = (_init_extra_saveSucceeded(this), _init_saveCbId(this, 0));
40
- static {
41
- _initClass();
42
- }
43
- }
44
-
45
- export { _Tr2AsyncSave as Tr2AsyncSave };
46
- //# sourceMappingURL=Tr2AsyncSave.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tr2AsyncSave.js","sources":["../../../../src/generated/resources/Tr2AsyncSave.js"],"sourcesContent":["// Source: trinity/trinity/Resources/Tr2AsyncSave.h\n// Generated by format-carbon carbon-class --emit. Verify against resources/Tr2AsyncSave.json.\nimport { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsModel } from \"@carbonenginejs/core-types/model\";\n\n/** Tr2AsyncSave (resources) - generated from schema shapeHash 2d9b1936.... */\n@type.define({ className: \"Tr2AsyncSave\", family: \"resources\" })\nexport class Tr2AsyncSave extends CjsModel\n{\n\n /** m_prepareSaveCbId (return m_isSavePrepared || m_saveCbId ||) */\n @type.unknown\n prepareSaveCbId = 0;\n\n /** m_saveFilename (std::wstring) */\n @type.string\n saveFilename = \"\";\n\n /** m_isSaving (CcpAtomic<uint32_t>) */\n @type.unknown\n isSaving = null;\n\n /** m_isSavePrepared (CcpAtomic<uint32_t>) */\n @type.unknown\n isSavePrepared = null;\n\n /** m_saveSucceeded (CcpAtomic<uint32_t>) */\n @type.unknown\n saveSucceeded = null;\n\n /** m_saveCbId (CcpAtomic<uint32_t>) */\n @type.unknown\n saveCbId = 0;\n\n}\n"],"names":["_Tr2AsyncSave","Tr2AsyncSave","CjsModel","e","_init_prepareSaveCbId","_init_extra_prepareSaveCbId","_init_saveFilename","_init_extra_saveFilename","_init_isSaving","_init_extra_isSaving","_init_isSavePrepared","_init_extra_isSavePrepared","_init_saveSucceeded","_init_extra_saveSucceeded","_init_saveCbId","_init_extra_saveCbId","c","_initClass","_applyDecs","type","define","className","family","unknown","string","constructor","args","prepareSaveCbId","saveFilename","isSaving","isSavePrepared","saveSucceeded","saveCbId"],"mappings":";;;;;;AAKA;AAAA,IAAAA;AACA,MAAAC,YAAA,SACkCC,QAAQ,CAC1C;AAAA,EAAA;AAAA,IAAA,CAAA;MAAAC,CAAA,EAAA,CAAAC,qBAAA,EAAAC,2BAAA,EAAAC,kBAAA,EAAAC,wBAAA,EAAAC,cAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,0BAAA,EAAAC,mBAAA,EAAAC,yBAAA,EAAAC,cAAA,EAAAC,oBAAA,CAAA;MAAAC,CAAA,EAAA,CAAAhB,aAAA,EAAAiB,UAAA;AAAA,KAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,MAAAA,SAAS,EAAE,cAAc;AAAEC,MAAAA,MAAM,EAAE;AAAY,KAAC,CAAC,CAAA,EAAA,CAAA,CAAA,CAK7DH,IAAI,EAAJA,IAAI,CAACI,OAAO,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAIZJ,IAAI,EAAJA,IAAI,CAACK,MAAM,0BAIXL,IAAI,EAAJA,IAAI,CAACI,OAAO,CAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAAA,CAAA,CAIZJ,IAAI,EAAJA,IAAI,CAACI,OAAO,CAAA,EAAA,EAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,CAIZJ,IAAI,EAAJA,IAAI,CAACI,OAAO,2BAIZJ,IAAI,EAAJA,IAAI,CAACI,OAAO,gCAxBmBrB,QAAQ,CAAA;AAAA;AAAAuB,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAAX,oBAAA,CAAA,IAAA,CAAA;AAAA,EAAA;AAGxC;EAEAY,eAAe,GAAAvB,qBAAA,CAAA,IAAA,EAAG,CAAC,CAAA;;AAEnB;AAEAwB,EAAAA,YAAY,IAAAvB,2BAAA,CAAA,IAAA,CAAA,EAAAC,kBAAA,OAAG,EAAE,CAAA;;AAEjB;AAEAuB,EAAAA,QAAQ,IAAAtB,wBAAA,CAAA,IAAA,CAAA,EAAAC,cAAA,OAAG,IAAI,CAAA;;AAEf;AAEAsB,EAAAA,cAAc,IAAArB,oBAAA,CAAA,IAAA,CAAA,EAAAC,oBAAA,OAAG,IAAI,CAAA;;AAErB;AAEAqB,EAAAA,aAAa,IAAApB,0BAAA,CAAA,IAAA,CAAA,EAAAC,mBAAA,OAAG,IAAI,CAAA;;AAEpB;AAEAoB,EAAAA,QAAQ,IAAAnB,yBAAA,CAAA,IAAA,CAAA,EAAAC,cAAA,OAAG,CAAC,CAAA;AAAC,EAAA;IAAAG,UAAA,EAAA;AAAA;AAEf;;;;"}
@@ -1,37 +0,0 @@
1
- import { applyDecs2311 as _applyDecs2311 } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
- import { type } from '@carbonenginejs/core-types/schema';
3
- import { CjsModel } from '@carbonenginejs/core-types/model';
4
-
5
- let _initClass, _init_section, _init_extra_section, _init_data, _init_extra_data, _init_sections, _init_extra_sections;
6
-
7
- /** Tr2CmfContents (resources) - generated from schema shapeHash e7125c76.... */
8
- let _Tr2CmfContents;
9
- class Tr2CmfContents extends CjsModel {
10
- static {
11
- ({
12
- e: [_init_section, _init_extra_section, _init_data, _init_extra_data, _init_sections, _init_extra_sections],
13
- c: [_Tr2CmfContents, _initClass]
14
- } = _applyDecs2311(this, [type.define({
15
- className: "Tr2CmfContents",
16
- family: "resources"
17
- })], [[type.rawStruct("cmf::Section"), 0, "section"], [type.rawStruct("uint8_t[]"), 0, "data"], [type.list("Section"), 0, "sections"]], 0, void 0, CjsModel));
18
- }
19
- constructor(...args) {
20
- super(...args);
21
- _init_extra_sections(this);
22
- }
23
- /** section (cmf::Section) */
24
- section = _init_section(this, null);
25
-
26
- /** data (std::unique_ptr<uint8_t[]>) */
27
- data = (_init_extra_section(this), _init_data(this, null));
28
-
29
- /** m_sections (std::vector<Section>) */
30
- sections = (_init_extra_data(this), _init_sections(this, []));
31
- static {
32
- _initClass();
33
- }
34
- }
35
-
36
- export { _Tr2CmfContents as Tr2CmfContents };
37
- //# sourceMappingURL=Tr2CmfContents.js.map