Avatars sometimes stuck half-loaded after unload/reload (textures or full mesh); survives their relog #105
Labels
No labels
amd
avatars
bug
builder
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
rendering
rt
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
backspace119/Slipstream#105
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Some avatars sometimes don't load properly and stay broken: missing or wrong textures in some cases, the full mesh body or attachments missing in others. It seems to follow an unload/reload of that avatar (they leave view or range and come back, or re-rez). Having the affected user relog doesn't fix it: they come back in the same broken state.
Why that matters
When the other user relogs, their avatar and attachments come back as new objects (new local IDs) but reference the same asset UUIDs (meshes, textures, bakes, skins). The broken state surviving that points to our viewer's per-asset state keyed by UUID, not per-object state: it is set during the unload, never cleared, and reused when the same assets return.
Suspects (per-asset caches in the clean pipeline)
LLCleanMeshAssetlatches each captured (mesh, LOD) so capture early-returns. If the geometry GC or an invalidation frees the slots but leaves the latch set (or the decode/fail bookkeepingmCaptureFail/ decodegave_up), the returning mesh is never re-captured and draws nothing: the "full mesh missing" case.LLCleanTexturemap entries that are never removed (known to grow for the session). That would give the "textures wrong/missing" case.vkEnsureControlAvatarreadiness gates.sGLQ,updateMeshTexturesruns; check a late bake after reload.To capture on the next occurrence
~/.alchemyviewer/cache).RenderVKIngestDiagon: theVKIngestDiagblock shows per-face ingest state (captured / latched / not-ready / refused / missing instance).Candidate fix direction: on object/avatar kill, and on GC slot free, clear every per-asset latch that gates re-ingest (mesh latch + fail/decode state, texture want/resident state), so a returning asset always takes the cold path; plus a self-heal pass (like the sweep's full visit) that re-ingests faces whose instance or slot is missing.
Possibly related: #107 (Windows abrupt exit with no dump). Crash dumps for this should be collected per the steps there.