@dcl/abgen-win32-x64 0.18.0 → 0.19.1
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/BUILD-INFO.txt +4 -4
- package/README.md +73 -0
- package/abgen.exe +0 -0
- package/package.json +1 -1
package/BUILD-INFO.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
ABGEN_VERSION=0.
|
|
2
|
-
ABGEN_RELEASE=v0.
|
|
1
|
+
ABGEN_VERSION=0.19.1
|
|
2
|
+
ABGEN_RELEASE=v0.19.1
|
|
3
3
|
ABGEN_TARGET=x86_64-pc-windows-gnu
|
|
4
|
-
ABGEN_BUILD_ID=
|
|
5
|
-
ABGEN_GIT_REV=
|
|
4
|
+
ABGEN_BUILD_ID=2fa919e886f2
|
|
5
|
+
ABGEN_GIT_REV=45c551523b82eb0e3115f5c040260d3477cb509b
|
|
6
6
|
SOURCE_DATE_EPOCH=315532800
|
package/README.md
CHANGED
|
@@ -168,6 +168,79 @@ non-digest names).
|
|
|
168
168
|
`ABGEN_MAGENTA_MISSING` is on, in which case unresolvable deps are dropped from the digest and
|
|
169
169
|
the build substitutes placeholder textures
|
|
170
170
|
|
|
171
|
+
### Two version lanes: `AB_VERSION` and `WEARABLE_AB_VERSION`
|
|
172
|
+
Scene bundles and wearable/emote bundles live under separate key prefixes. `AB_VERSION` is the scene
|
|
173
|
+
lane; `WEARABLE_AB_VERSION` is wearables and emotes, and defaults to `AB_VERSION` when unset — so a
|
|
174
|
+
deployment that does not set it behaves exactly as it did when the two shared one prefix.
|
|
175
|
+
|
|
176
|
+
They are split because only a scene's name can carry an invalidation. Scene bundles are digest-named
|
|
177
|
+
(`{hash}_{digest}_{platform}`), so a dependency change or a recipe bump moves them; wearable bundles
|
|
178
|
+
are `{hash}_{platform}`, with nowhere to put one, which leaves the prefix as the only lever they
|
|
179
|
+
have. Sharing one prefix therefore meant every scene-driven bump dragged the whole wearable corpus
|
|
180
|
+
through a rebuild it had no use for, and every wearable-driven bump did the same to the world.
|
|
181
|
+
|
|
182
|
+
- The conversion path resolves its lane from the entity type (`Proxy::version_for`); everything
|
|
183
|
+
that is not a scene rides the wearable lane.
|
|
184
|
+
- The serving path has only a bundle name to go on, so it reads both lanes and then
|
|
185
|
+
`ABGEN_FALLBACK_VERSION` (`Proxy::read_versions`). Safe rather than merely convenient: an
|
|
186
|
+
entity's bundles exist under exactly one prefix and every name is content-addressed, so a hit is
|
|
187
|
+
the right bytes whichever lane answered. A miss costs one extra 404.
|
|
188
|
+
- The lambda's already-converted gate accepts a manifest at *either* lane, because the entity type
|
|
189
|
+
is only known after the entity doc is fetched and the gate deliberately runs before that. Safe
|
|
190
|
+
while the two are distinct strings: a manifest carries whichever version wrote it, so a bump of
|
|
191
|
+
either stops matching.
|
|
192
|
+
|
|
193
|
+
### Per-asset-type cache keys (recipes)
|
|
194
|
+
`AB_VERSION` prefixes every space key, so bumping it orphans every bundle of every type at once —
|
|
195
|
+
the right hammer for a change to the bundle container, far too big for the usual fix, which changes
|
|
196
|
+
how one kind of asset is built and leaves the rest byte-identical. Baking skinned-renderer bounds
|
|
197
|
+
over the animation clips (#119) rewrote nothing but animated rigs; an `AB_VERSION` bump behind it
|
|
198
|
+
would have rebuilt every texture in the world.
|
|
199
|
+
|
|
200
|
+
`crate/src/recipes.rs` holds a generation counter per build-affecting behaviour and folds the ones
|
|
201
|
+
an asset uses into the digest that names its bundle. A bundle is rebuilt whole or not at all — a GLB
|
|
202
|
+
bundle carries its meshes, skeleton, clips, materials *and* its resolved textures in one artifact —
|
|
203
|
+
so there are only two base recipes, one per kind of bundle, plus two narrowing ones that earn their
|
|
204
|
+
place by being rare:
|
|
205
|
+
|
|
206
|
+
| Recipe | Applies to | Rebuilds on a bump |
|
|
207
|
+
|---|---|---|
|
|
208
|
+
| `glb` | every glTF | every glb bundle; no standalone image bundles |
|
|
209
|
+
| `texture` | standalone images, and any glTF with `images` | every image bundle **and** every glb that embeds one |
|
|
210
|
+
| `skin` | a glTF declaring `skins` | only rigs — a minority of glbs |
|
|
211
|
+
| `animation` | a glTF carrying `animations` | only animated glbs — a minority |
|
|
212
|
+
|
|
213
|
+
**To ship a fix without an `AB_VERSION` bump:** raise the matching counter by one, in the commit that
|
|
214
|
+
changes the output, then re-enqueue as you would for a version bump. Bundles whose recipes moved get
|
|
215
|
+
new names, miss the HEAD probe and rebuild; every other bundle keeps its name and is reused where it
|
|
216
|
+
already sits. Never renumber a counter and never reuse a value — a generation that comes back around
|
|
217
|
+
makes stale bundles look fresh.
|
|
218
|
+
|
|
219
|
+
Default to `glb`. Reach for `skin` or `animation` only when the fix has a gate you can point at —
|
|
220
|
+
#119 is the model, where a glTF with no clips serialized byte for byte as before. The asymmetry is
|
|
221
|
+
the whole rule: too broad costs a rebuild you were going to pay anyway, too narrow ships stale
|
|
222
|
+
bundles and says nothing. There is deliberately no counter per sub-asset (`mesh`, `material`) — the
|
|
223
|
+
bundle is the unit, so those would rebuild the same set `glb` does — and none for normal maps, since
|
|
224
|
+
"is this encoder fix normal-only?" is exactly the ambiguous question a recipe must not ask.
|
|
225
|
+
|
|
226
|
+
Scope and cost:
|
|
227
|
+
- Only the digest-named lane carries recipes. Wearables and emotes are `{hash}_{platform}`, with
|
|
228
|
+
nowhere to put a generation, so a fix to those still needs `AB_VERSION` — as does anything that
|
|
229
|
+
changes the bundle container, the manifest shape, or the client's side of the contract.
|
|
230
|
+
- Generation `0` folds in as nothing *in a digest*, so adopting this cost no rebuild: every
|
|
231
|
+
bundle name is byte-for-byte what it was before. Manifests do gain a `recipes` key.
|
|
232
|
+
- `AB_VERSION` stays total. It is the key prefix, never a digest input, and the conversion gate
|
|
233
|
+
gained a conjunct rather than a substitute, so a version bump still reconverts everything.
|
|
234
|
+
- Each conversion records, in the per-platform manifest's `recipes` block, every recipe governing
|
|
235
|
+
its bundles and the generation each stood at — **baselines included** — and `platform_converted`
|
|
236
|
+
compares it, so the lambda's already-converted skip stays correct without a `force` flag. A scene
|
|
237
|
+
of static props records `{"glb":0,"texture":0}`: bumping `skin` leaves it current (that is the
|
|
238
|
+
saving), bumping `glb` does not. Recording only the *bumped* recipes would be blind to every
|
|
239
|
+
later `0 -> 1` bump, which is why the baselines are kept here and dropped in the digest.
|
|
240
|
+
A manifest predating recipes has no block at all and reconverts once.
|
|
241
|
+
- The LOD lane solves the same problem with one counter of its own,
|
|
242
|
+
`crate/src/lodgen/pipeline.rs::LOD_GENERATION`, folded into the reuse state document.
|
|
243
|
+
|
|
171
244
|
Display-only files — `autogenerated-thumbnail.png` anywhere in the content map, and whatever
|
|
172
245
|
`metadata.display.navmapThumbnail` points at — are dropped from the conversion input, matching the
|
|
173
246
|
prod converter's `-skippedHashes` flag: no bundle, no manifest entry, and no contribution to the
|
package/abgen.exe
CHANGED
|
Binary file
|