nepyope commited on
Commit
ffad34a
·
verified ·
1 Parent(s): 9f68181

Update sim/base_sim.py

Browse files
Files changed (1) hide show
  1. sim/base_sim.py +12 -4
sim/base_sim.py CHANGED
@@ -70,10 +70,10 @@ class DefaultEnv:
70
  # Initialize scene (defined in subclasses)
71
  self.init_scene()
72
 
73
- # Setup offscreen rendering if needed
74
  self.offscreen = offscreen
75
- if self.offscreen:
76
- self.init_renderers()
77
  self.image_dt = self.config.get("IMAGE_DT", 0.033333)
78
 
79
  # Image publishing subprocess (initialized separately)
@@ -446,9 +446,17 @@ class DefaultEnv:
446
 
447
  def update_render_caches(self):
448
  """Update render cache and shared memory for subprocess."""
 
 
 
 
 
 
449
  render_caches = {}
450
  for camera_name, camera_config in self.camera_configs.items():
451
- renderer = self.renderers[camera_name]
 
 
452
  if "params" in camera_config:
453
  renderer.update_scene(self.mj_data, camera=camera_config["params"])
454
  else:
 
70
  # Initialize scene (defined in subclasses)
71
  self.init_scene()
72
 
73
+ # Setup offscreen rendering if needed (lazy init - renderers created on first use)
74
  self.offscreen = offscreen
75
+ self.renderers = {} # Will be lazily initialized
76
+ self._renderers_initialized = False
77
  self.image_dt = self.config.get("IMAGE_DT", 0.033333)
78
 
79
  # Image publishing subprocess (initialized separately)
 
446
 
447
  def update_render_caches(self):
448
  """Update render cache and shared memory for subprocess."""
449
+ # Lazy init renderers on first call (creates OpenGL context in calling thread)
450
+ if not self._renderers_initialized and self.offscreen:
451
+ self.init_renderers()
452
+ self._renderers_initialized = True
453
+ print(f"✓ Renderers initialized lazily in thread {__import__('threading').current_thread().name}")
454
+
455
  render_caches = {}
456
  for camera_name, camera_config in self.camera_configs.items():
457
+ renderer = self.renderers.get(camera_name)
458
+ if renderer is None:
459
+ continue
460
  if "params" in camera_config:
461
  renderer.update_scene(self.mj_data, camera=camera_config["params"])
462
  else: