Add a close() method to mujoco.Renderer which explicitly frees the gl context.
PiperOrigin-RevId: 590221484 Change-Id: I07392f9c53f662a37a57ab23acfef9aa5a98a49b
This commit is contained in:
committed by
Copybara-Service
parent
e3df84ec3f
commit
53883ce86a
@@ -136,6 +136,9 @@ the clause:
|
||||
A new numpy array holding the pixels with shape `(H, W)` or `(H, W, 3)`,
|
||||
depending on the value of `self._depth_rendering` unless
|
||||
`out is None`, in which case a reference to `out` is returned.
|
||||
|
||||
Raises:
|
||||
RuntimeError: if this method is called after the close method.
|
||||
"""
|
||||
original_flags = self._scene.flags.copy()
|
||||
|
||||
@@ -145,6 +148,8 @@ the clause:
|
||||
self._scene.flags[_enums.mjtRndFlag.mjRND_SEGMENT] = True
|
||||
self._scene.flags[_enums.mjtRndFlag.mjRND_IDCOLOR] = True
|
||||
|
||||
if self._gl_context is None:
|
||||
raise RuntimeError('render cannot be called after close.')
|
||||
self._gl_context.make_current()
|
||||
|
||||
if self._depth_rendering:
|
||||
@@ -288,3 +293,35 @@ the clause:
|
||||
camera, _enums.mjtCatBit.mjCAT_ALL.value,
|
||||
self._scene,
|
||||
)
|
||||
|
||||
def close(self) -> None:
|
||||
"""Frees the resources used by the renderer.
|
||||
|
||||
This method can be used directly:
|
||||
|
||||
```python
|
||||
renderer = Renderer(...)
|
||||
# Use renderer.
|
||||
renderer.close()
|
||||
```
|
||||
|
||||
or via a context manager:
|
||||
|
||||
```python
|
||||
with Renderer(...) as renderer:
|
||||
# Use renderer.
|
||||
```
|
||||
"""
|
||||
if self._gl_context:
|
||||
self._gl_context.free()
|
||||
self._gl_context = None
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
del exc_type, exc_value, traceback # Unused.
|
||||
self.close()
|
||||
|
||||
def __del__(self) -> None:
|
||||
self.close()
|
||||
|
||||
Reference in New Issue
Block a user