Objects: implement primitives, texture entries, materials, media, and particles #68

Closed
opened 2026-08-08 08:21:44 +00:00 by hugo · 1 comment
Owner

Objective

Implement primitive construction/state plus texture entries, object media, legacy/GLTF materials, particle systems, light/flexible/sculpt data, and OSD conversions.

Deliverables

  • Preserve bitfields, default values, face overrides, UV/color/material semantics, unknown bits, serialization, equality/hash, and copy behavior.
  • Use bounded checked decoding for variable blobs.
  • Keep data/model behavior independent from ObjectManager transport.

Validation

  • Primitive/texture/material/media/particle tests pass.
  • Golden bytes/OSD round trips match.
  • No public model shim remains in the owned scope.

Prerequisite

Networking/client lifecycle and the earlier world model/manager issues are available; mapped APIs and translated tests are fixed.

Project constraints

  • New native Rust behavior only; no bridge or C# fallback.
  • Preserve fixed APIs and translated assertions; reuse completed lower layers and keep privileged live actions opt-in.
  • Validate bounded untrusted inputs, cancellation, task cleanup, docs, and coverage in the same change.
## Objective Implement primitive construction/state plus texture entries, object media, legacy/GLTF materials, particle systems, light/flexible/sculpt data, and OSD conversions. ## Deliverables - Preserve bitfields, default values, face overrides, UV/color/material semantics, unknown bits, serialization, equality/hash, and copy behavior. - Use bounded checked decoding for variable blobs. - Keep data/model behavior independent from ObjectManager transport. ## Validation - Primitive/texture/material/media/particle tests pass. - Golden bytes/OSD round trips match. - No public model shim remains in the owned scope. ## Prerequisite Networking/client lifecycle and the earlier world model/manager issues are available; mapped APIs and translated tests are fixed. ## Project constraints - New native Rust behavior only; no bridge or C# fallback. - Preserve fixed APIs and translated assertions; reuse completed lower layers and keep privileged live actions opt-in. - Validate bounded untrusted inputs, cancellation, task cleanup, docs, and coverage in the same change.
hugo added this to the 09 - World vertical slices milestone 2026-08-08 08:21:44 +00:00
hugo added the enhancement label 2026-08-08 08:21:44 +00:00
Author
Owner

Implemented and verified in commit 43820f6.

Implementation:

  • Replaced failure-only Primitive, ConstructionData, FlexibleData, LightData, LightImage, SculptData, ObjectProperties, TextureAnimation, TextureEntry, TextureEntryFace, ParticleSystem, and LegacyMaterial shims with native Rust models.
  • Added checked bounded decoding for texture entries, particle blocks, and extra parameters, including preservation of unknown extra-parameter payloads and particle/material/media flag bits.
  • Implemented all 45 texture faces, live default inheritance, per-face overrides, render material IDs, deterministic byte and OSD round trips, copy/equality/hash behavior, primitive classification, auxiliary data, particle legacy/extended formats, and helper codecs.
  • Kept model behavior separate from ObjectManager transport and retained existing native MediaEntry and AssetMaterial implementations.
  • Updated generated API mappings and coverage from 225 types / 15,463 members to 237 types / 15,757 members.

Verification:

  • 6 focused native object-model unit tests passed.
  • world_object_semantics: 26/26 passed.
  • AssetMaterial capability cases: 10/10 passed.
  • AssetMaterial override/document cases: 13/13 passed.
  • Native object-model wire/API marker case passed.
  • API compile workspace passed.
  • libremetaverse library clippy passed with warnings denied.
  • Native codegen gate, generated shim freshness, rustfmt, and diff checks passed.
Implemented and verified in commit 43820f6. Implementation: - Replaced failure-only Primitive, ConstructionData, FlexibleData, LightData, LightImage, SculptData, ObjectProperties, TextureAnimation, TextureEntry, TextureEntryFace, ParticleSystem, and LegacyMaterial shims with native Rust models. - Added checked bounded decoding for texture entries, particle blocks, and extra parameters, including preservation of unknown extra-parameter payloads and particle/material/media flag bits. - Implemented all 45 texture faces, live default inheritance, per-face overrides, render material IDs, deterministic byte and OSD round trips, copy/equality/hash behavior, primitive classification, auxiliary data, particle legacy/extended formats, and helper codecs. - Kept model behavior separate from ObjectManager transport and retained existing native MediaEntry and AssetMaterial implementations. - Updated generated API mappings and coverage from 225 types / 15,463 members to 237 types / 15,757 members. Verification: - 6 focused native object-model unit tests passed. - world_object_semantics: 26/26 passed. - AssetMaterial capability cases: 10/10 passed. - AssetMaterial override/document cases: 13/13 passed. - Native object-model wire/API marker case passed. - API compile workspace passed. - libremetaverse library clippy passed with warnings denied. - Native codegen gate, generated shim freshness, rustfmt, and diff checks passed.
hugo closed this issue 2026-08-10 13:32:59 +00:00
Sign in to join this conversation.