Update sim/base_sim.py
Browse files- 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 |
-
|
| 76 |
-
|
| 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
|
|
|
|
|
|
|
| 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:
|