From 0fe20648473eaf7cfc04dc5b34e67b40f428b001 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Wed, 3 Jun 2026 01:05:04 -0700 Subject: [PATCH] Cleanup Renderable API. Add function for getting the material. Remove unused/unneeded functions. PiperOrigin-RevId: 925847769 Change-Id: Iefaf9112b7419830eb2dc4d1323e9c27725c4b16 --- .../filament/compat/scene_geom_util.cc | 3 +- .../filament/render_context_filament.cc | 20 +++--------- .../filament/render_context_filament.h | 32 ++++++++++++------- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/experimental/filament/compat/scene_geom_util.cc b/src/experimental/filament/compat/scene_geom_util.cc index 17ad8e6d..99255717 100644 --- a/src/experimental/filament/compat/scene_geom_util.cc +++ b/src/experimental/filament/compat/scene_geom_util.cc @@ -159,8 +159,6 @@ static void UpdateGeomMaterial(mjrRenderable* renderable, const mjvGeom& geom, material.color[2] = geom.rgba[2]; material.color[3] = geom.rgba[3]; - mjrf_setRenderableLayerMask(renderable, geom.category); - if (geom.matid >= 0 && geom.matid < model->nmat) { auto get_texture = [&](int role) -> const mjrTexture* { const int tex_id = model->mat_texid[geom.matid * mjNTEXROLE + role]; @@ -283,6 +281,7 @@ UniquePtr CreateGeomRenderable( const mjtByte render_flags[mjNRNDFLAG]) { mjrRenderableParams params; mjr_defaultRenderableParams(¶ms); + params.layer_mask = geom.category; auto renderable = CreateRenderable(ctx, params); PrepareGeomMeshes(renderable.get(), geom, model_objs); UpdateGeomMaterial(renderable.get(), geom, model_objs, render_flags); diff --git a/src/experimental/filament/render_context_filament.cc b/src/experimental/filament/render_context_filament.cc index f122110b..19ccee6f 100644 --- a/src/experimental/filament/render_context_filament.cc +++ b/src/experimental/filament/render_context_filament.cc @@ -245,6 +245,11 @@ void mjrf_setRenderableMaterial(mjrRenderable* renderable, mujoco::Renderable::downcast(renderable)->UpdateMaterial(*material); } +void mjrf_getRenderableMaterial(mjrRenderable* renderable, + mjrMaterial* material) { + *material = mujoco::Renderable::downcast(renderable)->GetMaterial(); +} + void mjrf_setRenderableTransform(mjrRenderable* renderable, const float position[3], const float rotation[9]) { @@ -261,21 +266,6 @@ void mjrf_setRenderableSize(mjrRenderable* renderable, const float size[3]) { mujoco::Renderable::downcast(renderable)->SetSize(fsize); } -void mjrf_setRenderableLayerMask(mjrRenderable* renderable, - uint8_t layer_mask) { - mujoco::Renderable::downcast(renderable)->SetLayerMask(layer_mask); -} - -void mjrf_setRenderableCastShadows(mjrRenderable* renderable, - mjtByte cast_shadows) { - mujoco::Renderable::downcast(renderable)->SetCastShadows(cast_shadows); -} - -void mjrf_setRenderableReceiveShadows(mjrRenderable* renderable, - mjtByte receive_shadows) { - mujoco::Renderable::downcast(renderable)->SetReceiveShadows(receive_shadows); -} - void mjrf_addLightToScene(mjrScene* scene, mjrLight* light) { mujoco::SceneView::downcast(scene)->AddToScene( mujoco::Light::downcast(light)); diff --git a/src/experimental/filament/render_context_filament.h b/src/experimental/filament/render_context_filament.h index 98204f75..3d5e545f 100644 --- a/src/experimental/filament/render_context_filament.h +++ b/src/experimental/filament/render_context_filament.h @@ -67,7 +67,6 @@ struct mjrLight {}; struct mjrRenderable {}; struct mjrRenderTarget {}; - // ## Rendering Context (mjrfContext) // // The Context is the main entry point for the library. It manages all the @@ -520,22 +519,31 @@ typedef mjtLightType mjrLightType; struct mjrLightParams { // The type of light (e.g. spot, point, directional, etc.) mjrLightType type; + // The texture to use for image lights. const mjrTexture* texture; + // The color of the light. float color[3]; + // The intensity of the light, in candela. float intensity; + // Whether or not the light casts shadows. mjtByte cast_shadows; + // The range/distance in which the light is effective, in meters. float range; + // The angle of the spot light cone, in degrees. float spot_cone_angle; + // The radius of the bulb used for soft shadows. float bulb_radius; + // The size of the shadow map. int shadow_map_size; + // Blur width for EL VSM. float vsm_blur_width; }; @@ -656,15 +664,19 @@ void mjr_defaultMaterial(mjrMaterial* material); struct mjrRenderableParams { // Whether or not the Renderable casts shadows. mjtByte cast_shadows; + // Whether or not the Renderable receives shadows. mjtByte receive_shadows; + // The layers to which the Renderable belongs. This mask is used in // conjunction with the layer mask in the Scene to determine which // Renderables to render. Defaults to 0xff. uint8_t layer_mask; + // Controls the order in which the Renderable is drawn relative to other // Renderables; defaults to 4. uint8_t priority; + // Similar to priority, but provides finer-grained control for Renderables // with transparency; defaults to 0. uint16_t blend_order; @@ -694,6 +706,10 @@ void mjrf_setRenderableGeomMesh(mjrRenderable* renderable, mjtGeom type, void mjrf_setRenderableMaterial(mjrRenderable* renderable, const mjrMaterial* material); +// Copies the material properties of the renderable into the given mjrMaterial. +void mjrf_getRenderableMaterial(mjrRenderable* renderable, + mjrMaterial* material); + // Sets the transform position and rotation of the renderable. void mjrf_setRenderableTransform(mjrRenderable* renderable, const float position[3], @@ -705,17 +721,6 @@ void mjrf_setRenderableTransform(mjrRenderable* renderable, // capsule are scaled such that they always remain spherical). void mjrf_setRenderableSize(mjrRenderable* renderable, const float size[3]); -// Sets whether the renderable casts shadows or not. -void mjrf_setRenderableCastShadows(mjrRenderable* renderable, - mjtByte cast_shadows); - -// Sets whether the renderable receives shadows or not. -void mjrf_setRenderableReceiveShadows(mjrRenderable* renderable, - mjtByte receive_shadows); - -// Sets the layer mask of the renderable. See mjrRenderableParams for details. -void mjrf_setRenderableLayerMask(mjrRenderable* renderable, uint8_t layer_mask); - // ## Render Targets (mjrRenderTarget) // // A render target is a memory buffer that holds the results of a rendering @@ -726,10 +731,13 @@ void mjrf_setRenderableLayerMask(mjrRenderable* renderable, uint8_t layer_mask); struct mjrRenderTargetConfig { // The width of the render target. int width; + // The height of the render target. int height; + // The format of the color buffer in the render target. mjrPixelFormat color_format; + // The format of the depth buffer in the render target. mjrPixelFormat depth_format; };