// Register a custom mesh creator with URI parameters
meshManager.registerMeshCreator("mesh://custom/sphere") { entity, uri ->
val radius = uri.getQueryParameter("radius")?.toFloatOrNull() ?: 1.0f
SceneMesh.sphere(radius, material)
}
// Set a mesh for an entity using a URI with parameters
entity.setComponent(Mesh(Uri.parse("mesh://custom/sphere?radius=2.5")))
// Set a mesh for an entity using a file URI
meshManager.setMeshForEntity(
entity,
Uri.parse("models/cube.glb"),
Uri.parse("file:///data/data/com.example.app/files/models/cube.glb"),
"", // default shader override
-1, // default scene override
true // use cache
)
// Set a mesh directly for an entity
meshManager.setMeshForEntityDirectly(entity, sceneMesh)
class MeshManager(val scene: Scene, val meshCreators: HashMap<String, (ent: Entity) -> SceneMesh>, val sceneObjectSystem: SceneObjectSystem)
MeshManager
(
scene
, meshCreators
, sceneObjectSystem
)
|
Signature
constructor(scene: Scene, meshCreators: HashMap<String, (ent: Entity) -> SceneMesh>, sceneObjectSystem: SceneObjectSystem) Parameters meshCreators: HashMap
Map of URI schemes to mesh creator functions (deprecated, use registerMeshCreator)
Returns MeshManager |
meshCreators
: HashMap
[Get] |
Map of URI schemes to mesh creator functions (deprecated, use registerMeshCreator)
Signature
val meshCreators: HashMap<String, (ent: Entity) -> SceneMesh> |
scene
: Scene
[Get] |
The Scene instance used for rendering
Signature
val scene: Scene |
sceneObjectSystem
: SceneObjectSystem
[Get] |
System for managing SceneObjects
Signature
val sceneObjectSystem: SceneObjectSystem |
deleteMeshForEntity
(
entity
)
|
This method removes the SceneObject associated with the entity and destroys any meshes that were created for it.
Signature
fun deleteMeshForEntity(entity: Entity) Parameters |
destroy
()
|
Signature
fun destroy() |
preloadMesh
(
meshSimpleUri
, meshFullPathUri
, defaultShaderOverride
, defaultSceneOverride
, useCache
)
|
Preloads a mesh without attaching it to any entity for faster loading later.
This method loads and caches a mesh from the specified URI so that when it's later attached to an entity, it will be available immediately. It supports the same URI schemes as setMeshForEntity:
Note: mesh:// and gfx:// schemes are not supported for preloading as they require entity-specific context.
Signature
fun preloadMesh(meshSimpleUri: Uri, meshFullPathUri: Uri, defaultShaderOverride: String, defaultSceneOverride: Int, useCache: Boolean = true) Parameters meshSimpleUri: Uri
A simple URI used for identification and caching
meshFullPathUri: Uri
The full URI path to the mesh resource
defaultShaderOverride: String
Optional shader override to use when loading the mesh
defaultSceneOverride: Int
Optional scene index override to use when loading the mesh
useCache: Boolean
Whether to use cached meshes (default: true)
|
registerAsyncMeshCreator
(
baseUrl
, creator
)
|
Registers an async mesh creator for a base URL pattern.
Unlike MeshManager.registerMeshCreator, the creator function will be invoked on a background thread (Dispatchers.Default). The resulting SceneMesh will be attached to the entity on the main thread. This is suitable for mesh creators that perform expensive computation (e.g., procedural geometry generation).
The creator will be invoked for any mesh URI that matches the base URL (scheme + authority + path). Query parameters from the full URI will be passed to the creator for customization.
Parameters baseUrl: String
The base URL to match (scheme + authority + path, query params ignored)
creator: SuspendFunction2
Function that takes an Entity and full URI, returns a SceneMesh. Called on a background thread.
|
registerMeshCreator
(
baseUrl
, creator
)
|
Registers a mesh creator for a base URL pattern.
The creator will be invoked for any mesh URI that matches the base URL (scheme + authority + path). Query parameters from the full URI will be passed to the creator for customization.
Example:
meshManager.registerMeshCreator("mesh://custom/sphere") { entity, uri ->
val radius = uri.getQueryParameter("radius")?.toFloatOrNull() ?: 1.0f
SceneMesh.sphere(radius, material)
}
Parameters baseUrl: String
The base URL to match (scheme + authority + path, query params ignored)
creator: Function2
Function that takes an Entity and full URI, returns a SceneMesh
|
retrieveAssociatedMeshFilesForEntity
(
entity
)
| Parameters entity: EntityReturns Array? |
setMeshForEntity
(
entity
, meshSimpleUri
, meshFullPathUri
, defaultShaderOverride
, defaultSceneOverride
, useCache
)
|
Attaches a mesh to an Entity based on the provided URIs. Avoid using this method directly and instead assign the Mesh component the Entity.
This method loads a mesh from the specified URI and attaches it to the entity. It supports different URI schemes:
Any previous mesh attached to the entity will be destroyed.
Signature
fun setMeshForEntity(entity: Entity, meshSimpleUri: Uri, meshFullPathUri: Uri, defaultShaderOverride: String, defaultSceneOverride: Int, useCache: Boolean = true) Parameters meshSimpleUri: Uri
A simple URI used for identification and caching
meshFullPathUri: Uri
The full URI path to the mesh resource
defaultShaderOverride: String
Optional shader override to use when loading the mesh
defaultSceneOverride: Int
Optional scene index override to use when loading the mesh
useCache: Boolean
Whether to use cached meshes (default: true)
|
setMeshForEntityDirectly
(
entity
, mesh
)
|
Attaches a mesh directly to an Entity, bypassing the data model. Should use the Mesh component instead.
This method should be used sparingly as it is not reflected by the data model. It's intended as an escape hatch when the mesh creators don't fit well with the standard workflow. Any previous mesh attached to the entity will be destroyed.
Signature
fun setMeshForEntityDirectly(entity: Entity, mesh: SceneMesh) |
unregisterAsyncMeshCreator
(
baseUrl
)
|
Unregisters an async mesh creator for the given base URL.
Signature
fun unregisterAsyncMeshCreator(baseUrl: String) Parameters baseUrl: String
The base URL that was registered
|
unregisterMeshCreator
(
baseUrl
)
|
Unregisters a mesh creator for the given base URL.
Signature
fun unregisterMeshCreator(baseUrl: String) Parameters baseUrl: String
The base URL that was registered
|