pub struct MjViewerCpp { /* private fields */ }Expand description
Wrapper around the C++ implementation of MuJoCo viewer.
If you don’t need the side UI, we recommend you use the Rust-native viewer crate::viewer::MjViewer instead.
§Safety
Calls to MjViewerCpp::render must be done only on the main thread!
For convenience MjViewerCpp implements both Send and Sync, however that is meant only for
syncing the viewer.
MjViewerCpp::launch_passive keeps internal pointers to mjModel and mjData.
The caller must ensure both remain alive and at a fixed address for the viewer’s lifetime.
See MjViewerCpp::launch_passive for the full safety contract.
Implementations§
Source§impl MjViewerCpp
impl MjViewerCpp
Sourcepub fn user_scn_mut(&mut self) -> &mut MjvScene
pub fn user_scn_mut(&mut self) -> &mut MjvScene
Returns a mutable reference to the user scene for drawing custom visual-only geoms.
Sourcepub unsafe fn launch_passive<M: Deref<Target = MjModel> + Clone + Send + Sync>(
model: M,
data: &MjData<M>,
max_user_geom: usize,
) -> Self
pub unsafe fn launch_passive<M: Deref<Target = MjModel> + Clone + Send + Sync>( model: M, data: &MjData<M>, max_user_geom: usize, ) -> Self
Launches a wrapper around MuJoCo’s C++ viewer. The max_user_geom parameter
defines how much space will be allocated for additional, user-defined visual-only geoms.
It can thus be set to 0 if no additional geoms will be drawn by the user.
Unlike the Rust-native viewer (crate::viewer::MjViewer), this also accepts a data parameter.
Additionally, this just returns a MjViewerCpp instance directly, without result
as the initialization may fail internally in C++ anyway, which we have no way of checking.
§Safety
The caller must ensure that both model and data remain alive and at a stable memory
address for the entire lifetime of the returned MjViewerCpp. Dropping or moving the
underlying MjModel or MjData while the viewer is alive is undefined behavior.
Calls to MjViewerCpp::render must be done only on the main thread.
§Panics
Panics if mujoco_cSimulate_create returns a null pointer, or if the load thread panics.
Sourcepub unsafe fn render(&mut self) -> Result<(), &'static str>
pub unsafe fn render(&mut self) -> Result<(), &'static str>
Renders the simulation.
§Errors
Returns Err when called after the viewer has already been closed.
The call that detects the close event still returns Ok(()) and flips
the internal running state to false.
§Safety
Must be called from the main thread. GLFW requires main-thread access; calling from any other thread causes undefined behaviour.
Trait Implementations§
Source§impl Debug for MjViewerCpp
impl Debug for MjViewerCpp
Source§impl Drop for MjViewerCpp
Requests viewer exit and destroys the underlying C++ simulation handle.
impl Drop for MjViewerCpp
Requests viewer exit and destroys the underlying C++ simulation handle.
impl Send for MjViewerCpp
§Safety
Rendering must only be performed on the main thread. Send is provided so
the viewer handle can be moved to the main thread after construction.
impl Sync for MjViewerCpp
§Safety
The viewer is safe to share across threads for syncing, but rendering must
only be done on the main thread. See MjViewerCpp for the full contract.
Auto Trait Implementations§
impl Freeze for MjViewerCpp
impl RefUnwindSafe for MjViewerCpp
impl Unpin for MjViewerCpp
impl UnsafeUnpin for MjViewerCpp
impl UnwindSafe for MjViewerCpp
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.