1919import isaaclab .sim as sim_utils
2020import isaaclab .utils .sensors as sensor_utils
2121from isaaclab .app .settings_manager import get_settings_manager
22- from isaaclab .renderers import Renderer
22+ from isaaclab .renderers import BaseRenderer , Renderer
2323from isaaclab .sim .views import XformPrimView
2424from isaaclab .utils import has_kit , to_camel_case
2525from isaaclab .utils .math import (
@@ -157,7 +157,7 @@ def __init__(self, cfg: CameraCfg):
157157 # Create empty variables for storing output data
158158 self ._data = CameraData ()
159159 # Renderer and render data — initialized in _initialize_impl
160- self .renderer : Renderer | None = None
160+ self .renderer : BaseRenderer | None = None
161161 self .render_data = None
162162
163163 if not has_kit ():
@@ -417,8 +417,7 @@ def _initialize_impl(self):
417417 self .renderer .prepare_stage (self .stage , self ._num_envs )
418418
419419 # Create a view for the sensor with Fabric enabled for fast pose queries.
420- # TODO: remove sync_usd_on_fabric_write=True once the GPU (cuda:0) Fabric sync bug in
421- # renderer.update_transforms() is fixed. Without it, poses are stale on the GPU path.
420+ # TODO: remove sync_usd_on_fabric_write=True once the GPU Fabric sync bug is fixed.
422421 self ._view = XformPrimView (
423422 self .cfg .prim_path , device = self ._device , stage = self .stage , sync_usd_on_fabric_write = True
424423 )
@@ -446,6 +445,7 @@ def _initialize_impl(self):
446445
447446 # View needs to exist before creating render data
448447 self .render_data = self .renderer .create_render_data (self )
448+ self ._renderer_info_populated = False
449449
450450 # Create internal buffers (includes intrinsic matrix and pose init)
451451 self ._create_buffers ()
@@ -468,12 +468,13 @@ def _update_buffers_impl(self, env_mask: wp.array):
468468 continue
469469 self .renderer .write_output (self .render_data , output_name , output_data )
470470
471- # Broadcast renderer info (e.g. segmentation label mappings) to all per-camera entries
472- renderer_info = getattr (self .render_data , "renderer_info" , None )
473- if renderer_info :
474- for data_type , metadata in renderer_info .items ():
475- for cam_idx in range (self ._view .count ):
476- self ._data .info [cam_idx ][data_type ] = metadata
471+ if not self ._renderer_info_populated :
472+ renderer_info = self .renderer .get_output_info (self .render_data )
473+ if renderer_info :
474+ for data_type , metadata in renderer_info .items ():
475+ for cam_idx in range (self ._view .count ):
476+ self ._data .info [cam_idx ][data_type ] = metadata
477+ self ._renderer_info_populated = True
477478
478479 """
479480 Private Helpers
0 commit comments