Skip to content

Commit 22b6fff

Browse files
committed
Remove sys exit on ESC
1 parent 7cd9ff9 commit 22b6fff

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ viewer = mujoco_viewer.MujocoViewer(model, data)
3434
for _ in range(100000):
3535
mujoco.mj_step(model, data)
3636
viewer.render()
37+
if not viewer.is_running:
38+
break
3739

3840
# close
3941
viewer.close()

examples/sample.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
for _ in range(100000):
1212
mujoco.mj_step(model, data)
1313
viewer.render()
14+
if not viewer.is_running:
15+
break
1416

1517
# close
1618
viewer.close()

mujoco_viewer/mujoco_viewer.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import mujoco
22
import glfw
3-
import sys
43
from threading import Lock
54
import numpy as np
65
import time
@@ -19,6 +18,8 @@ def __init__(
1918
self.model = model
2019
self.data = data
2120

21+
self.is_alive = True
22+
2223
self._gui_lock = Lock()
2324
self._button_left_pressed = False
2425
self._button_right_pressed = False
@@ -177,8 +178,8 @@ def _key_callback(self, window, key, scancode, action, mods):
177178
if key == glfw.KEY_ESCAPE:
178179
print("Pressed ESC")
179180
print("Quitting.")
180-
glfw.terminate()
181-
sys.exit(0)
181+
glfw.set_window_should_close(self.window, True)
182+
return
182183

183184
def _cursor_pos_callback(self, window, xpos, ypos):
184185
if not (self._button_left_pressed or self._button_right_pressed):
@@ -484,17 +485,19 @@ def apply_perturbations(self):
484485
mujoco.mjv_applyPerturbForce(self.model, self.data, self.pert)
485486

486487
def render(self):
488+
if not self.is_alive:
489+
raise Exception(
490+
"GLFW window does not exist but you tried to render.")
491+
if glfw.window_should_close(self.window):
492+
self.close()
493+
return
494+
487495
# mjv_updateScene, mjr_render, mjr_overlay
488496
def update():
489497
# fill overlay items
490498
self._create_overlay()
491499

492500
render_start = time.time()
493-
if self.window is None:
494-
return
495-
elif glfw.window_should_close(self.window):
496-
glfw.terminate()
497-
sys.exit(0)
498501
self.viewport.width, self.viewport.height = glfw.get_framebuffer_size(
499502
self.window)
500503
with self._gui_lock:
@@ -537,6 +540,9 @@ def update():
537540
if self._paused:
538541
while self._paused:
539542
update()
543+
if glfw.window_should_close(self.window):
544+
self.close()
545+
break
540546
if self._advance_by_one_step:
541547
self._advance_by_one_step = False
542548
break
@@ -556,5 +562,6 @@ def update():
556562
self.apply_perturbations()
557563

558564
def close(self):
565+
self.is_alive = False
559566
glfw.terminate()
560567
self.ctx.free()

0 commit comments

Comments
 (0)