[New Feature]: Local Assets: preview mesh and textures from disk before uploading #109

Closed
opened 2026-09-27 17:08:05 +00:00 by Lithus · 2 comments

Original request (Lithus)

Local Mesh, similar to how Firestorm does it: upload temporary client-side meshes without having to pay Linden to upload a potentially unfinished mesh.

Scope (expanded)

Preview both meshes and textures from your computer, in-world, before paying to upload them to SL. Only you see them, and they're never uploaded.

1. Local Mesh: port from upstream Alchemy (develop @ 902e75e7db, the same base as the Lightbox port):

  • lllocalmesh.cpp/.h. It loads Collada (.dae) and glTF (.gltf/.glb) from disk via the upload floater's loaders and renders the result as an in-world object.
  • Upstream history: 37d16bde3f (load + render), 3b7178486c (in-world object selectable and movable), c6de6a5eba (tangents so picking doesn't crash).
  • XUI: floater_local_assets.xml (a Local Assets window), panel_local_asset_list.xml, panel_local_spawned.xml, menu_local_mesh.xml.
  • Firestorm has the same feature, as a behaviour reference.

2. Local Textures:

  • LL's Local Bitmaps already exist (lllocalbitmaps.cpp, the texture picker's "Local" source). They watch the file and refresh when you save it in your image editor.
  • Needs: verify it works under Vulkan. Local images are uploaded through LLImageGL; the Vulkan texture path must pick up refreshed pixels, and the bindless world path must re-resolve.
  • Surface local textures in the same Local Assets window, next to local meshes, so the two work the same way: add a file, it appears in the list, you apply it, and edits on disk refresh live.

Vulkan-specific work

  • The local mesh object must go through our ingest (LLCleanIngest / LLCleanMeshAsset), not LL's GL geometry path. It has no asset UUID, so it needs a stable local key for geometryKey (e.g. a hash of the file path + LOD).
  • Hot reload: re-ingest when the file changes (mesh), and bump the texture generation (texture).
  • Rigged local meshes (worn preview on your avatar) are a stretch goal; check what upstream supports.

Size: M-L.

### Original request (Lithus) Local Mesh, similar to how Firestorm does it: upload temporary client-side meshes without having to pay Linden to upload a potentially unfinished mesh. ### Scope (expanded) Preview **both meshes and textures** from your computer, in-world, before paying to upload them to SL. Only you see them, and they're never uploaded. **1. Local Mesh: port from upstream Alchemy** (`develop` @ `902e75e7db`, the same base as the Lightbox port): - `lllocalmesh.cpp/.h`. It loads **Collada (.dae)** and **glTF (.gltf/.glb)** from disk via the upload floater's loaders and renders the result as an in-world object. - Upstream history: 37d16bde3f (load + render), 3b7178486c (in-world object selectable and movable), c6de6a5eba (tangents so picking doesn't crash). - XUI: `floater_local_assets.xml` (a **Local Assets** window), `panel_local_asset_list.xml`, `panel_local_spawned.xml`, `menu_local_mesh.xml`. - Firestorm has the same feature, as a behaviour reference. **2. Local Textures:** - LL's **Local Bitmaps** already exist (`lllocalbitmaps.cpp`, the texture picker's "Local" source). They watch the file and refresh when you save it in your image editor. - Needs: verify it works under Vulkan. Local images are uploaded through LLImageGL; the Vulkan texture path must pick up refreshed pixels, and the bindless world path must re-resolve. - Surface local textures in the same **Local Assets** window, next to local meshes, so the two work the same way: add a file, it appears in the list, you apply it, and edits on disk refresh live. ### Vulkan-specific work - The local mesh object must go through our ingest (`LLCleanIngest` / `LLCleanMeshAsset`), not LL's GL geometry path. It has no asset UUID, so it needs a stable local key for `geometryKey` (e.g. a hash of the file path + LOD). - Hot reload: re-ingest when the file changes (mesh), and bump the texture generation (texture). - Rigged local meshes (worn preview on your avatar) are a stretch goal; check what upstream supports. Size: M-L.
sky_line changed title from [New Feature]: Local Mesh/Clientside Mesh to [New Feature]: Local Assets: preview mesh and textures from disk before uploading 2026-09-29 01:54:14 +00:00
Owner

Expanded this to cover local textures as well (both in one Local Assets window), with a plan to port upstream Alchemy's Local Mesh. Thanks for the suggestion!

Expanded this to cover local textures as well (both in one Local Assets window), with a plan to port upstream Alchemy's Local Mesh. Thanks for the suggestion!
Owner

Done: ported upstream Alchemy's Local Assets (66 commits) and made local meshes render on the Vulkan renderer. Build > Local Assets (or the Local Assets toolbar button) previews meshes (.dae/.gltf/.glb, rez/move/attach/wear, live reload), animations (.anim/.bvh), textures and materials from disk before uploading. Tested; ships in the next beta.

Done: ported upstream Alchemy's Local Assets (66 commits) and made local meshes render on the Vulkan renderer. Build > Local Assets (or the Local Assets toolbar button) previews meshes (.dae/.gltf/.glb, rez/move/attach/wear, live reload), animations (.anim/.bvh), textures and materials from disk before uploading. Tested; ships in the next beta.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#109
No description provided.