11import mujoco
22import glfw
3- import sys
43from threading import Lock
54import numpy as np
65import 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