mujoco_rs/
mujoco_c.rs

1/* automatically generated by rust-bindgen 0.71.1 */
2
3#[doc = r" If Bindgen could only determine the size and alignment of a"]
4#[doc = r" type, it is represented like this."]
5#[derive(PartialEq, Copy, Clone, Debug, Hash)]
6#[repr(C)]
7pub struct __BindgenOpaqueArray<T: Copy, const N: usize>(pub [T; N]);
8impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray<T, N> {
9    fn default() -> Self {
10        Self([<T as Default>::default(); N])
11    }
12}
13#[repr(C)]
14pub struct __BindgenUnionField<T>(::std::marker::PhantomData<T>);
15impl<T> __BindgenUnionField<T> {
16    #[inline]
17    pub const fn new() -> Self {
18        __BindgenUnionField(::std::marker::PhantomData)
19    }
20    #[inline]
21    pub unsafe fn as_ref(&self) -> &T {
22        ::std::mem::transmute(self)
23    }
24    #[inline]
25    pub unsafe fn as_mut(&mut self) -> &mut T {
26        ::std::mem::transmute(self)
27    }
28}
29impl<T> ::std::default::Default for __BindgenUnionField<T> {
30    #[inline]
31    fn default() -> Self {
32        Self::new()
33    }
34}
35impl<T> ::std::clone::Clone for __BindgenUnionField<T> {
36    #[inline]
37    fn clone(&self) -> Self {
38        *self
39    }
40}
41impl<T> ::std::marker::Copy for __BindgenUnionField<T> {}
42impl<T> ::std::fmt::Debug for __BindgenUnionField<T> {
43    fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
44        fmt.write_str("__BindgenUnionField")
45    }
46}
47impl<T> ::std::hash::Hash for __BindgenUnionField<T> {
48    fn hash<H: ::std::hash::Hasher>(&self, _state: &mut H) {}
49}
50impl<T> ::std::cmp::PartialEq for __BindgenUnionField<T> {
51    fn eq(&self, _other: &__BindgenUnionField<T>) -> bool {
52        true
53    }
54}
55impl<T> ::std::cmp::Eq for __BindgenUnionField<T> {}
56pub const mjVERSION_HEADER: u32 = 335;
57pub const mjMINVAL: f64 = 0.000000000000001;
58pub const mjPI: f64 = 3.141592653589793;
59pub const mjMAXVAL: f64 = 10000000000.0;
60pub const mjMINMU: f64 = 0.00001;
61pub const mjMINIMP: f64 = 0.0001;
62pub const mjMAXIMP: f64 = 0.9999;
63pub const mjMAXCONPAIR: u32 = 50;
64pub const mjMAXTREEDEPTH: u32 = 50;
65pub const mjMAXFLEXNODES: u32 = 27;
66pub const mjNEQDATA: u32 = 11;
67pub const mjNDYN: u32 = 10;
68pub const mjNGAIN: u32 = 10;
69pub const mjNBIAS: u32 = 10;
70pub const mjNFLUID: u32 = 12;
71pub const mjNREF: u32 = 2;
72pub const mjNIMP: u32 = 5;
73pub const mjNSENS: u32 = 3;
74pub const mjNSOLVER: u32 = 200;
75pub const mjNISLAND: u32 = 20;
76pub const mjMAXTHREAD: u32 = 128;
77pub const mjNGROUP: u32 = 6;
78pub const mjMAXLIGHT: u32 = 100;
79pub const mjMAXOVERLAY: u32 = 500;
80pub const mjMAXLINE: u32 = 100;
81pub const mjMAXLINEPNT: u32 = 1001;
82pub const mjMAXPLANEGRID: u32 = 200;
83pub const mjNAUX: u32 = 10;
84pub const mjMAXTEXTURE: u32 = 1000;
85pub const mjMAXMATERIAL: u32 = 1000;
86pub const mjMAXUISECT: u32 = 10;
87pub const mjMAXUIITEM: u32 = 200;
88pub const mjMAXUITEXT: u32 = 300;
89pub const mjMAXUINAME: u32 = 40;
90pub const mjMAXUIMULTI: u32 = 35;
91pub const mjMAXUIEDIT: u32 = 7;
92pub const mjMAXUIRECT: u32 = 25;
93pub const mjSEPCLOSED: u32 = 1000;
94pub const mjPRESERVE: u32 = 2000;
95pub const mjKEY_ESCAPE: u32 = 256;
96pub const mjKEY_ENTER: u32 = 257;
97pub const mjKEY_TAB: u32 = 258;
98pub const mjKEY_BACKSPACE: u32 = 259;
99pub const mjKEY_INSERT: u32 = 260;
100pub const mjKEY_DELETE: u32 = 261;
101pub const mjKEY_RIGHT: u32 = 262;
102pub const mjKEY_LEFT: u32 = 263;
103pub const mjKEY_DOWN: u32 = 264;
104pub const mjKEY_UP: u32 = 265;
105pub const mjKEY_PAGE_UP: u32 = 266;
106pub const mjKEY_PAGE_DOWN: u32 = 267;
107pub const mjKEY_HOME: u32 = 268;
108pub const mjKEY_END: u32 = 269;
109pub const mjKEY_F1: u32 = 290;
110pub const mjKEY_F2: u32 = 291;
111pub const mjKEY_F3: u32 = 292;
112pub const mjKEY_F4: u32 = 293;
113pub const mjKEY_F5: u32 = 294;
114pub const mjKEY_F6: u32 = 295;
115pub const mjKEY_F7: u32 = 296;
116pub const mjKEY_F8: u32 = 297;
117pub const mjKEY_F9: u32 = 298;
118pub const mjKEY_F10: u32 = 299;
119pub const mjKEY_F11: u32 = 300;
120pub const mjKEY_F12: u32 = 301;
121pub const mjKEY_NUMPAD_0: u32 = 320;
122pub const mjKEY_NUMPAD_9: u32 = 329;
123#[repr(C)]
124#[derive(Debug, Clone)]
125pub struct std_pair {
126    pub _address: u8,
127}
128pub type std_pair_first_type = u8;
129pub type std_pair_second_type = u8;
130#[repr(C)]
131#[derive(Debug, Clone)]
132pub struct std_pair__CheckArgs {
133    pub _address: u8,
134}
135pub type std_pair__CheckArgsDep = u8;
136pub type std_string = __BindgenOpaqueArray<u64, 3usize>;
137#[repr(C)]
138#[derive(Debug, Clone)]
139pub struct std_allocator {
140    pub _address: u8,
141}
142pub type std_allocator_size_type = u64;
143pub type std_allocator_difference_type = u64;
144pub type std_allocator_value_type = u8;
145pub type std_allocator_propagate_on_container_move_assignment = u8;
146pub type std_allocator_is_always_equal = u8;
147#[repr(C)]
148#[derive(Debug, Clone)]
149pub struct std_char_traits {
150    pub _address: u8,
151}
152pub type std_char_traits_char_type = u8;
153pub type std_char_traits_int_type = u32;
154pub type std_char_traits_off_type = u64;
155pub type std_char_traits_pos_type = u8;
156pub type std_char_traits_state_type = __BindgenOpaqueArray<u32, 2usize>;
157#[repr(C)]
158#[derive(Debug, Clone)]
159pub struct std_optional {
160    pub _address: u8,
161}
162pub type std_optional___base = u8;
163pub type std_optional_value_type = u8;
164#[repr(C)]
165#[derive(Debug, Clone)]
166pub struct std_optional__CheckOptionalArgsConstructor {
167    pub _address: u8,
168}
169pub type std_optional__CheckOptionalArgsCtor = u8;
170#[repr(C)]
171#[derive(Debug, Clone)]
172pub struct std_optional__CheckOptionalLikeConstructor {
173    pub _address: u8,
174}
175pub type std_optional__CheckOptionalLikeConstructor___check_constructible_from_opt = u8;
176pub type std_optional__CheckOptionalLikeConstructor___check_assignable_from_opt = u8;
177pub type std_optional__CheckOptionalLikeCtor = u8;
178pub type std_optional__CheckOptionalLikeAssign = u8;
179unsafe extern "C" {
180    #[link_name = "\u{1}__na"]
181    pub static std_ratio___na: ::std::os::raw::c_long;
182}
183unsafe extern "C" {
184    #[link_name = "\u{1}__da"]
185    pub static std_ratio___da: ::std::os::raw::c_long;
186}
187unsafe extern "C" {
188    #[link_name = "\u{1}__s"]
189    pub static std_ratio___s: ::std::os::raw::c_long;
190}
191unsafe extern "C" {
192    #[link_name = "\u{1}__gcd"]
193    pub static std_ratio___gcd: ::std::os::raw::c_long;
194}
195unsafe extern "C" {
196    #[link_name = "\u{1}num"]
197    pub static std_ratio_num: ::std::os::raw::c_long;
198}
199unsafe extern "C" {
200    #[link_name = "\u{1}den"]
201    pub static std_ratio_den: ::std::os::raw::c_long;
202}
203#[repr(C)]
204#[derive(Debug, Clone)]
205pub struct std_chrono_duration {
206    pub _address: u8,
207}
208#[repr(C)]
209#[derive(Debug, Clone)]
210pub struct std_chrono_duration___no_overflow {
211    pub _address: u8,
212}
213pub type std_chrono_duration___no_overflow_type = u8;
214pub type std_chrono_duration_rep = u8;
215pub type std_chrono_duration_period = u8;
216#[repr(C)]
217#[derive(Debug, Clone)]
218pub struct std_chrono_time_point {
219    pub _address: u8,
220}
221pub type std_chrono_time_point_clock = u8;
222pub type std_chrono_time_point_duration = u8;
223pub type std_chrono_time_point_rep = u8;
224pub type std_chrono_time_point_period = u8;
225#[repr(C)]
226#[repr(align(1))]
227#[derive(Debug, Clone)]
228pub struct std_chrono_steady_clock {
229    pub _bindgen_opaque_blob: u8,
230}
231pub type std_chrono_steady_clock_duration = u64;
232pub type std_chrono_steady_clock_rep = u64;
233pub type std_chrono_steady_clock_period = u8;
234pub type std_chrono_steady_clock_time_point = u64;
235unsafe extern "C" {
236    #[link_name = "\u{1}_ZNSt3__16chrono12steady_clock3nowEv"]
237    pub fn std_chrono_steady_clock_now() -> std_chrono_steady_clock_time_point;
238}
239impl std_chrono_steady_clock {
240    #[inline]
241    pub unsafe fn now() -> std_chrono_steady_clock_time_point {
242        std_chrono_steady_clock_now()
243    }
244}
245pub const std_chrono_steady_clock_is_steady: bool = true;
246pub type std_atomic_int = u32;
247#[repr(C)]
248#[derive(Debug, Clone)]
249pub struct std_default_delete {
250    pub _address: u8,
251}
252#[repr(C)]
253#[derive(Debug, Clone)]
254pub struct std_unique_ptr {
255    pub _address: u8,
256}
257pub type std_unique_ptr_element_type = u8;
258pub type std_unique_ptr_deleter_type = u8;
259pub type std_unique_ptr_pointer = u8;
260pub type std_unique_ptr__DeleterSFINAE = u8;
261pub type std_unique_ptr__LValRefType = u8;
262pub type std_unique_ptr__GoodRValRefType = u8;
263pub type std_unique_ptr__BadRValRefType = u8;
264pub type std_unique_ptr__EnableIfDeleterDefaultConstructible = u8;
265pub type std_unique_ptr__EnableIfDeleterConstructible = u8;
266pub type std_unique_ptr__EnableIfMoveConvertible = u8;
267pub type std_unique_ptr__EnableIfDeleterConvertible = u8;
268pub type std_unique_ptr__EnableIfDeleterAssignable = u8;
269#[repr(C)]
270#[derive(Debug, Clone)]
271pub struct std_basic_string {
272    pub _address: u8,
273}
274pub type std_basic_string___default_allocator_type = u8;
275pub type std_basic_string___self = u8;
276pub type std_basic_string___self_view = u8;
277pub type std_basic_string_traits_type = u8;
278pub type std_basic_string_value_type = u8;
279pub type std_basic_string_allocator_type = u8;
280pub type std_basic_string___alloc_traits = u8;
281pub type std_basic_string_size_type = u8;
282pub type std_basic_string_difference_type = u8;
283pub type std_basic_string_reference = u8;
284pub type std_basic_string_const_reference = u8;
285pub type std_basic_string_pointer = u8;
286pub type std_basic_string_const_pointer = u8;
287pub type std_basic_string_iterator = u8;
288pub type std_basic_string_const_iterator = u8;
289pub type std_basic_string_reverse_iterator = u8;
290pub type std_basic_string_const_reverse_iterator = u8;
291#[repr(C)]
292#[derive(Debug, Clone)]
293pub struct std_basic_string___long {
294    pub _address: u8,
295}
296#[repr(C)]
297#[derive(Clone)]
298pub struct std_basic_string___long__bindgen_ty_1 {
299    pub _address: u8,
300}
301pub const std_basic_string___min_cap: std_basic_string__bindgen_ty_1 =
302    std_basic_string__bindgen_ty_1::__min_cap;
303#[repr(i32)]
304#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
305pub enum std_basic_string__bindgen_ty_1 {
306    __min_cap = 0,
307}
308#[repr(C)]
309#[derive(Debug, Clone)]
310pub struct std_basic_string___short {
311    pub _address: u8,
312}
313#[repr(C)]
314#[derive(Clone)]
315pub struct std_basic_string___short__bindgen_ty_1 {
316    pub _address: u8,
317}
318#[repr(C)]
319#[repr(align(1))]
320#[derive(Clone)]
321pub struct std_basic_string___ulx {
322    pub _bindgen_opaque_blob: [u8; 0usize],
323}
324pub const std_basic_string___n_words: std_basic_string__bindgen_ty_2 =
325    std_basic_string__bindgen_ty_2::__n_words;
326#[repr(i32)]
327#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
328pub enum std_basic_string__bindgen_ty_2 {
329    __n_words = 0,
330}
331#[repr(C)]
332#[derive(Debug, Clone)]
333pub struct std_basic_string___raw {
334    pub _address: u8,
335}
336#[repr(C)]
337#[derive(Debug, Clone)]
338pub struct std_basic_string___rep {
339    pub _address: u8,
340}
341#[repr(C)]
342#[repr(align(1))]
343#[derive(Clone)]
344pub struct std_basic_string___rep__bindgen_ty_1 {
345    pub _bindgen_opaque_blob: [u8; 0usize],
346}
347pub const std_basic_string___alignment: std_basic_string__bindgen_ty_3 =
348    std_basic_string__bindgen_ty_3::__alignment;
349#[repr(i32)]
350#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
351pub enum std_basic_string__bindgen_ty_3 {
352    __alignment = 0,
353}
354#[repr(C)]
355#[derive(Debug, Clone)]
356pub struct std_unique_lock {
357    pub _address: u8,
358}
359pub type std_unique_lock_mutex_type = u8;
360#[repr(C)]
361#[repr(align(8))]
362#[derive(Debug, Clone)]
363pub struct std_recursive_mutex {
364    pub _bindgen_opaque_blob: [u64; 5usize],
365}
366pub type std_recursive_mutex_native_handle_type = u64;
367unsafe extern "C" {
368    #[link_name = "\u{1}_ZNSt3__115recursive_mutex4lockEv"]
369    pub fn std_recursive_mutex_lock(this: *mut std_recursive_mutex);
370}
371unsafe extern "C" {
372    #[link_name = "\u{1}_ZNSt3__115recursive_mutex8try_lockEv"]
373    pub fn std_recursive_mutex_try_lock(this: *mut std_recursive_mutex) -> bool;
374}
375unsafe extern "C" {
376    #[link_name = "\u{1}_ZNSt3__115recursive_mutex6unlockEv"]
377    pub fn std_recursive_mutex_unlock(this: *mut std_recursive_mutex);
378}
379unsafe extern "C" {
380    #[link_name = "\u{1}_ZNSt3__115recursive_mutexC1Ev"]
381    pub fn std_recursive_mutex_recursive_mutex(this: *mut std_recursive_mutex);
382}
383unsafe extern "C" {
384    #[link_name = "\u{1}_ZNSt3__115recursive_mutexD1Ev"]
385    pub fn std_recursive_mutex_recursive_mutex_destructor(this: *mut std_recursive_mutex);
386}
387impl std_recursive_mutex {
388    #[inline]
389    pub unsafe fn lock(&mut self) {
390        std_recursive_mutex_lock(self)
391    }
392    #[inline]
393    pub unsafe fn try_lock(&mut self) -> bool {
394        std_recursive_mutex_try_lock(self)
395    }
396    #[inline]
397    pub unsafe fn unlock(&mut self) {
398        std_recursive_mutex_unlock(self)
399    }
400    #[inline]
401    pub unsafe fn new() -> Self {
402        let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit();
403        std_recursive_mutex_recursive_mutex(__bindgen_tmp.as_mut_ptr());
404        __bindgen_tmp.assume_init()
405    }
406    #[inline]
407    pub unsafe fn destruct(&mut self) {
408        std_recursive_mutex_recursive_mutex_destructor(self)
409    }
410}
411#[repr(C)]
412#[derive(Debug, Clone)]
413pub struct std_vector {
414    pub _address: u8,
415}
416pub type std_vector___default_allocator_type = u8;
417pub type std_vector___self = u8;
418pub type std_vector_value_type = u8;
419pub type std_vector_allocator_type = u8;
420pub type std_vector___alloc_traits = u8;
421pub type std_vector_reference = u8;
422pub type std_vector_const_reference = u8;
423pub type std_vector_size_type = u8;
424pub type std_vector_difference_type = u8;
425pub type std_vector_pointer = u8;
426pub type std_vector_const_pointer = u8;
427pub type std_vector_iterator = u8;
428pub type std_vector_const_iterator = u8;
429pub type std_vector_reverse_iterator = u8;
430pub type std_vector_const_reverse_iterator = u8;
431#[repr(C)]
432#[derive(Debug, Clone)]
433pub struct std_vector___destroy_vector {
434    pub _address: u8,
435}
436#[repr(C)]
437#[derive(Debug, Clone)]
438pub struct std_vector__ConstructTransaction {
439    pub _address: u8,
440}
441#[repr(C)]
442#[repr(align(8))]
443#[derive(Debug, Clone)]
444pub struct std_condition_variable_any {
445    pub _bindgen_opaque_blob: [u64; 8usize],
446}
447#[repr(u8)]
448#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
449pub enum std_byte {
450    __bindgen_cannot_repr_c_on_empty_enum = 0,
451}
452pub type mjtNum = f64;
453pub type mjtByte = ::std::os::raw::c_uchar;
454pub type mjtSize = u64;
455#[repr(u32)]
456#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
457pub enum mjtDisableBit_ {
458    mjDSBL_CONSTRAINT = 1,
459    mjDSBL_EQUALITY = 2,
460    mjDSBL_FRICTIONLOSS = 4,
461    mjDSBL_LIMIT = 8,
462    mjDSBL_CONTACT = 16,
463    mjDSBL_PASSIVE = 32,
464    mjDSBL_GRAVITY = 64,
465    mjDSBL_CLAMPCTRL = 128,
466    mjDSBL_WARMSTART = 256,
467    mjDSBL_FILTERPARENT = 512,
468    mjDSBL_ACTUATION = 1024,
469    mjDSBL_REFSAFE = 2048,
470    mjDSBL_SENSOR = 4096,
471    mjDSBL_MIDPHASE = 8192,
472    mjDSBL_EULERDAMP = 16384,
473    mjDSBL_AUTORESET = 32768,
474    mjDSBL_NATIVECCD = 65536,
475    mjNDISABLE = 17,
476}
477pub use self::mjtDisableBit_ as mjtDisableBit;
478#[repr(u32)]
479#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
480pub enum mjtEnableBit_ {
481    mjENBL_OVERRIDE = 1,
482    mjENBL_ENERGY = 2,
483    mjENBL_FWDINV = 4,
484    mjENBL_INVDISCRETE = 8,
485    mjENBL_MULTICCD = 16,
486    mjENBL_ISLAND = 32,
487    mjNENABLE = 6,
488}
489pub use self::mjtEnableBit_ as mjtEnableBit;
490#[repr(u32)]
491#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
492pub enum mjtJoint_ {
493    mjJNT_FREE = 0,
494    mjJNT_BALL = 1,
495    mjJNT_SLIDE = 2,
496    mjJNT_HINGE = 3,
497}
498pub use self::mjtJoint_ as mjtJoint;
499#[repr(u32)]
500#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
501pub enum mjtGeom_ {
502    mjGEOM_PLANE = 0,
503    mjGEOM_HFIELD = 1,
504    mjGEOM_SPHERE = 2,
505    mjGEOM_CAPSULE = 3,
506    mjGEOM_ELLIPSOID = 4,
507    mjGEOM_CYLINDER = 5,
508    mjGEOM_BOX = 6,
509    mjGEOM_MESH = 7,
510    mjGEOM_SDF = 8,
511    mjNGEOMTYPES = 9,
512    mjGEOM_ARROW = 100,
513    mjGEOM_ARROW1 = 101,
514    mjGEOM_ARROW2 = 102,
515    mjGEOM_LINE = 103,
516    mjGEOM_LINEBOX = 104,
517    mjGEOM_FLEX = 105,
518    mjGEOM_SKIN = 106,
519    mjGEOM_LABEL = 107,
520    mjGEOM_TRIANGLE = 108,
521    mjGEOM_NONE = 1001,
522}
523pub use self::mjtGeom_ as mjtGeom;
524#[repr(u32)]
525#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
526pub enum mjtCamLight_ {
527    mjCAMLIGHT_FIXED = 0,
528    mjCAMLIGHT_TRACK = 1,
529    mjCAMLIGHT_TRACKCOM = 2,
530    mjCAMLIGHT_TARGETBODY = 3,
531    mjCAMLIGHT_TARGETBODYCOM = 4,
532}
533pub use self::mjtCamLight_ as mjtCamLight;
534#[repr(u32)]
535#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
536pub enum mjtLightType_ {
537    mjLIGHT_SPOT = 0,
538    mjLIGHT_DIRECTIONAL = 1,
539    mjLIGHT_POINT = 2,
540    mjLIGHT_IMAGE = 3,
541}
542pub use self::mjtLightType_ as mjtLightType;
543#[repr(u32)]
544#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
545pub enum mjtTexture_ {
546    mjTEXTURE_2D = 0,
547    mjTEXTURE_CUBE = 1,
548    mjTEXTURE_SKYBOX = 2,
549}
550pub use self::mjtTexture_ as mjtTexture;
551#[repr(u32)]
552#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
553pub enum mjtTextureRole_ {
554    mjTEXROLE_USER = 0,
555    mjTEXROLE_RGB = 1,
556    mjTEXROLE_OCCLUSION = 2,
557    mjTEXROLE_ROUGHNESS = 3,
558    mjTEXROLE_METALLIC = 4,
559    mjTEXROLE_NORMAL = 5,
560    mjTEXROLE_OPACITY = 6,
561    mjTEXROLE_EMISSIVE = 7,
562    mjTEXROLE_RGBA = 8,
563    mjTEXROLE_ORM = 9,
564    mjNTEXROLE = 10,
565}
566pub use self::mjtTextureRole_ as mjtTextureRole;
567#[repr(u32)]
568#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
569pub enum mjtColorSpace_ {
570    mjCOLORSPACE_AUTO = 0,
571    mjCOLORSPACE_LINEAR = 1,
572    mjCOLORSPACE_SRGB = 2,
573}
574pub use self::mjtColorSpace_ as mjtColorSpace;
575#[repr(u32)]
576#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
577pub enum mjtIntegrator_ {
578    mjINT_EULER = 0,
579    mjINT_RK4 = 1,
580    mjINT_IMPLICIT = 2,
581    mjINT_IMPLICITFAST = 3,
582}
583pub use self::mjtIntegrator_ as mjtIntegrator;
584#[repr(u32)]
585#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
586pub enum mjtCone_ {
587    mjCONE_PYRAMIDAL = 0,
588    mjCONE_ELLIPTIC = 1,
589}
590pub use self::mjtCone_ as mjtCone;
591#[repr(u32)]
592#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
593pub enum mjtJacobian_ {
594    mjJAC_DENSE = 0,
595    mjJAC_SPARSE = 1,
596    mjJAC_AUTO = 2,
597}
598pub use self::mjtJacobian_ as mjtJacobian;
599#[repr(u32)]
600#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
601pub enum mjtSolver_ {
602    mjSOL_PGS = 0,
603    mjSOL_CG = 1,
604    mjSOL_NEWTON = 2,
605}
606pub use self::mjtSolver_ as mjtSolver;
607#[repr(u32)]
608#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
609pub enum mjtEq_ {
610    mjEQ_CONNECT = 0,
611    mjEQ_WELD = 1,
612    mjEQ_JOINT = 2,
613    mjEQ_TENDON = 3,
614    mjEQ_FLEX = 4,
615    mjEQ_DISTANCE = 5,
616}
617pub use self::mjtEq_ as mjtEq;
618#[repr(u32)]
619#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
620pub enum mjtWrap_ {
621    mjWRAP_NONE = 0,
622    mjWRAP_JOINT = 1,
623    mjWRAP_PULLEY = 2,
624    mjWRAP_SITE = 3,
625    mjWRAP_SPHERE = 4,
626    mjWRAP_CYLINDER = 5,
627}
628pub use self::mjtWrap_ as mjtWrap;
629#[repr(u32)]
630#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
631pub enum mjtTrn_ {
632    mjTRN_JOINT = 0,
633    mjTRN_JOINTINPARENT = 1,
634    mjTRN_SLIDERCRANK = 2,
635    mjTRN_TENDON = 3,
636    mjTRN_SITE = 4,
637    mjTRN_BODY = 5,
638    mjTRN_UNDEFINED = 1000,
639}
640pub use self::mjtTrn_ as mjtTrn;
641#[repr(u32)]
642#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
643pub enum mjtDyn_ {
644    mjDYN_NONE = 0,
645    mjDYN_INTEGRATOR = 1,
646    mjDYN_FILTER = 2,
647    mjDYN_FILTEREXACT = 3,
648    mjDYN_MUSCLE = 4,
649    mjDYN_USER = 5,
650}
651pub use self::mjtDyn_ as mjtDyn;
652#[repr(u32)]
653#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
654pub enum mjtGain_ {
655    mjGAIN_FIXED = 0,
656    mjGAIN_AFFINE = 1,
657    mjGAIN_MUSCLE = 2,
658    mjGAIN_USER = 3,
659}
660pub use self::mjtGain_ as mjtGain;
661#[repr(u32)]
662#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
663pub enum mjtBias_ {
664    mjBIAS_NONE = 0,
665    mjBIAS_AFFINE = 1,
666    mjBIAS_MUSCLE = 2,
667    mjBIAS_USER = 3,
668}
669pub use self::mjtBias_ as mjtBias;
670#[repr(u32)]
671#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
672pub enum mjtObj_ {
673    mjOBJ_UNKNOWN = 0,
674    mjOBJ_BODY = 1,
675    mjOBJ_XBODY = 2,
676    mjOBJ_JOINT = 3,
677    mjOBJ_DOF = 4,
678    mjOBJ_GEOM = 5,
679    mjOBJ_SITE = 6,
680    mjOBJ_CAMERA = 7,
681    mjOBJ_LIGHT = 8,
682    mjOBJ_FLEX = 9,
683    mjOBJ_MESH = 10,
684    mjOBJ_SKIN = 11,
685    mjOBJ_HFIELD = 12,
686    mjOBJ_TEXTURE = 13,
687    mjOBJ_MATERIAL = 14,
688    mjOBJ_PAIR = 15,
689    mjOBJ_EXCLUDE = 16,
690    mjOBJ_EQUALITY = 17,
691    mjOBJ_TENDON = 18,
692    mjOBJ_ACTUATOR = 19,
693    mjOBJ_SENSOR = 20,
694    mjOBJ_NUMERIC = 21,
695    mjOBJ_TEXT = 22,
696    mjOBJ_TUPLE = 23,
697    mjOBJ_KEY = 24,
698    mjOBJ_PLUGIN = 25,
699    mjNOBJECT = 26,
700    mjOBJ_FRAME = 100,
701    mjOBJ_DEFAULT = 101,
702    mjOBJ_MODEL = 102,
703}
704pub use self::mjtObj_ as mjtObj;
705#[repr(u32)]
706#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
707pub enum mjtConstraint_ {
708    mjCNSTR_EQUALITY = 0,
709    mjCNSTR_FRICTION_DOF = 1,
710    mjCNSTR_FRICTION_TENDON = 2,
711    mjCNSTR_LIMIT_JOINT = 3,
712    mjCNSTR_LIMIT_TENDON = 4,
713    mjCNSTR_CONTACT_FRICTIONLESS = 5,
714    mjCNSTR_CONTACT_PYRAMIDAL = 6,
715    mjCNSTR_CONTACT_ELLIPTIC = 7,
716}
717pub use self::mjtConstraint_ as mjtConstraint;
718#[repr(u32)]
719#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
720pub enum mjtConstraintState_ {
721    mjCNSTRSTATE_SATISFIED = 0,
722    mjCNSTRSTATE_QUADRATIC = 1,
723    mjCNSTRSTATE_LINEARNEG = 2,
724    mjCNSTRSTATE_LINEARPOS = 3,
725    mjCNSTRSTATE_CONE = 4,
726}
727pub use self::mjtConstraintState_ as mjtConstraintState;
728#[repr(u32)]
729#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
730pub enum mjtSensor_ {
731    mjSENS_TOUCH = 0,
732    mjSENS_ACCELEROMETER = 1,
733    mjSENS_VELOCIMETER = 2,
734    mjSENS_GYRO = 3,
735    mjSENS_FORCE = 4,
736    mjSENS_TORQUE = 5,
737    mjSENS_MAGNETOMETER = 6,
738    mjSENS_RANGEFINDER = 7,
739    mjSENS_CAMPROJECTION = 8,
740    mjSENS_JOINTPOS = 9,
741    mjSENS_JOINTVEL = 10,
742    mjSENS_TENDONPOS = 11,
743    mjSENS_TENDONVEL = 12,
744    mjSENS_ACTUATORPOS = 13,
745    mjSENS_ACTUATORVEL = 14,
746    mjSENS_ACTUATORFRC = 15,
747    mjSENS_JOINTACTFRC = 16,
748    mjSENS_TENDONACTFRC = 17,
749    mjSENS_BALLQUAT = 18,
750    mjSENS_BALLANGVEL = 19,
751    mjSENS_JOINTLIMITPOS = 20,
752    mjSENS_JOINTLIMITVEL = 21,
753    mjSENS_JOINTLIMITFRC = 22,
754    mjSENS_TENDONLIMITPOS = 23,
755    mjSENS_TENDONLIMITVEL = 24,
756    mjSENS_TENDONLIMITFRC = 25,
757    mjSENS_FRAMEPOS = 26,
758    mjSENS_FRAMEQUAT = 27,
759    mjSENS_FRAMEXAXIS = 28,
760    mjSENS_FRAMEYAXIS = 29,
761    mjSENS_FRAMEZAXIS = 30,
762    mjSENS_FRAMELINVEL = 31,
763    mjSENS_FRAMEANGVEL = 32,
764    mjSENS_FRAMELINACC = 33,
765    mjSENS_FRAMEANGACC = 34,
766    mjSENS_SUBTREECOM = 35,
767    mjSENS_SUBTREELINVEL = 36,
768    mjSENS_SUBTREEANGMOM = 37,
769    mjSENS_INSIDESITE = 38,
770    mjSENS_GEOMDIST = 39,
771    mjSENS_GEOMNORMAL = 40,
772    mjSENS_GEOMFROMTO = 41,
773    mjSENS_CONTACT = 42,
774    mjSENS_E_POTENTIAL = 43,
775    mjSENS_E_KINETIC = 44,
776    mjSENS_CLOCK = 45,
777    mjSENS_TACTILE = 46,
778    mjSENS_PLUGIN = 47,
779    mjSENS_USER = 48,
780}
781pub use self::mjtSensor_ as mjtSensor;
782#[repr(u32)]
783#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
784pub enum mjtStage_ {
785    mjSTAGE_NONE = 0,
786    mjSTAGE_POS = 1,
787    mjSTAGE_VEL = 2,
788    mjSTAGE_ACC = 3,
789}
790pub use self::mjtStage_ as mjtStage;
791#[repr(u32)]
792#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
793pub enum mjtDataType_ {
794    mjDATATYPE_REAL = 0,
795    mjDATATYPE_POSITIVE = 1,
796    mjDATATYPE_AXIS = 2,
797    mjDATATYPE_QUATERNION = 3,
798}
799pub use self::mjtDataType_ as mjtDataType;
800#[repr(u32)]
801#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
802pub enum mjtConDataField_ {
803    mjCONDATA_FOUND = 0,
804    mjCONDATA_FORCE = 1,
805    mjCONDATA_TORQUE = 2,
806    mjCONDATA_DIST = 3,
807    mjCONDATA_POS = 4,
808    mjCONDATA_NORMAL = 5,
809    mjCONDATA_TANGENT = 6,
810    mjNCONDATA = 7,
811}
812pub use self::mjtConDataField_ as mjtConDataField;
813#[repr(u32)]
814#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
815pub enum mjtSameFrame_ {
816    mjSAMEFRAME_NONE = 0,
817    mjSAMEFRAME_BODY = 1,
818    mjSAMEFRAME_INERTIA = 2,
819    mjSAMEFRAME_BODYROT = 3,
820    mjSAMEFRAME_INERTIAROT = 4,
821}
822pub use self::mjtSameFrame_ as mjtSameFrame;
823#[repr(u32)]
824#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
825pub enum mjtLRMode_ {
826    mjLRMODE_NONE = 0,
827    mjLRMODE_MUSCLE = 1,
828    mjLRMODE_MUSCLEUSER = 2,
829    mjLRMODE_ALL = 3,
830}
831pub use self::mjtLRMode_ as mjtLRMode;
832#[repr(u32)]
833#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
834pub enum mjtFlexSelf_ {
835    mjFLEXSELF_NONE = 0,
836    mjFLEXSELF_NARROW = 1,
837    mjFLEXSELF_BVH = 2,
838    mjFLEXSELF_SAP = 3,
839    mjFLEXSELF_AUTO = 4,
840}
841pub use self::mjtFlexSelf_ as mjtFlexSelf;
842#[repr(u32)]
843#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
844pub enum mjtSDFType_ {
845    mjSDFTYPE_SINGLE = 0,
846    mjSDFTYPE_INTERSECTION = 1,
847    mjSDFTYPE_MIDSURFACE = 2,
848    mjSDFTYPE_COLLISION = 3,
849}
850pub use self::mjtSDFType_ as mjtSDFType;
851#[repr(C)]
852#[derive(Debug, Clone)]
853pub struct mjLROpt_ {
854    pub mode: ::std::os::raw::c_int,
855    pub useexisting: ::std::os::raw::c_int,
856    pub uselimit: ::std::os::raw::c_int,
857    pub accel: mjtNum,
858    pub maxforce: mjtNum,
859    pub timeconst: mjtNum,
860    pub timestep: mjtNum,
861    pub inttotal: mjtNum,
862    pub interval: mjtNum,
863    pub tolrange: mjtNum,
864}
865pub type mjLROpt = mjLROpt_;
866#[repr(C)]
867#[derive(Debug, Clone)]
868pub struct mjVFS_ {
869    pub impl_: *mut ::std::os::raw::c_void,
870}
871pub type mjVFS = mjVFS_;
872#[repr(C)]
873#[derive(Debug, Clone)]
874pub struct mjOption_ {
875    pub timestep: mjtNum,
876    pub apirate: mjtNum,
877    pub impratio: mjtNum,
878    pub tolerance: mjtNum,
879    pub ls_tolerance: mjtNum,
880    pub noslip_tolerance: mjtNum,
881    pub ccd_tolerance: mjtNum,
882    pub gravity: [mjtNum; 3usize],
883    pub wind: [mjtNum; 3usize],
884    pub magnetic: [mjtNum; 3usize],
885    pub density: mjtNum,
886    pub viscosity: mjtNum,
887    pub o_margin: mjtNum,
888    pub o_solref: [mjtNum; 2usize],
889    pub o_solimp: [mjtNum; 5usize],
890    pub o_friction: [mjtNum; 5usize],
891    pub integrator: ::std::os::raw::c_int,
892    pub cone: ::std::os::raw::c_int,
893    pub jacobian: ::std::os::raw::c_int,
894    pub solver: ::std::os::raw::c_int,
895    pub iterations: ::std::os::raw::c_int,
896    pub ls_iterations: ::std::os::raw::c_int,
897    pub noslip_iterations: ::std::os::raw::c_int,
898    pub ccd_iterations: ::std::os::raw::c_int,
899    pub disableflags: ::std::os::raw::c_int,
900    pub enableflags: ::std::os::raw::c_int,
901    pub disableactuator: ::std::os::raw::c_int,
902    pub sdf_initpoints: ::std::os::raw::c_int,
903    pub sdf_iterations: ::std::os::raw::c_int,
904}
905pub type mjOption = mjOption_;
906#[repr(C)]
907#[derive(Debug, Clone)]
908pub struct mjVisual_ {
909    pub global: mjVisual___bindgen_ty_1,
910    pub quality: mjVisual___bindgen_ty_2,
911    pub headlight: mjVisual___bindgen_ty_3,
912    pub map: mjVisual___bindgen_ty_4,
913    pub scale: mjVisual___bindgen_ty_5,
914    pub rgba: mjVisual___bindgen_ty_6,
915}
916#[repr(C)]
917#[derive(Debug, Clone)]
918pub struct mjVisual___bindgen_ty_1 {
919    pub cameraid: ::std::os::raw::c_int,
920    pub orthographic: ::std::os::raw::c_int,
921    pub fovy: f32,
922    pub ipd: f32,
923    pub azimuth: f32,
924    pub elevation: f32,
925    pub linewidth: f32,
926    pub glow: f32,
927    pub realtime: f32,
928    pub offwidth: ::std::os::raw::c_int,
929    pub offheight: ::std::os::raw::c_int,
930    pub ellipsoidinertia: ::std::os::raw::c_int,
931    pub bvactive: ::std::os::raw::c_int,
932}
933#[repr(C)]
934#[derive(Debug, Clone)]
935pub struct mjVisual___bindgen_ty_2 {
936    pub shadowsize: ::std::os::raw::c_int,
937    pub offsamples: ::std::os::raw::c_int,
938    pub numslices: ::std::os::raw::c_int,
939    pub numstacks: ::std::os::raw::c_int,
940    pub numquads: ::std::os::raw::c_int,
941}
942#[repr(C)]
943#[derive(Debug, Clone)]
944pub struct mjVisual___bindgen_ty_3 {
945    pub ambient: [f32; 3usize],
946    pub diffuse: [f32; 3usize],
947    pub specular: [f32; 3usize],
948    pub active: ::std::os::raw::c_int,
949}
950#[repr(C)]
951#[derive(Debug, Clone)]
952pub struct mjVisual___bindgen_ty_4 {
953    pub stiffness: f32,
954    pub stiffnessrot: f32,
955    pub force: f32,
956    pub torque: f32,
957    pub alpha: f32,
958    pub fogstart: f32,
959    pub fogend: f32,
960    pub znear: f32,
961    pub zfar: f32,
962    pub haze: f32,
963    pub shadowclip: f32,
964    pub shadowscale: f32,
965    pub actuatortendon: f32,
966}
967#[repr(C)]
968#[derive(Debug, Clone)]
969pub struct mjVisual___bindgen_ty_5 {
970    pub forcewidth: f32,
971    pub contactwidth: f32,
972    pub contactheight: f32,
973    pub connect: f32,
974    pub com: f32,
975    pub camera: f32,
976    pub light: f32,
977    pub selectpoint: f32,
978    pub jointlength: f32,
979    pub jointwidth: f32,
980    pub actuatorlength: f32,
981    pub actuatorwidth: f32,
982    pub framelength: f32,
983    pub framewidth: f32,
984    pub constraint: f32,
985    pub slidercrank: f32,
986    pub frustum: f32,
987}
988#[repr(C)]
989#[derive(Debug, Clone)]
990pub struct mjVisual___bindgen_ty_6 {
991    pub fog: [f32; 4usize],
992    pub haze: [f32; 4usize],
993    pub force: [f32; 4usize],
994    pub inertia: [f32; 4usize],
995    pub joint: [f32; 4usize],
996    pub actuator: [f32; 4usize],
997    pub actuatornegative: [f32; 4usize],
998    pub actuatorpositive: [f32; 4usize],
999    pub com: [f32; 4usize],
1000    pub camera: [f32; 4usize],
1001    pub light: [f32; 4usize],
1002    pub selectpoint: [f32; 4usize],
1003    pub connect: [f32; 4usize],
1004    pub contactpoint: [f32; 4usize],
1005    pub contactforce: [f32; 4usize],
1006    pub contactfriction: [f32; 4usize],
1007    pub contacttorque: [f32; 4usize],
1008    pub contactgap: [f32; 4usize],
1009    pub rangefinder: [f32; 4usize],
1010    pub constraint: [f32; 4usize],
1011    pub slidercrank: [f32; 4usize],
1012    pub crankbroken: [f32; 4usize],
1013    pub frustum: [f32; 4usize],
1014    pub bv: [f32; 4usize],
1015    pub bvactive: [f32; 4usize],
1016}
1017pub type mjVisual = mjVisual_;
1018#[repr(C)]
1019#[derive(Debug, Clone)]
1020pub struct mjStatistic_ {
1021    pub meaninertia: mjtNum,
1022    pub meanmass: mjtNum,
1023    pub meansize: mjtNum,
1024    pub extent: mjtNum,
1025    pub center: [mjtNum; 3usize],
1026}
1027pub type mjStatistic = mjStatistic_;
1028#[repr(C)]
1029#[derive(Debug, Clone)]
1030pub struct mjModel_ {
1031    pub nq: ::std::os::raw::c_int,
1032    pub nv: ::std::os::raw::c_int,
1033    pub nu: ::std::os::raw::c_int,
1034    pub na: ::std::os::raw::c_int,
1035    pub nbody: ::std::os::raw::c_int,
1036    pub nbvh: ::std::os::raw::c_int,
1037    pub nbvhstatic: ::std::os::raw::c_int,
1038    pub nbvhdynamic: ::std::os::raw::c_int,
1039    pub noct: ::std::os::raw::c_int,
1040    pub njnt: ::std::os::raw::c_int,
1041    pub ngeom: ::std::os::raw::c_int,
1042    pub nsite: ::std::os::raw::c_int,
1043    pub ncam: ::std::os::raw::c_int,
1044    pub nlight: ::std::os::raw::c_int,
1045    pub nflex: ::std::os::raw::c_int,
1046    pub nflexnode: ::std::os::raw::c_int,
1047    pub nflexvert: ::std::os::raw::c_int,
1048    pub nflexedge: ::std::os::raw::c_int,
1049    pub nflexelem: ::std::os::raw::c_int,
1050    pub nflexelemdata: ::std::os::raw::c_int,
1051    pub nflexelemedge: ::std::os::raw::c_int,
1052    pub nflexshelldata: ::std::os::raw::c_int,
1053    pub nflexevpair: ::std::os::raw::c_int,
1054    pub nflextexcoord: ::std::os::raw::c_int,
1055    pub nmesh: ::std::os::raw::c_int,
1056    pub nmeshvert: ::std::os::raw::c_int,
1057    pub nmeshnormal: ::std::os::raw::c_int,
1058    pub nmeshtexcoord: ::std::os::raw::c_int,
1059    pub nmeshface: ::std::os::raw::c_int,
1060    pub nmeshgraph: ::std::os::raw::c_int,
1061    pub nmeshpoly: ::std::os::raw::c_int,
1062    pub nmeshpolyvert: ::std::os::raw::c_int,
1063    pub nmeshpolymap: ::std::os::raw::c_int,
1064    pub nskin: ::std::os::raw::c_int,
1065    pub nskinvert: ::std::os::raw::c_int,
1066    pub nskintexvert: ::std::os::raw::c_int,
1067    pub nskinface: ::std::os::raw::c_int,
1068    pub nskinbone: ::std::os::raw::c_int,
1069    pub nskinbonevert: ::std::os::raw::c_int,
1070    pub nhfield: ::std::os::raw::c_int,
1071    pub nhfielddata: ::std::os::raw::c_int,
1072    pub ntex: ::std::os::raw::c_int,
1073    pub ntexdata: ::std::os::raw::c_int,
1074    pub nmat: ::std::os::raw::c_int,
1075    pub npair: ::std::os::raw::c_int,
1076    pub nexclude: ::std::os::raw::c_int,
1077    pub neq: ::std::os::raw::c_int,
1078    pub ntendon: ::std::os::raw::c_int,
1079    pub nwrap: ::std::os::raw::c_int,
1080    pub nsensor: ::std::os::raw::c_int,
1081    pub nnumeric: ::std::os::raw::c_int,
1082    pub nnumericdata: ::std::os::raw::c_int,
1083    pub ntext: ::std::os::raw::c_int,
1084    pub ntextdata: ::std::os::raw::c_int,
1085    pub ntuple: ::std::os::raw::c_int,
1086    pub ntupledata: ::std::os::raw::c_int,
1087    pub nkey: ::std::os::raw::c_int,
1088    pub nmocap: ::std::os::raw::c_int,
1089    pub nplugin: ::std::os::raw::c_int,
1090    pub npluginattr: ::std::os::raw::c_int,
1091    pub nuser_body: ::std::os::raw::c_int,
1092    pub nuser_jnt: ::std::os::raw::c_int,
1093    pub nuser_geom: ::std::os::raw::c_int,
1094    pub nuser_site: ::std::os::raw::c_int,
1095    pub nuser_cam: ::std::os::raw::c_int,
1096    pub nuser_tendon: ::std::os::raw::c_int,
1097    pub nuser_actuator: ::std::os::raw::c_int,
1098    pub nuser_sensor: ::std::os::raw::c_int,
1099    pub nnames: ::std::os::raw::c_int,
1100    pub npaths: ::std::os::raw::c_int,
1101    pub nnames_map: ::std::os::raw::c_int,
1102    pub nM: ::std::os::raw::c_int,
1103    pub nB: ::std::os::raw::c_int,
1104    pub nC: ::std::os::raw::c_int,
1105    pub nD: ::std::os::raw::c_int,
1106    pub nJmom: ::std::os::raw::c_int,
1107    pub ntree: ::std::os::raw::c_int,
1108    pub ngravcomp: ::std::os::raw::c_int,
1109    pub nemax: ::std::os::raw::c_int,
1110    pub njmax: ::std::os::raw::c_int,
1111    pub nconmax: ::std::os::raw::c_int,
1112    pub nuserdata: ::std::os::raw::c_int,
1113    pub nsensordata: ::std::os::raw::c_int,
1114    pub npluginstate: ::std::os::raw::c_int,
1115    pub narena: mjtSize,
1116    pub nbuffer: mjtSize,
1117    pub opt: mjOption,
1118    pub vis: mjVisual,
1119    pub stat: mjStatistic,
1120    pub buffer: *mut ::std::os::raw::c_void,
1121    pub qpos0: *mut mjtNum,
1122    pub qpos_spring: *mut mjtNum,
1123    pub body_parentid: *mut ::std::os::raw::c_int,
1124    pub body_rootid: *mut ::std::os::raw::c_int,
1125    pub body_weldid: *mut ::std::os::raw::c_int,
1126    pub body_mocapid: *mut ::std::os::raw::c_int,
1127    pub body_jntnum: *mut ::std::os::raw::c_int,
1128    pub body_jntadr: *mut ::std::os::raw::c_int,
1129    pub body_dofnum: *mut ::std::os::raw::c_int,
1130    pub body_dofadr: *mut ::std::os::raw::c_int,
1131    pub body_treeid: *mut ::std::os::raw::c_int,
1132    pub body_geomnum: *mut ::std::os::raw::c_int,
1133    pub body_geomadr: *mut ::std::os::raw::c_int,
1134    pub body_simple: *mut mjtByte,
1135    pub body_sameframe: *mut mjtByte,
1136    pub body_pos: *mut mjtNum,
1137    pub body_quat: *mut mjtNum,
1138    pub body_ipos: *mut mjtNum,
1139    pub body_iquat: *mut mjtNum,
1140    pub body_mass: *mut mjtNum,
1141    pub body_subtreemass: *mut mjtNum,
1142    pub body_inertia: *mut mjtNum,
1143    pub body_invweight0: *mut mjtNum,
1144    pub body_gravcomp: *mut mjtNum,
1145    pub body_margin: *mut mjtNum,
1146    pub body_user: *mut mjtNum,
1147    pub body_plugin: *mut ::std::os::raw::c_int,
1148    pub body_contype: *mut ::std::os::raw::c_int,
1149    pub body_conaffinity: *mut ::std::os::raw::c_int,
1150    pub body_bvhadr: *mut ::std::os::raw::c_int,
1151    pub body_bvhnum: *mut ::std::os::raw::c_int,
1152    pub bvh_depth: *mut ::std::os::raw::c_int,
1153    pub bvh_child: *mut ::std::os::raw::c_int,
1154    pub bvh_nodeid: *mut ::std::os::raw::c_int,
1155    pub bvh_aabb: *mut mjtNum,
1156    pub oct_depth: *mut ::std::os::raw::c_int,
1157    pub oct_child: *mut ::std::os::raw::c_int,
1158    pub oct_aabb: *mut mjtNum,
1159    pub oct_coeff: *mut mjtNum,
1160    pub jnt_type: *mut ::std::os::raw::c_int,
1161    pub jnt_qposadr: *mut ::std::os::raw::c_int,
1162    pub jnt_dofadr: *mut ::std::os::raw::c_int,
1163    pub jnt_bodyid: *mut ::std::os::raw::c_int,
1164    pub jnt_group: *mut ::std::os::raw::c_int,
1165    pub jnt_limited: *mut mjtByte,
1166    pub jnt_actfrclimited: *mut mjtByte,
1167    pub jnt_actgravcomp: *mut mjtByte,
1168    pub jnt_solref: *mut mjtNum,
1169    pub jnt_solimp: *mut mjtNum,
1170    pub jnt_pos: *mut mjtNum,
1171    pub jnt_axis: *mut mjtNum,
1172    pub jnt_stiffness: *mut mjtNum,
1173    pub jnt_range: *mut mjtNum,
1174    pub jnt_actfrcrange: *mut mjtNum,
1175    pub jnt_margin: *mut mjtNum,
1176    pub jnt_user: *mut mjtNum,
1177    pub dof_bodyid: *mut ::std::os::raw::c_int,
1178    pub dof_jntid: *mut ::std::os::raw::c_int,
1179    pub dof_parentid: *mut ::std::os::raw::c_int,
1180    pub dof_treeid: *mut ::std::os::raw::c_int,
1181    pub dof_Madr: *mut ::std::os::raw::c_int,
1182    pub dof_simplenum: *mut ::std::os::raw::c_int,
1183    pub dof_solref: *mut mjtNum,
1184    pub dof_solimp: *mut mjtNum,
1185    pub dof_frictionloss: *mut mjtNum,
1186    pub dof_armature: *mut mjtNum,
1187    pub dof_damping: *mut mjtNum,
1188    pub dof_invweight0: *mut mjtNum,
1189    pub dof_M0: *mut mjtNum,
1190    pub geom_type: *mut ::std::os::raw::c_int,
1191    pub geom_contype: *mut ::std::os::raw::c_int,
1192    pub geom_conaffinity: *mut ::std::os::raw::c_int,
1193    pub geom_condim: *mut ::std::os::raw::c_int,
1194    pub geom_bodyid: *mut ::std::os::raw::c_int,
1195    pub geom_dataid: *mut ::std::os::raw::c_int,
1196    pub geom_matid: *mut ::std::os::raw::c_int,
1197    pub geom_group: *mut ::std::os::raw::c_int,
1198    pub geom_priority: *mut ::std::os::raw::c_int,
1199    pub geom_plugin: *mut ::std::os::raw::c_int,
1200    pub geom_sameframe: *mut mjtByte,
1201    pub geom_solmix: *mut mjtNum,
1202    pub geom_solref: *mut mjtNum,
1203    pub geom_solimp: *mut mjtNum,
1204    pub geom_size: *mut mjtNum,
1205    pub geom_aabb: *mut mjtNum,
1206    pub geom_rbound: *mut mjtNum,
1207    pub geom_pos: *mut mjtNum,
1208    pub geom_quat: *mut mjtNum,
1209    pub geom_friction: *mut mjtNum,
1210    pub geom_margin: *mut mjtNum,
1211    pub geom_gap: *mut mjtNum,
1212    pub geom_fluid: *mut mjtNum,
1213    pub geom_user: *mut mjtNum,
1214    pub geom_rgba: *mut f32,
1215    pub site_type: *mut ::std::os::raw::c_int,
1216    pub site_bodyid: *mut ::std::os::raw::c_int,
1217    pub site_matid: *mut ::std::os::raw::c_int,
1218    pub site_group: *mut ::std::os::raw::c_int,
1219    pub site_sameframe: *mut mjtByte,
1220    pub site_size: *mut mjtNum,
1221    pub site_pos: *mut mjtNum,
1222    pub site_quat: *mut mjtNum,
1223    pub site_user: *mut mjtNum,
1224    pub site_rgba: *mut f32,
1225    pub cam_mode: *mut ::std::os::raw::c_int,
1226    pub cam_bodyid: *mut ::std::os::raw::c_int,
1227    pub cam_targetbodyid: *mut ::std::os::raw::c_int,
1228    pub cam_pos: *mut mjtNum,
1229    pub cam_quat: *mut mjtNum,
1230    pub cam_poscom0: *mut mjtNum,
1231    pub cam_pos0: *mut mjtNum,
1232    pub cam_mat0: *mut mjtNum,
1233    pub cam_orthographic: *mut ::std::os::raw::c_int,
1234    pub cam_fovy: *mut mjtNum,
1235    pub cam_ipd: *mut mjtNum,
1236    pub cam_resolution: *mut ::std::os::raw::c_int,
1237    pub cam_sensorsize: *mut f32,
1238    pub cam_intrinsic: *mut f32,
1239    pub cam_user: *mut mjtNum,
1240    pub light_mode: *mut ::std::os::raw::c_int,
1241    pub light_bodyid: *mut ::std::os::raw::c_int,
1242    pub light_targetbodyid: *mut ::std::os::raw::c_int,
1243    pub light_type: *mut ::std::os::raw::c_int,
1244    pub light_texid: *mut ::std::os::raw::c_int,
1245    pub light_castshadow: *mut mjtByte,
1246    pub light_bulbradius: *mut f32,
1247    pub light_intensity: *mut f32,
1248    pub light_range: *mut f32,
1249    pub light_active: *mut mjtByte,
1250    pub light_pos: *mut mjtNum,
1251    pub light_dir: *mut mjtNum,
1252    pub light_poscom0: *mut mjtNum,
1253    pub light_pos0: *mut mjtNum,
1254    pub light_dir0: *mut mjtNum,
1255    pub light_attenuation: *mut f32,
1256    pub light_cutoff: *mut f32,
1257    pub light_exponent: *mut f32,
1258    pub light_ambient: *mut f32,
1259    pub light_diffuse: *mut f32,
1260    pub light_specular: *mut f32,
1261    pub flex_contype: *mut ::std::os::raw::c_int,
1262    pub flex_conaffinity: *mut ::std::os::raw::c_int,
1263    pub flex_condim: *mut ::std::os::raw::c_int,
1264    pub flex_priority: *mut ::std::os::raw::c_int,
1265    pub flex_solmix: *mut mjtNum,
1266    pub flex_solref: *mut mjtNum,
1267    pub flex_solimp: *mut mjtNum,
1268    pub flex_friction: *mut mjtNum,
1269    pub flex_margin: *mut mjtNum,
1270    pub flex_gap: *mut mjtNum,
1271    pub flex_internal: *mut mjtByte,
1272    pub flex_selfcollide: *mut ::std::os::raw::c_int,
1273    pub flex_activelayers: *mut ::std::os::raw::c_int,
1274    pub flex_dim: *mut ::std::os::raw::c_int,
1275    pub flex_matid: *mut ::std::os::raw::c_int,
1276    pub flex_group: *mut ::std::os::raw::c_int,
1277    pub flex_interp: *mut ::std::os::raw::c_int,
1278    pub flex_nodeadr: *mut ::std::os::raw::c_int,
1279    pub flex_nodenum: *mut ::std::os::raw::c_int,
1280    pub flex_vertadr: *mut ::std::os::raw::c_int,
1281    pub flex_vertnum: *mut ::std::os::raw::c_int,
1282    pub flex_edgeadr: *mut ::std::os::raw::c_int,
1283    pub flex_edgenum: *mut ::std::os::raw::c_int,
1284    pub flex_elemadr: *mut ::std::os::raw::c_int,
1285    pub flex_elemnum: *mut ::std::os::raw::c_int,
1286    pub flex_elemdataadr: *mut ::std::os::raw::c_int,
1287    pub flex_elemedgeadr: *mut ::std::os::raw::c_int,
1288    pub flex_shellnum: *mut ::std::os::raw::c_int,
1289    pub flex_shelldataadr: *mut ::std::os::raw::c_int,
1290    pub flex_evpairadr: *mut ::std::os::raw::c_int,
1291    pub flex_evpairnum: *mut ::std::os::raw::c_int,
1292    pub flex_texcoordadr: *mut ::std::os::raw::c_int,
1293    pub flex_nodebodyid: *mut ::std::os::raw::c_int,
1294    pub flex_vertbodyid: *mut ::std::os::raw::c_int,
1295    pub flex_edge: *mut ::std::os::raw::c_int,
1296    pub flex_edgeflap: *mut ::std::os::raw::c_int,
1297    pub flex_elem: *mut ::std::os::raw::c_int,
1298    pub flex_elemtexcoord: *mut ::std::os::raw::c_int,
1299    pub flex_elemedge: *mut ::std::os::raw::c_int,
1300    pub flex_elemlayer: *mut ::std::os::raw::c_int,
1301    pub flex_shell: *mut ::std::os::raw::c_int,
1302    pub flex_evpair: *mut ::std::os::raw::c_int,
1303    pub flex_vert: *mut mjtNum,
1304    pub flex_vert0: *mut mjtNum,
1305    pub flex_node: *mut mjtNum,
1306    pub flex_node0: *mut mjtNum,
1307    pub flexedge_length0: *mut mjtNum,
1308    pub flexedge_invweight0: *mut mjtNum,
1309    pub flex_radius: *mut mjtNum,
1310    pub flex_stiffness: *mut mjtNum,
1311    pub flex_bending: *mut mjtNum,
1312    pub flex_damping: *mut mjtNum,
1313    pub flex_edgestiffness: *mut mjtNum,
1314    pub flex_edgedamping: *mut mjtNum,
1315    pub flex_edgeequality: *mut mjtByte,
1316    pub flex_rigid: *mut mjtByte,
1317    pub flexedge_rigid: *mut mjtByte,
1318    pub flex_centered: *mut mjtByte,
1319    pub flex_flatskin: *mut mjtByte,
1320    pub flex_bvhadr: *mut ::std::os::raw::c_int,
1321    pub flex_bvhnum: *mut ::std::os::raw::c_int,
1322    pub flex_rgba: *mut f32,
1323    pub flex_texcoord: *mut f32,
1324    pub mesh_vertadr: *mut ::std::os::raw::c_int,
1325    pub mesh_vertnum: *mut ::std::os::raw::c_int,
1326    pub mesh_faceadr: *mut ::std::os::raw::c_int,
1327    pub mesh_facenum: *mut ::std::os::raw::c_int,
1328    pub mesh_bvhadr: *mut ::std::os::raw::c_int,
1329    pub mesh_bvhnum: *mut ::std::os::raw::c_int,
1330    pub mesh_octadr: *mut ::std::os::raw::c_int,
1331    pub mesh_octnum: *mut ::std::os::raw::c_int,
1332    pub mesh_normaladr: *mut ::std::os::raw::c_int,
1333    pub mesh_normalnum: *mut ::std::os::raw::c_int,
1334    pub mesh_texcoordadr: *mut ::std::os::raw::c_int,
1335    pub mesh_texcoordnum: *mut ::std::os::raw::c_int,
1336    pub mesh_graphadr: *mut ::std::os::raw::c_int,
1337    pub mesh_vert: *mut f32,
1338    pub mesh_normal: *mut f32,
1339    pub mesh_texcoord: *mut f32,
1340    pub mesh_face: *mut ::std::os::raw::c_int,
1341    pub mesh_facenormal: *mut ::std::os::raw::c_int,
1342    pub mesh_facetexcoord: *mut ::std::os::raw::c_int,
1343    pub mesh_graph: *mut ::std::os::raw::c_int,
1344    pub mesh_scale: *mut mjtNum,
1345    pub mesh_pos: *mut mjtNum,
1346    pub mesh_quat: *mut mjtNum,
1347    pub mesh_pathadr: *mut ::std::os::raw::c_int,
1348    pub mesh_polynum: *mut ::std::os::raw::c_int,
1349    pub mesh_polyadr: *mut ::std::os::raw::c_int,
1350    pub mesh_polynormal: *mut mjtNum,
1351    pub mesh_polyvertadr: *mut ::std::os::raw::c_int,
1352    pub mesh_polyvertnum: *mut ::std::os::raw::c_int,
1353    pub mesh_polyvert: *mut ::std::os::raw::c_int,
1354    pub mesh_polymapadr: *mut ::std::os::raw::c_int,
1355    pub mesh_polymapnum: *mut ::std::os::raw::c_int,
1356    pub mesh_polymap: *mut ::std::os::raw::c_int,
1357    pub skin_matid: *mut ::std::os::raw::c_int,
1358    pub skin_group: *mut ::std::os::raw::c_int,
1359    pub skin_rgba: *mut f32,
1360    pub skin_inflate: *mut f32,
1361    pub skin_vertadr: *mut ::std::os::raw::c_int,
1362    pub skin_vertnum: *mut ::std::os::raw::c_int,
1363    pub skin_texcoordadr: *mut ::std::os::raw::c_int,
1364    pub skin_faceadr: *mut ::std::os::raw::c_int,
1365    pub skin_facenum: *mut ::std::os::raw::c_int,
1366    pub skin_boneadr: *mut ::std::os::raw::c_int,
1367    pub skin_bonenum: *mut ::std::os::raw::c_int,
1368    pub skin_vert: *mut f32,
1369    pub skin_texcoord: *mut f32,
1370    pub skin_face: *mut ::std::os::raw::c_int,
1371    pub skin_bonevertadr: *mut ::std::os::raw::c_int,
1372    pub skin_bonevertnum: *mut ::std::os::raw::c_int,
1373    pub skin_bonebindpos: *mut f32,
1374    pub skin_bonebindquat: *mut f32,
1375    pub skin_bonebodyid: *mut ::std::os::raw::c_int,
1376    pub skin_bonevertid: *mut ::std::os::raw::c_int,
1377    pub skin_bonevertweight: *mut f32,
1378    pub skin_pathadr: *mut ::std::os::raw::c_int,
1379    pub hfield_size: *mut mjtNum,
1380    pub hfield_nrow: *mut ::std::os::raw::c_int,
1381    pub hfield_ncol: *mut ::std::os::raw::c_int,
1382    pub hfield_adr: *mut ::std::os::raw::c_int,
1383    pub hfield_data: *mut f32,
1384    pub hfield_pathadr: *mut ::std::os::raw::c_int,
1385    pub tex_type: *mut ::std::os::raw::c_int,
1386    pub tex_colorspace: *mut ::std::os::raw::c_int,
1387    pub tex_height: *mut ::std::os::raw::c_int,
1388    pub tex_width: *mut ::std::os::raw::c_int,
1389    pub tex_nchannel: *mut ::std::os::raw::c_int,
1390    pub tex_adr: *mut ::std::os::raw::c_int,
1391    pub tex_data: *mut mjtByte,
1392    pub tex_pathadr: *mut ::std::os::raw::c_int,
1393    pub mat_texid: *mut ::std::os::raw::c_int,
1394    pub mat_texuniform: *mut mjtByte,
1395    pub mat_texrepeat: *mut f32,
1396    pub mat_emission: *mut f32,
1397    pub mat_specular: *mut f32,
1398    pub mat_shininess: *mut f32,
1399    pub mat_reflectance: *mut f32,
1400    pub mat_metallic: *mut f32,
1401    pub mat_roughness: *mut f32,
1402    pub mat_rgba: *mut f32,
1403    pub pair_dim: *mut ::std::os::raw::c_int,
1404    pub pair_geom1: *mut ::std::os::raw::c_int,
1405    pub pair_geom2: *mut ::std::os::raw::c_int,
1406    pub pair_signature: *mut ::std::os::raw::c_int,
1407    pub pair_solref: *mut mjtNum,
1408    pub pair_solreffriction: *mut mjtNum,
1409    pub pair_solimp: *mut mjtNum,
1410    pub pair_margin: *mut mjtNum,
1411    pub pair_gap: *mut mjtNum,
1412    pub pair_friction: *mut mjtNum,
1413    pub exclude_signature: *mut ::std::os::raw::c_int,
1414    pub eq_type: *mut ::std::os::raw::c_int,
1415    pub eq_obj1id: *mut ::std::os::raw::c_int,
1416    pub eq_obj2id: *mut ::std::os::raw::c_int,
1417    pub eq_objtype: *mut ::std::os::raw::c_int,
1418    pub eq_active0: *mut mjtByte,
1419    pub eq_solref: *mut mjtNum,
1420    pub eq_solimp: *mut mjtNum,
1421    pub eq_data: *mut mjtNum,
1422    pub tendon_adr: *mut ::std::os::raw::c_int,
1423    pub tendon_num: *mut ::std::os::raw::c_int,
1424    pub tendon_matid: *mut ::std::os::raw::c_int,
1425    pub tendon_group: *mut ::std::os::raw::c_int,
1426    pub tendon_limited: *mut mjtByte,
1427    pub tendon_actfrclimited: *mut mjtByte,
1428    pub tendon_width: *mut mjtNum,
1429    pub tendon_solref_lim: *mut mjtNum,
1430    pub tendon_solimp_lim: *mut mjtNum,
1431    pub tendon_solref_fri: *mut mjtNum,
1432    pub tendon_solimp_fri: *mut mjtNum,
1433    pub tendon_range: *mut mjtNum,
1434    pub tendon_actfrcrange: *mut mjtNum,
1435    pub tendon_margin: *mut mjtNum,
1436    pub tendon_stiffness: *mut mjtNum,
1437    pub tendon_damping: *mut mjtNum,
1438    pub tendon_armature: *mut mjtNum,
1439    pub tendon_frictionloss: *mut mjtNum,
1440    pub tendon_lengthspring: *mut mjtNum,
1441    pub tendon_length0: *mut mjtNum,
1442    pub tendon_invweight0: *mut mjtNum,
1443    pub tendon_user: *mut mjtNum,
1444    pub tendon_rgba: *mut f32,
1445    pub wrap_type: *mut ::std::os::raw::c_int,
1446    pub wrap_objid: *mut ::std::os::raw::c_int,
1447    pub wrap_prm: *mut mjtNum,
1448    pub actuator_trntype: *mut ::std::os::raw::c_int,
1449    pub actuator_dyntype: *mut ::std::os::raw::c_int,
1450    pub actuator_gaintype: *mut ::std::os::raw::c_int,
1451    pub actuator_biastype: *mut ::std::os::raw::c_int,
1452    pub actuator_trnid: *mut ::std::os::raw::c_int,
1453    pub actuator_actadr: *mut ::std::os::raw::c_int,
1454    pub actuator_actnum: *mut ::std::os::raw::c_int,
1455    pub actuator_group: *mut ::std::os::raw::c_int,
1456    pub actuator_ctrllimited: *mut mjtByte,
1457    pub actuator_forcelimited: *mut mjtByte,
1458    pub actuator_actlimited: *mut mjtByte,
1459    pub actuator_dynprm: *mut mjtNum,
1460    pub actuator_gainprm: *mut mjtNum,
1461    pub actuator_biasprm: *mut mjtNum,
1462    pub actuator_actearly: *mut mjtByte,
1463    pub actuator_ctrlrange: *mut mjtNum,
1464    pub actuator_forcerange: *mut mjtNum,
1465    pub actuator_actrange: *mut mjtNum,
1466    pub actuator_gear: *mut mjtNum,
1467    pub actuator_cranklength: *mut mjtNum,
1468    pub actuator_acc0: *mut mjtNum,
1469    pub actuator_length0: *mut mjtNum,
1470    pub actuator_lengthrange: *mut mjtNum,
1471    pub actuator_user: *mut mjtNum,
1472    pub actuator_plugin: *mut ::std::os::raw::c_int,
1473    pub sensor_type: *mut ::std::os::raw::c_int,
1474    pub sensor_datatype: *mut ::std::os::raw::c_int,
1475    pub sensor_needstage: *mut ::std::os::raw::c_int,
1476    pub sensor_objtype: *mut ::std::os::raw::c_int,
1477    pub sensor_objid: *mut ::std::os::raw::c_int,
1478    pub sensor_reftype: *mut ::std::os::raw::c_int,
1479    pub sensor_refid: *mut ::std::os::raw::c_int,
1480    pub sensor_intprm: *mut ::std::os::raw::c_int,
1481    pub sensor_dim: *mut ::std::os::raw::c_int,
1482    pub sensor_adr: *mut ::std::os::raw::c_int,
1483    pub sensor_cutoff: *mut mjtNum,
1484    pub sensor_noise: *mut mjtNum,
1485    pub sensor_user: *mut mjtNum,
1486    pub sensor_plugin: *mut ::std::os::raw::c_int,
1487    pub plugin: *mut ::std::os::raw::c_int,
1488    pub plugin_stateadr: *mut ::std::os::raw::c_int,
1489    pub plugin_statenum: *mut ::std::os::raw::c_int,
1490    pub plugin_attr: *mut ::std::os::raw::c_char,
1491    pub plugin_attradr: *mut ::std::os::raw::c_int,
1492    pub numeric_adr: *mut ::std::os::raw::c_int,
1493    pub numeric_size: *mut ::std::os::raw::c_int,
1494    pub numeric_data: *mut mjtNum,
1495    pub text_adr: *mut ::std::os::raw::c_int,
1496    pub text_size: *mut ::std::os::raw::c_int,
1497    pub text_data: *mut ::std::os::raw::c_char,
1498    pub tuple_adr: *mut ::std::os::raw::c_int,
1499    pub tuple_size: *mut ::std::os::raw::c_int,
1500    pub tuple_objtype: *mut ::std::os::raw::c_int,
1501    pub tuple_objid: *mut ::std::os::raw::c_int,
1502    pub tuple_objprm: *mut mjtNum,
1503    pub key_time: *mut mjtNum,
1504    pub key_qpos: *mut mjtNum,
1505    pub key_qvel: *mut mjtNum,
1506    pub key_act: *mut mjtNum,
1507    pub key_mpos: *mut mjtNum,
1508    pub key_mquat: *mut mjtNum,
1509    pub key_ctrl: *mut mjtNum,
1510    pub name_bodyadr: *mut ::std::os::raw::c_int,
1511    pub name_jntadr: *mut ::std::os::raw::c_int,
1512    pub name_geomadr: *mut ::std::os::raw::c_int,
1513    pub name_siteadr: *mut ::std::os::raw::c_int,
1514    pub name_camadr: *mut ::std::os::raw::c_int,
1515    pub name_lightadr: *mut ::std::os::raw::c_int,
1516    pub name_flexadr: *mut ::std::os::raw::c_int,
1517    pub name_meshadr: *mut ::std::os::raw::c_int,
1518    pub name_skinadr: *mut ::std::os::raw::c_int,
1519    pub name_hfieldadr: *mut ::std::os::raw::c_int,
1520    pub name_texadr: *mut ::std::os::raw::c_int,
1521    pub name_matadr: *mut ::std::os::raw::c_int,
1522    pub name_pairadr: *mut ::std::os::raw::c_int,
1523    pub name_excludeadr: *mut ::std::os::raw::c_int,
1524    pub name_eqadr: *mut ::std::os::raw::c_int,
1525    pub name_tendonadr: *mut ::std::os::raw::c_int,
1526    pub name_actuatoradr: *mut ::std::os::raw::c_int,
1527    pub name_sensoradr: *mut ::std::os::raw::c_int,
1528    pub name_numericadr: *mut ::std::os::raw::c_int,
1529    pub name_textadr: *mut ::std::os::raw::c_int,
1530    pub name_tupleadr: *mut ::std::os::raw::c_int,
1531    pub name_keyadr: *mut ::std::os::raw::c_int,
1532    pub name_pluginadr: *mut ::std::os::raw::c_int,
1533    pub names: *mut ::std::os::raw::c_char,
1534    pub names_map: *mut ::std::os::raw::c_int,
1535    pub paths: *mut ::std::os::raw::c_char,
1536    pub signature: u64,
1537}
1538pub type mjModel = mjModel_;
1539#[repr(u32)]
1540#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1541pub enum mjtTaskStatus_ {
1542    mjTASK_NEW = 0,
1543    mjTASK_QUEUED = 1,
1544    mjTASK_COMPLETED = 2,
1545}
1546pub use self::mjtTaskStatus_ as mjtTaskStatus;
1547pub type mjfTask = ::std::option::Option<
1548    unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
1549>;
1550#[repr(C)]
1551#[derive(Debug, Clone)]
1552pub struct mjThreadPool_ {
1553    pub nworker: ::std::os::raw::c_int,
1554}
1555pub type mjThreadPool = mjThreadPool_;
1556#[repr(C)]
1557#[derive(Debug, Clone)]
1558pub struct mjTask_ {
1559    pub func: mjfTask,
1560    pub args: *mut ::std::os::raw::c_void,
1561    pub status: ::std::os::raw::c_int,
1562}
1563pub type mjTask = mjTask_;
1564#[repr(u32)]
1565#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1566pub enum mjtState_ {
1567    mjSTATE_TIME = 1,
1568    mjSTATE_QPOS = 2,
1569    mjSTATE_QVEL = 4,
1570    mjSTATE_ACT = 8,
1571    mjSTATE_WARMSTART = 16,
1572    mjSTATE_CTRL = 32,
1573    mjSTATE_QFRC_APPLIED = 64,
1574    mjSTATE_XFRC_APPLIED = 128,
1575    mjSTATE_EQ_ACTIVE = 256,
1576    mjSTATE_MOCAP_POS = 512,
1577    mjSTATE_MOCAP_QUAT = 1024,
1578    mjSTATE_USERDATA = 2048,
1579    mjSTATE_PLUGIN = 4096,
1580    mjNSTATE = 13,
1581    mjSTATE_PHYSICS = 14,
1582    mjSTATE_FULLPHYSICS = 4111,
1583    mjSTATE_USER = 4064,
1584    mjSTATE_INTEGRATION = 8191,
1585}
1586pub use self::mjtState_ as mjtState;
1587#[repr(u32)]
1588#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1589pub enum mjtWarning_ {
1590    mjWARN_INERTIA = 0,
1591    mjWARN_CONTACTFULL = 1,
1592    mjWARN_CNSTRFULL = 2,
1593    mjWARN_VGEOMFULL = 3,
1594    mjWARN_BADQPOS = 4,
1595    mjWARN_BADQVEL = 5,
1596    mjWARN_BADQACC = 6,
1597    mjWARN_BADCTRL = 7,
1598    mjNWARNING = 8,
1599}
1600pub use self::mjtWarning_ as mjtWarning;
1601#[repr(u32)]
1602#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1603pub enum mjtTimer_ {
1604    mjTIMER_STEP = 0,
1605    mjTIMER_FORWARD = 1,
1606    mjTIMER_INVERSE = 2,
1607    mjTIMER_POSITION = 3,
1608    mjTIMER_VELOCITY = 4,
1609    mjTIMER_ACTUATION = 5,
1610    mjTIMER_CONSTRAINT = 6,
1611    mjTIMER_ADVANCE = 7,
1612    mjTIMER_POS_KINEMATICS = 8,
1613    mjTIMER_POS_INERTIA = 9,
1614    mjTIMER_POS_COLLISION = 10,
1615    mjTIMER_POS_MAKE = 11,
1616    mjTIMER_POS_PROJECT = 12,
1617    mjTIMER_COL_BROAD = 13,
1618    mjTIMER_COL_NARROW = 14,
1619    mjNTIMER = 15,
1620}
1621pub use self::mjtTimer_ as mjtTimer;
1622#[repr(C)]
1623#[derive(Debug, Clone)]
1624pub struct mjContact_ {
1625    pub dist: mjtNum,
1626    pub pos: [mjtNum; 3usize],
1627    pub frame: [mjtNum; 9usize],
1628    pub includemargin: mjtNum,
1629    pub friction: [mjtNum; 5usize],
1630    pub solref: [mjtNum; 2usize],
1631    pub solreffriction: [mjtNum; 2usize],
1632    pub solimp: [mjtNum; 5usize],
1633    pub mu: mjtNum,
1634    pub H: [mjtNum; 36usize],
1635    pub dim: ::std::os::raw::c_int,
1636    pub geom1: ::std::os::raw::c_int,
1637    pub geom2: ::std::os::raw::c_int,
1638    pub geom: [::std::os::raw::c_int; 2usize],
1639    pub flex: [::std::os::raw::c_int; 2usize],
1640    pub elem: [::std::os::raw::c_int; 2usize],
1641    pub vert: [::std::os::raw::c_int; 2usize],
1642    pub exclude: ::std::os::raw::c_int,
1643    pub efc_address: ::std::os::raw::c_int,
1644}
1645pub type mjContact = mjContact_;
1646#[repr(C)]
1647#[derive(Debug, Clone)]
1648pub struct mjWarningStat_ {
1649    pub lastinfo: ::std::os::raw::c_int,
1650    pub number: ::std::os::raw::c_int,
1651}
1652pub type mjWarningStat = mjWarningStat_;
1653#[repr(C)]
1654#[derive(Debug, Clone)]
1655pub struct mjTimerStat_ {
1656    pub duration: mjtNum,
1657    pub number: ::std::os::raw::c_int,
1658}
1659pub type mjTimerStat = mjTimerStat_;
1660#[repr(C)]
1661#[derive(Debug, Clone)]
1662pub struct mjSolverStat_ {
1663    pub improvement: mjtNum,
1664    pub gradient: mjtNum,
1665    pub lineslope: mjtNum,
1666    pub nactive: ::std::os::raw::c_int,
1667    pub nchange: ::std::os::raw::c_int,
1668    pub neval: ::std::os::raw::c_int,
1669    pub nupdate: ::std::os::raw::c_int,
1670}
1671pub type mjSolverStat = mjSolverStat_;
1672#[repr(C)]
1673#[derive(Debug, Clone)]
1674pub struct mjData_ {
1675    pub narena: mjtSize,
1676    pub nbuffer: mjtSize,
1677    pub nplugin: ::std::os::raw::c_int,
1678    pub pstack: usize,
1679    pub pbase: usize,
1680    pub parena: usize,
1681    pub maxuse_stack: mjtSize,
1682    pub maxuse_threadstack: [mjtSize; 128usize],
1683    pub maxuse_arena: mjtSize,
1684    pub maxuse_con: ::std::os::raw::c_int,
1685    pub maxuse_efc: ::std::os::raw::c_int,
1686    pub solver: [mjSolverStat; 4000usize],
1687    pub solver_niter: [::std::os::raw::c_int; 20usize],
1688    pub solver_nnz: [::std::os::raw::c_int; 20usize],
1689    pub solver_fwdinv: [mjtNum; 2usize],
1690    pub warning: [mjWarningStat; 8usize],
1691    pub timer: [mjTimerStat; 15usize],
1692    pub ncon: ::std::os::raw::c_int,
1693    pub ne: ::std::os::raw::c_int,
1694    pub nf: ::std::os::raw::c_int,
1695    pub nl: ::std::os::raw::c_int,
1696    pub nefc: ::std::os::raw::c_int,
1697    pub nJ: ::std::os::raw::c_int,
1698    pub nA: ::std::os::raw::c_int,
1699    pub nisland: ::std::os::raw::c_int,
1700    pub nidof: ::std::os::raw::c_int,
1701    pub time: mjtNum,
1702    pub energy: [mjtNum; 2usize],
1703    pub buffer: *mut ::std::os::raw::c_void,
1704    pub arena: *mut ::std::os::raw::c_void,
1705    pub qpos: *mut mjtNum,
1706    pub qvel: *mut mjtNum,
1707    pub act: *mut mjtNum,
1708    pub qacc_warmstart: *mut mjtNum,
1709    pub plugin_state: *mut mjtNum,
1710    pub ctrl: *mut mjtNum,
1711    pub qfrc_applied: *mut mjtNum,
1712    pub xfrc_applied: *mut mjtNum,
1713    pub eq_active: *mut mjtByte,
1714    pub mocap_pos: *mut mjtNum,
1715    pub mocap_quat: *mut mjtNum,
1716    pub qacc: *mut mjtNum,
1717    pub act_dot: *mut mjtNum,
1718    pub userdata: *mut mjtNum,
1719    pub sensordata: *mut mjtNum,
1720    pub plugin: *mut ::std::os::raw::c_int,
1721    pub plugin_data: *mut usize,
1722    pub xpos: *mut mjtNum,
1723    pub xquat: *mut mjtNum,
1724    pub xmat: *mut mjtNum,
1725    pub xipos: *mut mjtNum,
1726    pub ximat: *mut mjtNum,
1727    pub xanchor: *mut mjtNum,
1728    pub xaxis: *mut mjtNum,
1729    pub geom_xpos: *mut mjtNum,
1730    pub geom_xmat: *mut mjtNum,
1731    pub site_xpos: *mut mjtNum,
1732    pub site_xmat: *mut mjtNum,
1733    pub cam_xpos: *mut mjtNum,
1734    pub cam_xmat: *mut mjtNum,
1735    pub light_xpos: *mut mjtNum,
1736    pub light_xdir: *mut mjtNum,
1737    pub subtree_com: *mut mjtNum,
1738    pub cdof: *mut mjtNum,
1739    pub cinert: *mut mjtNum,
1740    pub flexvert_xpos: *mut mjtNum,
1741    pub flexelem_aabb: *mut mjtNum,
1742    pub flexedge_J_rownnz: *mut ::std::os::raw::c_int,
1743    pub flexedge_J_rowadr: *mut ::std::os::raw::c_int,
1744    pub flexedge_J_colind: *mut ::std::os::raw::c_int,
1745    pub flexedge_J: *mut mjtNum,
1746    pub flexedge_length: *mut mjtNum,
1747    pub bvh_aabb_dyn: *mut mjtNum,
1748    pub ten_wrapadr: *mut ::std::os::raw::c_int,
1749    pub ten_wrapnum: *mut ::std::os::raw::c_int,
1750    pub ten_J_rownnz: *mut ::std::os::raw::c_int,
1751    pub ten_J_rowadr: *mut ::std::os::raw::c_int,
1752    pub ten_J_colind: *mut ::std::os::raw::c_int,
1753    pub ten_J: *mut mjtNum,
1754    pub ten_length: *mut mjtNum,
1755    pub wrap_obj: *mut ::std::os::raw::c_int,
1756    pub wrap_xpos: *mut mjtNum,
1757    pub actuator_length: *mut mjtNum,
1758    pub moment_rownnz: *mut ::std::os::raw::c_int,
1759    pub moment_rowadr: *mut ::std::os::raw::c_int,
1760    pub moment_colind: *mut ::std::os::raw::c_int,
1761    pub actuator_moment: *mut mjtNum,
1762    pub crb: *mut mjtNum,
1763    pub qM: *mut mjtNum,
1764    pub M: *mut mjtNum,
1765    pub qLD: *mut mjtNum,
1766    pub qLDiagInv: *mut mjtNum,
1767    pub bvh_active: *mut mjtByte,
1768    pub flexedge_velocity: *mut mjtNum,
1769    pub ten_velocity: *mut mjtNum,
1770    pub actuator_velocity: *mut mjtNum,
1771    pub cvel: *mut mjtNum,
1772    pub cdof_dot: *mut mjtNum,
1773    pub qfrc_bias: *mut mjtNum,
1774    pub qfrc_spring: *mut mjtNum,
1775    pub qfrc_damper: *mut mjtNum,
1776    pub qfrc_gravcomp: *mut mjtNum,
1777    pub qfrc_fluid: *mut mjtNum,
1778    pub qfrc_passive: *mut mjtNum,
1779    pub subtree_linvel: *mut mjtNum,
1780    pub subtree_angmom: *mut mjtNum,
1781    pub qH: *mut mjtNum,
1782    pub qHDiagInv: *mut mjtNum,
1783    pub B_rownnz: *mut ::std::os::raw::c_int,
1784    pub B_rowadr: *mut ::std::os::raw::c_int,
1785    pub B_colind: *mut ::std::os::raw::c_int,
1786    pub M_rownnz: *mut ::std::os::raw::c_int,
1787    pub M_rowadr: *mut ::std::os::raw::c_int,
1788    pub M_colind: *mut ::std::os::raw::c_int,
1789    pub mapM2M: *mut ::std::os::raw::c_int,
1790    pub D_rownnz: *mut ::std::os::raw::c_int,
1791    pub D_rowadr: *mut ::std::os::raw::c_int,
1792    pub D_diag: *mut ::std::os::raw::c_int,
1793    pub D_colind: *mut ::std::os::raw::c_int,
1794    pub mapM2D: *mut ::std::os::raw::c_int,
1795    pub mapD2M: *mut ::std::os::raw::c_int,
1796    pub qDeriv: *mut mjtNum,
1797    pub qLU: *mut mjtNum,
1798    pub actuator_force: *mut mjtNum,
1799    pub qfrc_actuator: *mut mjtNum,
1800    pub qfrc_smooth: *mut mjtNum,
1801    pub qacc_smooth: *mut mjtNum,
1802    pub qfrc_constraint: *mut mjtNum,
1803    pub qfrc_inverse: *mut mjtNum,
1804    pub cacc: *mut mjtNum,
1805    pub cfrc_int: *mut mjtNum,
1806    pub cfrc_ext: *mut mjtNum,
1807    pub contact: *mut mjContact,
1808    pub efc_type: *mut ::std::os::raw::c_int,
1809    pub efc_id: *mut ::std::os::raw::c_int,
1810    pub efc_J_rownnz: *mut ::std::os::raw::c_int,
1811    pub efc_J_rowadr: *mut ::std::os::raw::c_int,
1812    pub efc_J_rowsuper: *mut ::std::os::raw::c_int,
1813    pub efc_J_colind: *mut ::std::os::raw::c_int,
1814    pub efc_JT_rownnz: *mut ::std::os::raw::c_int,
1815    pub efc_JT_rowadr: *mut ::std::os::raw::c_int,
1816    pub efc_JT_rowsuper: *mut ::std::os::raw::c_int,
1817    pub efc_JT_colind: *mut ::std::os::raw::c_int,
1818    pub efc_J: *mut mjtNum,
1819    pub efc_JT: *mut mjtNum,
1820    pub efc_pos: *mut mjtNum,
1821    pub efc_margin: *mut mjtNum,
1822    pub efc_frictionloss: *mut mjtNum,
1823    pub efc_diagApprox: *mut mjtNum,
1824    pub efc_KBIP: *mut mjtNum,
1825    pub efc_D: *mut mjtNum,
1826    pub efc_R: *mut mjtNum,
1827    pub tendon_efcadr: *mut ::std::os::raw::c_int,
1828    pub dof_island: *mut ::std::os::raw::c_int,
1829    pub island_nv: *mut ::std::os::raw::c_int,
1830    pub island_idofadr: *mut ::std::os::raw::c_int,
1831    pub island_dofadr: *mut ::std::os::raw::c_int,
1832    pub map_dof2idof: *mut ::std::os::raw::c_int,
1833    pub map_idof2dof: *mut ::std::os::raw::c_int,
1834    pub ifrc_smooth: *mut mjtNum,
1835    pub iacc_smooth: *mut mjtNum,
1836    pub iM_rownnz: *mut ::std::os::raw::c_int,
1837    pub iM_rowadr: *mut ::std::os::raw::c_int,
1838    pub iM_colind: *mut ::std::os::raw::c_int,
1839    pub iM: *mut mjtNum,
1840    pub iLD: *mut mjtNum,
1841    pub iLDiagInv: *mut mjtNum,
1842    pub iacc: *mut mjtNum,
1843    pub efc_island: *mut ::std::os::raw::c_int,
1844    pub island_ne: *mut ::std::os::raw::c_int,
1845    pub island_nf: *mut ::std::os::raw::c_int,
1846    pub island_nefc: *mut ::std::os::raw::c_int,
1847    pub island_iefcadr: *mut ::std::os::raw::c_int,
1848    pub map_efc2iefc: *mut ::std::os::raw::c_int,
1849    pub map_iefc2efc: *mut ::std::os::raw::c_int,
1850    pub iefc_type: *mut ::std::os::raw::c_int,
1851    pub iefc_id: *mut ::std::os::raw::c_int,
1852    pub iefc_J_rownnz: *mut ::std::os::raw::c_int,
1853    pub iefc_J_rowadr: *mut ::std::os::raw::c_int,
1854    pub iefc_J_rowsuper: *mut ::std::os::raw::c_int,
1855    pub iefc_J_colind: *mut ::std::os::raw::c_int,
1856    pub iefc_JT_rownnz: *mut ::std::os::raw::c_int,
1857    pub iefc_JT_rowadr: *mut ::std::os::raw::c_int,
1858    pub iefc_JT_rowsuper: *mut ::std::os::raw::c_int,
1859    pub iefc_JT_colind: *mut ::std::os::raw::c_int,
1860    pub iefc_J: *mut mjtNum,
1861    pub iefc_JT: *mut mjtNum,
1862    pub iefc_frictionloss: *mut mjtNum,
1863    pub iefc_D: *mut mjtNum,
1864    pub iefc_R: *mut mjtNum,
1865    pub efc_AR_rownnz: *mut ::std::os::raw::c_int,
1866    pub efc_AR_rowadr: *mut ::std::os::raw::c_int,
1867    pub efc_AR_colind: *mut ::std::os::raw::c_int,
1868    pub efc_AR: *mut mjtNum,
1869    pub efc_vel: *mut mjtNum,
1870    pub efc_aref: *mut mjtNum,
1871    pub efc_b: *mut mjtNum,
1872    pub iefc_aref: *mut mjtNum,
1873    pub iefc_state: *mut ::std::os::raw::c_int,
1874    pub iefc_force: *mut mjtNum,
1875    pub efc_state: *mut ::std::os::raw::c_int,
1876    pub efc_force: *mut mjtNum,
1877    pub ifrc_constraint: *mut mjtNum,
1878    pub threadpool: usize,
1879    pub signature: u64,
1880}
1881pub type mjData = mjData_;
1882pub type mjfGeneric =
1883    ::std::option::Option<unsafe extern "C" fn(m: *const mjModel, d: *mut mjData)>;
1884pub type mjfConFilt = ::std::option::Option<
1885    unsafe extern "C" fn(
1886        m: *const mjModel,
1887        d: *mut mjData,
1888        geom1: ::std::os::raw::c_int,
1889        geom2: ::std::os::raw::c_int,
1890    ) -> ::std::os::raw::c_int,
1891>;
1892pub type mjfSensor = ::std::option::Option<
1893    unsafe extern "C" fn(m: *const mjModel, d: *mut mjData, stage: ::std::os::raw::c_int),
1894>;
1895pub type mjfTime = ::std::option::Option<unsafe extern "C" fn() -> mjtNum>;
1896pub type mjfAct = ::std::option::Option<
1897    unsafe extern "C" fn(m: *const mjModel, d: *const mjData, id: ::std::os::raw::c_int) -> mjtNum,
1898>;
1899pub type mjfCollision = ::std::option::Option<
1900    unsafe extern "C" fn(
1901        m: *const mjModel,
1902        d: *const mjData,
1903        con: *mut mjContact,
1904        g1: ::std::os::raw::c_int,
1905        g2: ::std::os::raw::c_int,
1906        margin: mjtNum,
1907    ) -> ::std::os::raw::c_int,
1908>;
1909#[repr(u32)]
1910#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1911pub enum mjtCatBit_ {
1912    mjCAT_STATIC = 1,
1913    mjCAT_DYNAMIC = 2,
1914    mjCAT_DECOR = 4,
1915    mjCAT_ALL = 7,
1916}
1917pub use self::mjtCatBit_ as mjtCatBit;
1918#[repr(u32)]
1919#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1920pub enum mjtMouse_ {
1921    mjMOUSE_NONE = 0,
1922    mjMOUSE_ROTATE_V = 1,
1923    mjMOUSE_ROTATE_H = 2,
1924    mjMOUSE_MOVE_V = 3,
1925    mjMOUSE_MOVE_H = 4,
1926    mjMOUSE_ZOOM = 5,
1927    mjMOUSE_SELECT = 6,
1928}
1929pub use self::mjtMouse_ as mjtMouse;
1930#[repr(u32)]
1931#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1932pub enum mjtPertBit_ {
1933    mjPERT_TRANSLATE = 1,
1934    mjPERT_ROTATE = 2,
1935}
1936pub use self::mjtPertBit_ as mjtPertBit;
1937#[repr(u32)]
1938#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1939pub enum mjtCamera_ {
1940    mjCAMERA_FREE = 0,
1941    mjCAMERA_TRACKING = 1,
1942    mjCAMERA_FIXED = 2,
1943    mjCAMERA_USER = 3,
1944}
1945pub use self::mjtCamera_ as mjtCamera;
1946#[repr(u32)]
1947#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1948pub enum mjtLabel_ {
1949    mjLABEL_NONE = 0,
1950    mjLABEL_BODY = 1,
1951    mjLABEL_JOINT = 2,
1952    mjLABEL_GEOM = 3,
1953    mjLABEL_SITE = 4,
1954    mjLABEL_CAMERA = 5,
1955    mjLABEL_LIGHT = 6,
1956    mjLABEL_TENDON = 7,
1957    mjLABEL_ACTUATOR = 8,
1958    mjLABEL_CONSTRAINT = 9,
1959    mjLABEL_FLEX = 10,
1960    mjLABEL_SKIN = 11,
1961    mjLABEL_SELECTION = 12,
1962    mjLABEL_SELPNT = 13,
1963    mjLABEL_CONTACTPOINT = 14,
1964    mjLABEL_CONTACTFORCE = 15,
1965    mjLABEL_ISLAND = 16,
1966    mjNLABEL = 17,
1967}
1968pub use self::mjtLabel_ as mjtLabel;
1969#[repr(u32)]
1970#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1971pub enum mjtFrame_ {
1972    mjFRAME_NONE = 0,
1973    mjFRAME_BODY = 1,
1974    mjFRAME_GEOM = 2,
1975    mjFRAME_SITE = 3,
1976    mjFRAME_CAMERA = 4,
1977    mjFRAME_LIGHT = 5,
1978    mjFRAME_CONTACT = 6,
1979    mjFRAME_WORLD = 7,
1980    mjNFRAME = 8,
1981}
1982pub use self::mjtFrame_ as mjtFrame;
1983#[repr(u32)]
1984#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
1985pub enum mjtVisFlag_ {
1986    mjVIS_CONVEXHULL = 0,
1987    mjVIS_TEXTURE = 1,
1988    mjVIS_JOINT = 2,
1989    mjVIS_CAMERA = 3,
1990    mjVIS_ACTUATOR = 4,
1991    mjVIS_ACTIVATION = 5,
1992    mjVIS_LIGHT = 6,
1993    mjVIS_TENDON = 7,
1994    mjVIS_RANGEFINDER = 8,
1995    mjVIS_CONSTRAINT = 9,
1996    mjVIS_INERTIA = 10,
1997    mjVIS_SCLINERTIA = 11,
1998    mjVIS_PERTFORCE = 12,
1999    mjVIS_PERTOBJ = 13,
2000    mjVIS_CONTACTPOINT = 14,
2001    mjVIS_ISLAND = 15,
2002    mjVIS_CONTACTFORCE = 16,
2003    mjVIS_CONTACTSPLIT = 17,
2004    mjVIS_TRANSPARENT = 18,
2005    mjVIS_AUTOCONNECT = 19,
2006    mjVIS_COM = 20,
2007    mjVIS_SELECT = 21,
2008    mjVIS_STATIC = 22,
2009    mjVIS_SKIN = 23,
2010    mjVIS_FLEXVERT = 24,
2011    mjVIS_FLEXEDGE = 25,
2012    mjVIS_FLEXFACE = 26,
2013    mjVIS_FLEXSKIN = 27,
2014    mjVIS_BODYBVH = 28,
2015    mjVIS_MESHBVH = 29,
2016    mjVIS_SDFITER = 30,
2017    mjNVISFLAG = 31,
2018}
2019pub use self::mjtVisFlag_ as mjtVisFlag;
2020#[repr(u32)]
2021#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2022pub enum mjtRndFlag_ {
2023    mjRND_SHADOW = 0,
2024    mjRND_WIREFRAME = 1,
2025    mjRND_REFLECTION = 2,
2026    mjRND_ADDITIVE = 3,
2027    mjRND_SKYBOX = 4,
2028    mjRND_FOG = 5,
2029    mjRND_HAZE = 6,
2030    mjRND_SEGMENT = 7,
2031    mjRND_IDCOLOR = 8,
2032    mjRND_CULL_FACE = 9,
2033    mjNRNDFLAG = 10,
2034}
2035pub use self::mjtRndFlag_ as mjtRndFlag;
2036#[repr(u32)]
2037#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2038pub enum mjtStereo_ {
2039    mjSTEREO_NONE = 0,
2040    mjSTEREO_QUADBUFFERED = 1,
2041    mjSTEREO_SIDEBYSIDE = 2,
2042}
2043pub use self::mjtStereo_ as mjtStereo;
2044#[repr(C)]
2045#[derive(Debug, Clone)]
2046pub struct mjvPerturb_ {
2047    pub select: ::std::os::raw::c_int,
2048    pub flexselect: ::std::os::raw::c_int,
2049    pub skinselect: ::std::os::raw::c_int,
2050    pub active: ::std::os::raw::c_int,
2051    pub active2: ::std::os::raw::c_int,
2052    pub refpos: [mjtNum; 3usize],
2053    pub refquat: [mjtNum; 4usize],
2054    pub refselpos: [mjtNum; 3usize],
2055    pub localpos: [mjtNum; 3usize],
2056    pub localmass: mjtNum,
2057    pub scale: mjtNum,
2058}
2059pub type mjvPerturb = mjvPerturb_;
2060#[repr(C)]
2061#[derive(Debug, Clone)]
2062pub struct mjvCamera_ {
2063    pub type_: ::std::os::raw::c_int,
2064    pub fixedcamid: ::std::os::raw::c_int,
2065    pub trackbodyid: ::std::os::raw::c_int,
2066    pub lookat: [mjtNum; 3usize],
2067    pub distance: mjtNum,
2068    pub azimuth: mjtNum,
2069    pub elevation: mjtNum,
2070    pub orthographic: ::std::os::raw::c_int,
2071}
2072pub type mjvCamera = mjvCamera_;
2073#[repr(C)]
2074#[derive(Debug, Clone)]
2075pub struct mjvGLCamera_ {
2076    pub pos: [f32; 3usize],
2077    pub forward: [f32; 3usize],
2078    pub up: [f32; 3usize],
2079    pub frustum_center: f32,
2080    pub frustum_width: f32,
2081    pub frustum_bottom: f32,
2082    pub frustum_top: f32,
2083    pub frustum_near: f32,
2084    pub frustum_far: f32,
2085    pub orthographic: ::std::os::raw::c_int,
2086}
2087pub type mjvGLCamera = mjvGLCamera_;
2088#[repr(C)]
2089#[derive(Debug, Clone)]
2090pub struct mjvGeom_ {
2091    pub type_: ::std::os::raw::c_int,
2092    pub dataid: ::std::os::raw::c_int,
2093    pub objtype: ::std::os::raw::c_int,
2094    pub objid: ::std::os::raw::c_int,
2095    pub category: ::std::os::raw::c_int,
2096    pub matid: ::std::os::raw::c_int,
2097    pub texcoord: ::std::os::raw::c_int,
2098    pub segid: ::std::os::raw::c_int,
2099    pub size: [f32; 3usize],
2100    pub pos: [f32; 3usize],
2101    pub mat: [f32; 9usize],
2102    pub rgba: [f32; 4usize],
2103    pub emission: f32,
2104    pub specular: f32,
2105    pub shininess: f32,
2106    pub reflectance: f32,
2107    pub label: [::std::os::raw::c_char; 100usize],
2108    pub camdist: f32,
2109    pub modelrbound: f32,
2110    pub transparent: mjtByte,
2111}
2112pub type mjvGeom = mjvGeom_;
2113#[repr(C)]
2114#[derive(Debug, Clone)]
2115pub struct mjvLight_ {
2116    pub pos: [f32; 3usize],
2117    pub dir: [f32; 3usize],
2118    pub type_: ::std::os::raw::c_int,
2119    pub texid: ::std::os::raw::c_int,
2120    pub attenuation: [f32; 3usize],
2121    pub cutoff: f32,
2122    pub exponent: f32,
2123    pub ambient: [f32; 3usize],
2124    pub diffuse: [f32; 3usize],
2125    pub specular: [f32; 3usize],
2126    pub headlight: mjtByte,
2127    pub castshadow: mjtByte,
2128    pub bulbradius: f32,
2129    pub intensity: f32,
2130    pub range: f32,
2131}
2132pub type mjvLight = mjvLight_;
2133#[repr(C)]
2134#[derive(Debug, Clone)]
2135pub struct mjvOption_ {
2136    pub label: ::std::os::raw::c_int,
2137    pub frame: ::std::os::raw::c_int,
2138    pub geomgroup: [mjtByte; 6usize],
2139    pub sitegroup: [mjtByte; 6usize],
2140    pub jointgroup: [mjtByte; 6usize],
2141    pub tendongroup: [mjtByte; 6usize],
2142    pub actuatorgroup: [mjtByte; 6usize],
2143    pub flexgroup: [mjtByte; 6usize],
2144    pub skingroup: [mjtByte; 6usize],
2145    pub flags: [mjtByte; 31usize],
2146    pub bvh_depth: ::std::os::raw::c_int,
2147    pub flex_layer: ::std::os::raw::c_int,
2148}
2149pub type mjvOption = mjvOption_;
2150#[repr(C)]
2151#[derive(Debug, Clone)]
2152pub struct mjvScene_ {
2153    pub maxgeom: ::std::os::raw::c_int,
2154    pub ngeom: ::std::os::raw::c_int,
2155    pub geoms: *mut mjvGeom,
2156    pub geomorder: *mut ::std::os::raw::c_int,
2157    pub nflex: ::std::os::raw::c_int,
2158    pub flexedgeadr: *mut ::std::os::raw::c_int,
2159    pub flexedgenum: *mut ::std::os::raw::c_int,
2160    pub flexvertadr: *mut ::std::os::raw::c_int,
2161    pub flexvertnum: *mut ::std::os::raw::c_int,
2162    pub flexfaceadr: *mut ::std::os::raw::c_int,
2163    pub flexfacenum: *mut ::std::os::raw::c_int,
2164    pub flexfaceused: *mut ::std::os::raw::c_int,
2165    pub flexedge: *mut ::std::os::raw::c_int,
2166    pub flexvert: *mut f32,
2167    pub flexface: *mut f32,
2168    pub flexnormal: *mut f32,
2169    pub flextexcoord: *mut f32,
2170    pub flexvertopt: mjtByte,
2171    pub flexedgeopt: mjtByte,
2172    pub flexfaceopt: mjtByte,
2173    pub flexskinopt: mjtByte,
2174    pub nskin: ::std::os::raw::c_int,
2175    pub skinfacenum: *mut ::std::os::raw::c_int,
2176    pub skinvertadr: *mut ::std::os::raw::c_int,
2177    pub skinvertnum: *mut ::std::os::raw::c_int,
2178    pub skinvert: *mut f32,
2179    pub skinnormal: *mut f32,
2180    pub nlight: ::std::os::raw::c_int,
2181    pub lights: [mjvLight; 100usize],
2182    pub camera: [mjvGLCamera; 2usize],
2183    pub enabletransform: mjtByte,
2184    pub translate: [f32; 3usize],
2185    pub rotate: [f32; 4usize],
2186    pub scale: f32,
2187    pub stereo: ::std::os::raw::c_int,
2188    pub flags: [mjtByte; 10usize],
2189    pub framewidth: ::std::os::raw::c_int,
2190    pub framergb: [f32; 3usize],
2191}
2192pub type mjvScene = mjvScene_;
2193#[repr(C)]
2194#[derive(Debug, Clone)]
2195pub struct mjvFigure_ {
2196    pub flg_legend: ::std::os::raw::c_int,
2197    pub flg_ticklabel: [::std::os::raw::c_int; 2usize],
2198    pub flg_extend: ::std::os::raw::c_int,
2199    pub flg_barplot: ::std::os::raw::c_int,
2200    pub flg_selection: ::std::os::raw::c_int,
2201    pub flg_symmetric: ::std::os::raw::c_int,
2202    pub linewidth: f32,
2203    pub gridwidth: f32,
2204    pub gridsize: [::std::os::raw::c_int; 2usize],
2205    pub gridrgb: [f32; 3usize],
2206    pub figurergba: [f32; 4usize],
2207    pub panergba: [f32; 4usize],
2208    pub legendrgba: [f32; 4usize],
2209    pub textrgb: [f32; 3usize],
2210    pub linergb: [[f32; 3usize]; 100usize],
2211    pub range: [[f32; 2usize]; 2usize],
2212    pub xformat: [::std::os::raw::c_char; 20usize],
2213    pub yformat: [::std::os::raw::c_char; 20usize],
2214    pub minwidth: [::std::os::raw::c_char; 20usize],
2215    pub title: [::std::os::raw::c_char; 1000usize],
2216    pub xlabel: [::std::os::raw::c_char; 100usize],
2217    pub linename: [[::std::os::raw::c_char; 100usize]; 100usize],
2218    pub legendoffset: ::std::os::raw::c_int,
2219    pub subplot: ::std::os::raw::c_int,
2220    pub highlight: [::std::os::raw::c_int; 2usize],
2221    pub highlightid: ::std::os::raw::c_int,
2222    pub selection: f32,
2223    pub linepnt: [::std::os::raw::c_int; 100usize],
2224    pub linedata: [[f32; 2002usize]; 100usize],
2225    pub xaxispixel: [::std::os::raw::c_int; 2usize],
2226    pub yaxispixel: [::std::os::raw::c_int; 2usize],
2227    pub xaxisdata: [f32; 2usize],
2228    pub yaxisdata: [f32; 2usize],
2229}
2230pub type mjvFigure = mjvFigure_;
2231#[repr(C)]
2232#[derive(Debug, Clone)]
2233pub struct mjResource_ {
2234    pub name: *mut ::std::os::raw::c_char,
2235    pub data: *mut ::std::os::raw::c_void,
2236    pub timestamp: [::std::os::raw::c_char; 512usize],
2237    pub provider: *const mjpResourceProvider,
2238}
2239pub type mjResource = mjResource_;
2240pub type mjfOpenResource =
2241    ::std::option::Option<unsafe extern "C" fn(resource: *mut mjResource) -> ::std::os::raw::c_int>;
2242pub type mjfReadResource = ::std::option::Option<
2243    unsafe extern "C" fn(
2244        resource: *mut mjResource,
2245        buffer: *mut *const ::std::os::raw::c_void,
2246    ) -> ::std::os::raw::c_int,
2247>;
2248pub type mjfCloseResource = ::std::option::Option<unsafe extern "C" fn(resource: *mut mjResource)>;
2249pub type mjfGetResourceDir = ::std::option::Option<
2250    unsafe extern "C" fn(
2251        resource: *mut mjResource,
2252        dir: *mut *const ::std::os::raw::c_char,
2253        ndir: *mut ::std::os::raw::c_int,
2254    ),
2255>;
2256pub type mjfResourceModified = ::std::option::Option<
2257    unsafe extern "C" fn(
2258        resource: *const mjResource,
2259        timestamp: *const ::std::os::raw::c_char,
2260    ) -> ::std::os::raw::c_int,
2261>;
2262#[repr(C)]
2263#[derive(Debug, Clone)]
2264pub struct mjpResourceProvider {
2265    pub prefix: *const ::std::os::raw::c_char,
2266    pub open: mjfOpenResource,
2267    pub read: mjfReadResource,
2268    pub close: mjfCloseResource,
2269    pub getdir: mjfGetResourceDir,
2270    pub modified: mjfResourceModified,
2271    pub data: *mut ::std::os::raw::c_void,
2272}
2273#[repr(u32)]
2274#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2275pub enum mjtPluginCapabilityBit_ {
2276    mjPLUGIN_ACTUATOR = 1,
2277    mjPLUGIN_SENSOR = 2,
2278    mjPLUGIN_PASSIVE = 4,
2279    mjPLUGIN_SDF = 8,
2280}
2281pub use self::mjtPluginCapabilityBit_ as mjtPluginCapabilityBit;
2282#[repr(C)]
2283#[derive(Debug, Clone)]
2284pub struct mjpPlugin_ {
2285    pub name: *const ::std::os::raw::c_char,
2286    pub nattribute: ::std::os::raw::c_int,
2287    pub attributes: *const *const ::std::os::raw::c_char,
2288    pub capabilityflags: ::std::os::raw::c_int,
2289    pub needstage: ::std::os::raw::c_int,
2290    pub nstate: ::std::option::Option<
2291        unsafe extern "C" fn(
2292            m: *const mjModel,
2293            instance: ::std::os::raw::c_int,
2294        ) -> ::std::os::raw::c_int,
2295    >,
2296    pub nsensordata: ::std::option::Option<
2297        unsafe extern "C" fn(
2298            m: *const mjModel,
2299            instance: ::std::os::raw::c_int,
2300            sensor_id: ::std::os::raw::c_int,
2301        ) -> ::std::os::raw::c_int,
2302    >,
2303    pub init: ::std::option::Option<
2304        unsafe extern "C" fn(
2305            m: *const mjModel,
2306            d: *mut mjData,
2307            instance: ::std::os::raw::c_int,
2308        ) -> ::std::os::raw::c_int,
2309    >,
2310    pub destroy: ::std::option::Option<
2311        unsafe extern "C" fn(d: *mut mjData, instance: ::std::os::raw::c_int),
2312    >,
2313    pub copy: ::std::option::Option<
2314        unsafe extern "C" fn(
2315            dest: *mut mjData,
2316            m: *const mjModel,
2317            src: *const mjData,
2318            instance: ::std::os::raw::c_int,
2319        ),
2320    >,
2321    pub reset: ::std::option::Option<
2322        unsafe extern "C" fn(
2323            m: *const mjModel,
2324            plugin_state: *mut mjtNum,
2325            plugin_data: *mut ::std::os::raw::c_void,
2326            instance: ::std::os::raw::c_int,
2327        ),
2328    >,
2329    pub compute: ::std::option::Option<
2330        unsafe extern "C" fn(
2331            m: *const mjModel,
2332            d: *mut mjData,
2333            instance: ::std::os::raw::c_int,
2334            capability_bit: ::std::os::raw::c_int,
2335        ),
2336    >,
2337    pub advance: ::std::option::Option<
2338        unsafe extern "C" fn(m: *const mjModel, d: *mut mjData, instance: ::std::os::raw::c_int),
2339    >,
2340    pub visualize: ::std::option::Option<
2341        unsafe extern "C" fn(
2342            m: *const mjModel,
2343            d: *mut mjData,
2344            opt: *const mjvOption,
2345            scn: *mut mjvScene,
2346            instance: ::std::os::raw::c_int,
2347        ),
2348    >,
2349    pub actuator_act_dot: ::std::option::Option<
2350        unsafe extern "C" fn(m: *const mjModel, d: *mut mjData, instance: ::std::os::raw::c_int),
2351    >,
2352    pub sdf_distance: ::std::option::Option<
2353        unsafe extern "C" fn(
2354            point: *const mjtNum,
2355            d: *const mjData,
2356            instance: ::std::os::raw::c_int,
2357        ) -> mjtNum,
2358    >,
2359    pub sdf_gradient: ::std::option::Option<
2360        unsafe extern "C" fn(
2361            gradient: *mut mjtNum,
2362            point: *const mjtNum,
2363            d: *const mjData,
2364            instance: ::std::os::raw::c_int,
2365        ),
2366    >,
2367    pub sdf_staticdistance: ::std::option::Option<
2368        unsafe extern "C" fn(point: *const mjtNum, attributes: *const mjtNum) -> mjtNum,
2369    >,
2370    pub sdf_attribute: ::std::option::Option<
2371        unsafe extern "C" fn(
2372            attribute: *mut mjtNum,
2373            name: *mut *const ::std::os::raw::c_char,
2374            value: *mut *const ::std::os::raw::c_char,
2375        ),
2376    >,
2377    pub sdf_aabb:
2378        ::std::option::Option<unsafe extern "C" fn(aabb: *mut mjtNum, attributes: *const mjtNum)>,
2379}
2380pub type mjpPlugin = mjpPlugin_;
2381#[repr(C)]
2382#[derive(Debug, Clone)]
2383pub struct mjSDF_ {
2384    pub plugin: *mut *const mjpPlugin,
2385    pub id: *mut ::std::os::raw::c_int,
2386    pub type_: mjtSDFType,
2387    pub relpos: *mut mjtNum,
2388    pub relmat: *mut mjtNum,
2389    pub geomtype: *mut mjtGeom,
2390}
2391pub type mjSDF = mjSDF_;
2392pub type mjfPluginLibraryLoadCallback = ::std::option::Option<
2393    unsafe extern "C" fn(
2394        filename: *const ::std::os::raw::c_char,
2395        first: ::std::os::raw::c_int,
2396        count: ::std::os::raw::c_int,
2397    ),
2398>;
2399#[repr(u32)]
2400#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2401pub enum mjtGridPos_ {
2402    mjGRID_TOPLEFT = 0,
2403    mjGRID_TOPRIGHT = 1,
2404    mjGRID_BOTTOMLEFT = 2,
2405    mjGRID_BOTTOMRIGHT = 3,
2406    mjGRID_TOP = 4,
2407    mjGRID_BOTTOM = 5,
2408    mjGRID_LEFT = 6,
2409    mjGRID_RIGHT = 7,
2410}
2411pub use self::mjtGridPos_ as mjtGridPos;
2412#[repr(u32)]
2413#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2414pub enum mjtFramebuffer_ {
2415    mjFB_WINDOW = 0,
2416    mjFB_OFFSCREEN = 1,
2417}
2418pub use self::mjtFramebuffer_ as mjtFramebuffer;
2419#[repr(u32)]
2420#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2421pub enum mjtDepthMap_ {
2422    mjDEPTH_ZERONEAR = 0,
2423    mjDEPTH_ZEROFAR = 1,
2424}
2425pub use self::mjtDepthMap_ as mjtDepthMap;
2426#[repr(u32)]
2427#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2428pub enum mjtFontScale_ {
2429    mjFONTSCALE_50 = 50,
2430    mjFONTSCALE_100 = 100,
2431    mjFONTSCALE_150 = 150,
2432    mjFONTSCALE_200 = 200,
2433    mjFONTSCALE_250 = 250,
2434    mjFONTSCALE_300 = 300,
2435}
2436pub use self::mjtFontScale_ as mjtFontScale;
2437#[repr(u32)]
2438#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2439pub enum mjtFont_ {
2440    mjFONT_NORMAL = 0,
2441    mjFONT_SHADOW = 1,
2442    mjFONT_BIG = 2,
2443}
2444pub use self::mjtFont_ as mjtFont;
2445#[repr(C)]
2446#[derive(Debug, Clone, Copy)]
2447pub struct mjrRect_ {
2448    pub left: ::std::os::raw::c_int,
2449    pub bottom: ::std::os::raw::c_int,
2450    pub width: ::std::os::raw::c_int,
2451    pub height: ::std::os::raw::c_int,
2452}
2453pub type mjrRect = mjrRect_;
2454#[repr(C)]
2455#[derive(Debug, Clone)]
2456pub struct mjrContext_ {
2457    pub lineWidth: f32,
2458    pub shadowClip: f32,
2459    pub shadowScale: f32,
2460    pub fogStart: f32,
2461    pub fogEnd: f32,
2462    pub fogRGBA: [f32; 4usize],
2463    pub shadowSize: ::std::os::raw::c_int,
2464    pub offWidth: ::std::os::raw::c_int,
2465    pub offHeight: ::std::os::raw::c_int,
2466    pub offSamples: ::std::os::raw::c_int,
2467    pub fontScale: ::std::os::raw::c_int,
2468    pub auxWidth: [::std::os::raw::c_int; 10usize],
2469    pub auxHeight: [::std::os::raw::c_int; 10usize],
2470    pub auxSamples: [::std::os::raw::c_int; 10usize],
2471    pub offFBO: ::std::os::raw::c_uint,
2472    pub offFBO_r: ::std::os::raw::c_uint,
2473    pub offColor: ::std::os::raw::c_uint,
2474    pub offColor_r: ::std::os::raw::c_uint,
2475    pub offDepthStencil: ::std::os::raw::c_uint,
2476    pub offDepthStencil_r: ::std::os::raw::c_uint,
2477    pub shadowFBO: ::std::os::raw::c_uint,
2478    pub shadowTex: ::std::os::raw::c_uint,
2479    pub auxFBO: [::std::os::raw::c_uint; 10usize],
2480    pub auxFBO_r: [::std::os::raw::c_uint; 10usize],
2481    pub auxColor: [::std::os::raw::c_uint; 10usize],
2482    pub auxColor_r: [::std::os::raw::c_uint; 10usize],
2483    pub mat_texid: [::std::os::raw::c_int; 10000usize],
2484    pub mat_texuniform: [::std::os::raw::c_int; 1000usize],
2485    pub mat_texrepeat: [f32; 2000usize],
2486    pub ntexture: ::std::os::raw::c_int,
2487    pub textureType: [::std::os::raw::c_int; 1000usize],
2488    pub texture: [::std::os::raw::c_uint; 1000usize],
2489    pub basePlane: ::std::os::raw::c_uint,
2490    pub baseMesh: ::std::os::raw::c_uint,
2491    pub baseHField: ::std::os::raw::c_uint,
2492    pub baseBuiltin: ::std::os::raw::c_uint,
2493    pub baseFontNormal: ::std::os::raw::c_uint,
2494    pub baseFontShadow: ::std::os::raw::c_uint,
2495    pub baseFontBig: ::std::os::raw::c_uint,
2496    pub rangePlane: ::std::os::raw::c_int,
2497    pub rangeMesh: ::std::os::raw::c_int,
2498    pub rangeHField: ::std::os::raw::c_int,
2499    pub rangeBuiltin: ::std::os::raw::c_int,
2500    pub rangeFont: ::std::os::raw::c_int,
2501    pub nskin: ::std::os::raw::c_int,
2502    pub skinvertVBO: *mut ::std::os::raw::c_uint,
2503    pub skinnormalVBO: *mut ::std::os::raw::c_uint,
2504    pub skintexcoordVBO: *mut ::std::os::raw::c_uint,
2505    pub skinfaceVBO: *mut ::std::os::raw::c_uint,
2506    pub charWidth: [::std::os::raw::c_int; 127usize],
2507    pub charWidthBig: [::std::os::raw::c_int; 127usize],
2508    pub charHeight: ::std::os::raw::c_int,
2509    pub charHeightBig: ::std::os::raw::c_int,
2510    pub glInitialized: ::std::os::raw::c_int,
2511    pub windowAvailable: ::std::os::raw::c_int,
2512    pub windowSamples: ::std::os::raw::c_int,
2513    pub windowStereo: ::std::os::raw::c_int,
2514    pub windowDoublebuffer: ::std::os::raw::c_int,
2515    pub currentBuffer: ::std::os::raw::c_int,
2516    pub readPixelFormat: ::std::os::raw::c_int,
2517    pub readDepthMap: ::std::os::raw::c_int,
2518}
2519pub type mjrContext = mjrContext_;
2520pub type mjString = std_string;
2521pub type mjStringVec = __BindgenOpaqueArray<u64, 3usize>;
2522pub type mjIntVec = __BindgenOpaqueArray<u64, 3usize>;
2523pub type mjIntVecVec = u8;
2524pub type mjFloatVec = u8;
2525pub type mjFloatVecVec = u8;
2526pub type mjDoubleVec = __BindgenOpaqueArray<u64, 3usize>;
2527pub type mjByteVec = u8;
2528#[repr(u32)]
2529#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2530pub enum mjtGeomInertia_ {
2531    mjINERTIA_VOLUME = 0,
2532    mjINERTIA_SHELL = 1,
2533}
2534pub use self::mjtGeomInertia_ as mjtGeomInertia;
2535#[repr(u32)]
2536#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2537pub enum mjtMeshInertia_ {
2538    mjMESH_INERTIA_CONVEX = 0,
2539    mjMESH_INERTIA_EXACT = 1,
2540    mjMESH_INERTIA_LEGACY = 2,
2541    mjMESH_INERTIA_SHELL = 3,
2542}
2543pub use self::mjtMeshInertia_ as mjtMeshInertia;
2544#[repr(u32)]
2545#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2546pub enum mjtMeshBuiltin_ {
2547    mjMESH_BUILTIN_NONE = 0,
2548    mjMESH_BUILTIN_SPHERE = 1,
2549    mjMESH_BUILTIN_HEMISPHERE = 2,
2550    mjMESH_BUILTIN_CONE = 3,
2551    mjMESH_BUILTIN_SUPERSPHERE = 4,
2552    mjMESH_BUILTIN_SUPERTORUS = 5,
2553    mjMESH_BUILTIN_WEDGE = 6,
2554    mjMESH_BUILTIN_PLATE = 7,
2555}
2556pub use self::mjtMeshBuiltin_ as mjtMeshBuiltin;
2557#[repr(u32)]
2558#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2559pub enum mjtBuiltin_ {
2560    mjBUILTIN_NONE = 0,
2561    mjBUILTIN_GRADIENT = 1,
2562    mjBUILTIN_CHECKER = 2,
2563    mjBUILTIN_FLAT = 3,
2564}
2565pub use self::mjtBuiltin_ as mjtBuiltin;
2566#[repr(u32)]
2567#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2568pub enum mjtMark_ {
2569    mjMARK_NONE = 0,
2570    mjMARK_EDGE = 1,
2571    mjMARK_CROSS = 2,
2572    mjMARK_RANDOM = 3,
2573}
2574pub use self::mjtMark_ as mjtMark;
2575#[repr(u32)]
2576#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2577pub enum mjtLimited_ {
2578    mjLIMITED_FALSE = 0,
2579    mjLIMITED_TRUE = 1,
2580    mjLIMITED_AUTO = 2,
2581}
2582pub use self::mjtLimited_ as mjtLimited;
2583#[repr(u32)]
2584#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2585pub enum mjtAlignFree_ {
2586    mjALIGNFREE_FALSE = 0,
2587    mjALIGNFREE_TRUE = 1,
2588    mjALIGNFREE_AUTO = 2,
2589}
2590pub use self::mjtAlignFree_ as mjtAlignFree;
2591#[repr(u32)]
2592#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2593pub enum mjtInertiaFromGeom_ {
2594    mjINERTIAFROMGEOM_FALSE = 0,
2595    mjINERTIAFROMGEOM_TRUE = 1,
2596    mjINERTIAFROMGEOM_AUTO = 2,
2597}
2598pub use self::mjtInertiaFromGeom_ as mjtInertiaFromGeom;
2599#[repr(u32)]
2600#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
2601pub enum mjtOrientation_ {
2602    mjORIENTATION_QUAT = 0,
2603    mjORIENTATION_AXISANGLE = 1,
2604    mjORIENTATION_XYAXES = 2,
2605    mjORIENTATION_ZAXIS = 3,
2606    mjORIENTATION_EULER = 4,
2607}
2608pub use self::mjtOrientation_ as mjtOrientation;
2609#[repr(C)]
2610#[derive(Debug, Clone)]
2611pub struct mjsElement_ {
2612    pub elemtype: mjtObj,
2613    pub signature: u64,
2614}
2615pub type mjsElement = mjsElement_;
2616#[repr(C)]
2617#[derive(Debug, Clone)]
2618pub struct mjsCompiler_ {
2619    pub autolimits: mjtByte,
2620    pub boundmass: f64,
2621    pub boundinertia: f64,
2622    pub settotalmass: f64,
2623    pub balanceinertia: mjtByte,
2624    pub fitaabb: mjtByte,
2625    pub degree: mjtByte,
2626    pub eulerseq: [::std::os::raw::c_char; 3usize],
2627    pub discardvisual: mjtByte,
2628    pub usethread: mjtByte,
2629    pub fusestatic: mjtByte,
2630    pub inertiafromgeom: ::std::os::raw::c_int,
2631    pub inertiagrouprange: [::std::os::raw::c_int; 2usize],
2632    pub saveinertial: mjtByte,
2633    pub alignfree: ::std::os::raw::c_int,
2634    pub LRopt: mjLROpt,
2635}
2636pub type mjsCompiler = mjsCompiler_;
2637#[repr(C)]
2638#[derive(Debug, Clone)]
2639pub struct mjSpec_ {
2640    pub element: *mut mjsElement,
2641    pub modelname: *mut mjString,
2642    pub compiler: mjsCompiler,
2643    pub strippath: mjtByte,
2644    pub meshdir: *mut mjString,
2645    pub texturedir: *mut mjString,
2646    pub option: mjOption,
2647    pub visual: mjVisual,
2648    pub stat: mjStatistic,
2649    pub memory: mjtSize,
2650    pub nemax: ::std::os::raw::c_int,
2651    pub nuserdata: ::std::os::raw::c_int,
2652    pub nuser_body: ::std::os::raw::c_int,
2653    pub nuser_jnt: ::std::os::raw::c_int,
2654    pub nuser_geom: ::std::os::raw::c_int,
2655    pub nuser_site: ::std::os::raw::c_int,
2656    pub nuser_cam: ::std::os::raw::c_int,
2657    pub nuser_tendon: ::std::os::raw::c_int,
2658    pub nuser_actuator: ::std::os::raw::c_int,
2659    pub nuser_sensor: ::std::os::raw::c_int,
2660    pub nkey: ::std::os::raw::c_int,
2661    pub njmax: ::std::os::raw::c_int,
2662    pub nconmax: ::std::os::raw::c_int,
2663    pub nstack: mjtSize,
2664    pub comment: *mut mjString,
2665    pub modelfiledir: *mut mjString,
2666    pub hasImplicitPluginElem: mjtByte,
2667}
2668pub type mjSpec = mjSpec_;
2669#[repr(C)]
2670#[derive(Debug, Clone)]
2671pub struct mjsOrientation_ {
2672    pub type_: mjtOrientation,
2673    pub axisangle: [f64; 4usize],
2674    pub xyaxes: [f64; 6usize],
2675    pub zaxis: [f64; 3usize],
2676    pub euler: [f64; 3usize],
2677}
2678pub type mjsOrientation = mjsOrientation_;
2679#[repr(C)]
2680#[derive(Debug, Clone)]
2681pub struct mjsPlugin_ {
2682    pub element: *mut mjsElement,
2683    pub name: *mut mjString,
2684    pub plugin_name: *mut mjString,
2685    pub active: mjtByte,
2686    pub info: *mut mjString,
2687}
2688pub type mjsPlugin = mjsPlugin_;
2689#[repr(C)]
2690#[derive(Debug, Clone)]
2691pub struct mjsBody_ {
2692    pub element: *mut mjsElement,
2693    pub childclass: *mut mjString,
2694    pub pos: [f64; 3usize],
2695    pub quat: [f64; 4usize],
2696    pub alt: mjsOrientation,
2697    pub mass: f64,
2698    pub ipos: [f64; 3usize],
2699    pub iquat: [f64; 4usize],
2700    pub inertia: [f64; 3usize],
2701    pub ialt: mjsOrientation,
2702    pub fullinertia: [f64; 6usize],
2703    pub mocap: mjtByte,
2704    pub gravcomp: f64,
2705    pub userdata: *mut mjDoubleVec,
2706    pub explicitinertial: mjtByte,
2707    pub plugin: mjsPlugin,
2708    pub info: *mut mjString,
2709}
2710pub type mjsBody = mjsBody_;
2711#[repr(C)]
2712#[derive(Debug, Clone)]
2713pub struct mjsFrame_ {
2714    pub element: *mut mjsElement,
2715    pub childclass: *mut mjString,
2716    pub pos: [f64; 3usize],
2717    pub quat: [f64; 4usize],
2718    pub alt: mjsOrientation,
2719    pub info: *mut mjString,
2720}
2721pub type mjsFrame = mjsFrame_;
2722#[repr(C)]
2723#[derive(Debug, Clone)]
2724pub struct mjsJoint_ {
2725    pub element: *mut mjsElement,
2726    pub type_: mjtJoint,
2727    pub pos: [f64; 3usize],
2728    pub axis: [f64; 3usize],
2729    pub ref_: f64,
2730    pub align: ::std::os::raw::c_int,
2731    pub stiffness: f64,
2732    pub springref: f64,
2733    pub springdamper: [f64; 2usize],
2734    pub limited: ::std::os::raw::c_int,
2735    pub range: [f64; 2usize],
2736    pub margin: f64,
2737    pub solref_limit: [mjtNum; 2usize],
2738    pub solimp_limit: [mjtNum; 5usize],
2739    pub actfrclimited: ::std::os::raw::c_int,
2740    pub actfrcrange: [f64; 2usize],
2741    pub armature: f64,
2742    pub damping: f64,
2743    pub frictionloss: f64,
2744    pub solref_friction: [mjtNum; 2usize],
2745    pub solimp_friction: [mjtNum; 5usize],
2746    pub group: ::std::os::raw::c_int,
2747    pub actgravcomp: mjtByte,
2748    pub userdata: *mut mjDoubleVec,
2749    pub info: *mut mjString,
2750}
2751pub type mjsJoint = mjsJoint_;
2752#[repr(C)]
2753#[derive(Debug, Clone)]
2754pub struct mjsGeom_ {
2755    pub element: *mut mjsElement,
2756    pub type_: mjtGeom,
2757    pub pos: [f64; 3usize],
2758    pub quat: [f64; 4usize],
2759    pub alt: mjsOrientation,
2760    pub fromto: [f64; 6usize],
2761    pub size: [f64; 3usize],
2762    pub contype: ::std::os::raw::c_int,
2763    pub conaffinity: ::std::os::raw::c_int,
2764    pub condim: ::std::os::raw::c_int,
2765    pub priority: ::std::os::raw::c_int,
2766    pub friction: [f64; 3usize],
2767    pub solmix: f64,
2768    pub solref: [mjtNum; 2usize],
2769    pub solimp: [mjtNum; 5usize],
2770    pub margin: f64,
2771    pub gap: f64,
2772    pub mass: f64,
2773    pub density: f64,
2774    pub typeinertia: mjtGeomInertia,
2775    pub fluid_ellipsoid: mjtNum,
2776    pub fluid_coefs: [mjtNum; 5usize],
2777    pub material: *mut mjString,
2778    pub rgba: [f32; 4usize],
2779    pub group: ::std::os::raw::c_int,
2780    pub hfieldname: *mut mjString,
2781    pub meshname: *mut mjString,
2782    pub fitscale: f64,
2783    pub userdata: *mut mjDoubleVec,
2784    pub plugin: mjsPlugin,
2785    pub info: *mut mjString,
2786}
2787pub type mjsGeom = mjsGeom_;
2788#[repr(C)]
2789#[derive(Debug, Clone)]
2790pub struct mjsSite_ {
2791    pub element: *mut mjsElement,
2792    pub pos: [f64; 3usize],
2793    pub quat: [f64; 4usize],
2794    pub alt: mjsOrientation,
2795    pub fromto: [f64; 6usize],
2796    pub size: [f64; 3usize],
2797    pub type_: mjtGeom,
2798    pub material: *mut mjString,
2799    pub group: ::std::os::raw::c_int,
2800    pub rgba: [f32; 4usize],
2801    pub userdata: *mut mjDoubleVec,
2802    pub info: *mut mjString,
2803}
2804pub type mjsSite = mjsSite_;
2805#[repr(C)]
2806#[derive(Debug, Clone)]
2807pub struct mjsCamera_ {
2808    pub element: *mut mjsElement,
2809    pub pos: [f64; 3usize],
2810    pub quat: [f64; 4usize],
2811    pub alt: mjsOrientation,
2812    pub mode: mjtCamLight,
2813    pub targetbody: *mut mjString,
2814    pub orthographic: ::std::os::raw::c_int,
2815    pub fovy: f64,
2816    pub ipd: f64,
2817    pub intrinsic: [f32; 4usize],
2818    pub sensor_size: [f32; 2usize],
2819    pub resolution: [f32; 2usize],
2820    pub focal_length: [f32; 2usize],
2821    pub focal_pixel: [f32; 2usize],
2822    pub principal_length: [f32; 2usize],
2823    pub principal_pixel: [f32; 2usize],
2824    pub userdata: *mut mjDoubleVec,
2825    pub info: *mut mjString,
2826}
2827pub type mjsCamera = mjsCamera_;
2828#[repr(C)]
2829#[derive(Debug, Clone)]
2830pub struct mjsLight_ {
2831    pub element: *mut mjsElement,
2832    pub pos: [f64; 3usize],
2833    pub dir: [f64; 3usize],
2834    pub mode: mjtCamLight,
2835    pub targetbody: *mut mjString,
2836    pub active: mjtByte,
2837    pub type_: mjtLightType,
2838    pub texture: *mut mjString,
2839    pub castshadow: mjtByte,
2840    pub bulbradius: f32,
2841    pub intensity: f32,
2842    pub range: f32,
2843    pub attenuation: [f32; 3usize],
2844    pub cutoff: f32,
2845    pub exponent: f32,
2846    pub ambient: [f32; 3usize],
2847    pub diffuse: [f32; 3usize],
2848    pub specular: [f32; 3usize],
2849    pub info: *mut mjString,
2850}
2851pub type mjsLight = mjsLight_;
2852#[repr(C)]
2853#[derive(Debug, Clone)]
2854pub struct mjsFlex_ {
2855    pub element: *mut mjsElement,
2856    pub contype: ::std::os::raw::c_int,
2857    pub conaffinity: ::std::os::raw::c_int,
2858    pub condim: ::std::os::raw::c_int,
2859    pub priority: ::std::os::raw::c_int,
2860    pub friction: [f64; 3usize],
2861    pub solmix: f64,
2862    pub solref: [mjtNum; 2usize],
2863    pub solimp: [mjtNum; 5usize],
2864    pub margin: f64,
2865    pub gap: f64,
2866    pub dim: ::std::os::raw::c_int,
2867    pub radius: f64,
2868    pub internal: mjtByte,
2869    pub flatskin: mjtByte,
2870    pub selfcollide: ::std::os::raw::c_int,
2871    pub vertcollide: ::std::os::raw::c_int,
2872    pub activelayers: ::std::os::raw::c_int,
2873    pub group: ::std::os::raw::c_int,
2874    pub edgestiffness: f64,
2875    pub edgedamping: f64,
2876    pub rgba: [f32; 4usize],
2877    pub material: *mut mjString,
2878    pub young: f64,
2879    pub poisson: f64,
2880    pub damping: f64,
2881    pub thickness: f64,
2882    pub elastic2d: ::std::os::raw::c_int,
2883    pub nodebody: *mut mjStringVec,
2884    pub vertbody: *mut mjStringVec,
2885    pub node: *mut mjDoubleVec,
2886    pub vert: *mut mjDoubleVec,
2887    pub elem: *mut mjIntVec,
2888    pub texcoord: *mut mjFloatVec,
2889    pub elemtexcoord: *mut mjIntVec,
2890    pub info: *mut mjString,
2891}
2892pub type mjsFlex = mjsFlex_;
2893#[repr(C)]
2894#[derive(Debug, Clone)]
2895pub struct mjsMesh_ {
2896    pub element: *mut mjsElement,
2897    pub content_type: *mut mjString,
2898    pub file: *mut mjString,
2899    pub refpos: [f64; 3usize],
2900    pub refquat: [f64; 4usize],
2901    pub scale: [f64; 3usize],
2902    pub inertia: mjtMeshInertia,
2903    pub smoothnormal: mjtByte,
2904    pub needsdf: mjtByte,
2905    pub maxhullvert: ::std::os::raw::c_int,
2906    pub uservert: *mut mjFloatVec,
2907    pub usernormal: *mut mjFloatVec,
2908    pub usertexcoord: *mut mjFloatVec,
2909    pub userface: *mut mjIntVec,
2910    pub userfacetexcoord: *mut mjIntVec,
2911    pub plugin: mjsPlugin,
2912    pub info: *mut mjString,
2913}
2914pub type mjsMesh = mjsMesh_;
2915#[repr(C)]
2916#[derive(Debug, Clone)]
2917pub struct mjsHField_ {
2918    pub element: *mut mjsElement,
2919    pub content_type: *mut mjString,
2920    pub file: *mut mjString,
2921    pub size: [f64; 4usize],
2922    pub nrow: ::std::os::raw::c_int,
2923    pub ncol: ::std::os::raw::c_int,
2924    pub userdata: *mut mjFloatVec,
2925    pub info: *mut mjString,
2926}
2927pub type mjsHField = mjsHField_;
2928#[repr(C)]
2929#[derive(Debug, Clone)]
2930pub struct mjsSkin_ {
2931    pub element: *mut mjsElement,
2932    pub file: *mut mjString,
2933    pub material: *mut mjString,
2934    pub rgba: [f32; 4usize],
2935    pub inflate: f32,
2936    pub group: ::std::os::raw::c_int,
2937    pub vert: *mut mjFloatVec,
2938    pub texcoord: *mut mjFloatVec,
2939    pub face: *mut mjIntVec,
2940    pub bodyname: *mut mjStringVec,
2941    pub bindpos: *mut mjFloatVec,
2942    pub bindquat: *mut mjFloatVec,
2943    pub vertid: *mut mjIntVecVec,
2944    pub vertweight: *mut mjFloatVecVec,
2945    pub info: *mut mjString,
2946}
2947pub type mjsSkin = mjsSkin_;
2948#[repr(C)]
2949#[derive(Debug, Clone)]
2950pub struct mjsTexture_ {
2951    pub element: *mut mjsElement,
2952    pub type_: mjtTexture,
2953    pub colorspace: mjtColorSpace,
2954    pub builtin: ::std::os::raw::c_int,
2955    pub mark: ::std::os::raw::c_int,
2956    pub rgb1: [f64; 3usize],
2957    pub rgb2: [f64; 3usize],
2958    pub markrgb: [f64; 3usize],
2959    pub random: f64,
2960    pub height: ::std::os::raw::c_int,
2961    pub width: ::std::os::raw::c_int,
2962    pub nchannel: ::std::os::raw::c_int,
2963    pub content_type: *mut mjString,
2964    pub file: *mut mjString,
2965    pub gridsize: [::std::os::raw::c_int; 2usize],
2966    pub gridlayout: [::std::os::raw::c_char; 13usize],
2967    pub cubefiles: *mut mjStringVec,
2968    pub data: *mut mjByteVec,
2969    pub hflip: mjtByte,
2970    pub vflip: mjtByte,
2971    pub info: *mut mjString,
2972}
2973pub type mjsTexture = mjsTexture_;
2974#[repr(C)]
2975#[derive(Debug, Clone)]
2976pub struct mjsMaterial_ {
2977    pub element: *mut mjsElement,
2978    pub textures: *mut mjStringVec,
2979    pub texuniform: mjtByte,
2980    pub texrepeat: [f32; 2usize],
2981    pub emission: f32,
2982    pub specular: f32,
2983    pub shininess: f32,
2984    pub reflectance: f32,
2985    pub metallic: f32,
2986    pub roughness: f32,
2987    pub rgba: [f32; 4usize],
2988    pub info: *mut mjString,
2989}
2990pub type mjsMaterial = mjsMaterial_;
2991#[repr(C)]
2992#[derive(Debug, Clone)]
2993pub struct mjsPair_ {
2994    pub element: *mut mjsElement,
2995    pub geomname1: *mut mjString,
2996    pub geomname2: *mut mjString,
2997    pub condim: ::std::os::raw::c_int,
2998    pub solref: [mjtNum; 2usize],
2999    pub solreffriction: [mjtNum; 2usize],
3000    pub solimp: [mjtNum; 5usize],
3001    pub margin: f64,
3002    pub gap: f64,
3003    pub friction: [f64; 5usize],
3004    pub info: *mut mjString,
3005}
3006pub type mjsPair = mjsPair_;
3007#[repr(C)]
3008#[derive(Debug, Clone)]
3009pub struct mjsExclude_ {
3010    pub element: *mut mjsElement,
3011    pub bodyname1: *mut mjString,
3012    pub bodyname2: *mut mjString,
3013    pub info: *mut mjString,
3014}
3015pub type mjsExclude = mjsExclude_;
3016#[repr(C)]
3017#[derive(Debug, Clone)]
3018pub struct mjsEquality_ {
3019    pub element: *mut mjsElement,
3020    pub type_: mjtEq,
3021    pub data: [f64; 11usize],
3022    pub active: mjtByte,
3023    pub name1: *mut mjString,
3024    pub name2: *mut mjString,
3025    pub objtype: mjtObj,
3026    pub solref: [mjtNum; 2usize],
3027    pub solimp: [mjtNum; 5usize],
3028    pub info: *mut mjString,
3029}
3030pub type mjsEquality = mjsEquality_;
3031#[repr(C)]
3032#[derive(Debug, Clone)]
3033pub struct mjsTendon_ {
3034    pub element: *mut mjsElement,
3035    pub stiffness: f64,
3036    pub springlength: [f64; 2usize],
3037    pub damping: f64,
3038    pub frictionloss: f64,
3039    pub solref_friction: [mjtNum; 2usize],
3040    pub solimp_friction: [mjtNum; 5usize],
3041    pub armature: f64,
3042    pub limited: ::std::os::raw::c_int,
3043    pub actfrclimited: ::std::os::raw::c_int,
3044    pub range: [f64; 2usize],
3045    pub actfrcrange: [f64; 2usize],
3046    pub margin: f64,
3047    pub solref_limit: [mjtNum; 2usize],
3048    pub solimp_limit: [mjtNum; 5usize],
3049    pub material: *mut mjString,
3050    pub width: f64,
3051    pub rgba: [f32; 4usize],
3052    pub group: ::std::os::raw::c_int,
3053    pub userdata: *mut mjDoubleVec,
3054    pub info: *mut mjString,
3055}
3056pub type mjsTendon = mjsTendon_;
3057#[repr(C)]
3058#[derive(Debug, Clone)]
3059pub struct mjsWrap_ {
3060    pub element: *mut mjsElement,
3061    pub info: *mut mjString,
3062}
3063pub type mjsWrap = mjsWrap_;
3064#[repr(C)]
3065#[derive(Debug, Clone)]
3066pub struct mjsActuator_ {
3067    pub element: *mut mjsElement,
3068    pub gaintype: mjtGain,
3069    pub gainprm: [f64; 10usize],
3070    pub biastype: mjtBias,
3071    pub biasprm: [f64; 10usize],
3072    pub dyntype: mjtDyn,
3073    pub dynprm: [f64; 10usize],
3074    pub actdim: ::std::os::raw::c_int,
3075    pub actearly: mjtByte,
3076    pub trntype: mjtTrn,
3077    pub gear: [f64; 6usize],
3078    pub target: *mut mjString,
3079    pub refsite: *mut mjString,
3080    pub slidersite: *mut mjString,
3081    pub cranklength: f64,
3082    pub lengthrange: [f64; 2usize],
3083    pub inheritrange: f64,
3084    pub ctrllimited: ::std::os::raw::c_int,
3085    pub ctrlrange: [f64; 2usize],
3086    pub forcelimited: ::std::os::raw::c_int,
3087    pub forcerange: [f64; 2usize],
3088    pub actlimited: ::std::os::raw::c_int,
3089    pub actrange: [f64; 2usize],
3090    pub group: ::std::os::raw::c_int,
3091    pub userdata: *mut mjDoubleVec,
3092    pub plugin: mjsPlugin,
3093    pub info: *mut mjString,
3094}
3095pub type mjsActuator = mjsActuator_;
3096#[repr(C)]
3097#[derive(Debug, Clone)]
3098pub struct mjsSensor_ {
3099    pub element: *mut mjsElement,
3100    pub type_: mjtSensor,
3101    pub objtype: mjtObj,
3102    pub objname: *mut mjString,
3103    pub reftype: mjtObj,
3104    pub refname: *mut mjString,
3105    pub intprm: [::std::os::raw::c_int; 3usize],
3106    pub datatype: mjtDataType,
3107    pub needstage: mjtStage,
3108    pub dim: ::std::os::raw::c_int,
3109    pub cutoff: f64,
3110    pub noise: f64,
3111    pub userdata: *mut mjDoubleVec,
3112    pub plugin: mjsPlugin,
3113    pub info: *mut mjString,
3114}
3115pub type mjsSensor = mjsSensor_;
3116#[repr(C)]
3117#[derive(Debug, Clone)]
3118pub struct mjsNumeric_ {
3119    pub element: *mut mjsElement,
3120    pub data: *mut mjDoubleVec,
3121    pub size: ::std::os::raw::c_int,
3122    pub info: *mut mjString,
3123}
3124pub type mjsNumeric = mjsNumeric_;
3125#[repr(C)]
3126#[derive(Debug, Clone)]
3127pub struct mjsText_ {
3128    pub element: *mut mjsElement,
3129    pub data: *mut mjString,
3130    pub info: *mut mjString,
3131}
3132pub type mjsText = mjsText_;
3133#[repr(C)]
3134#[derive(Debug, Clone)]
3135pub struct mjsTuple_ {
3136    pub element: *mut mjsElement,
3137    pub objtype: *mut mjIntVec,
3138    pub objname: *mut mjStringVec,
3139    pub objprm: *mut mjDoubleVec,
3140    pub info: *mut mjString,
3141}
3142pub type mjsTuple = mjsTuple_;
3143#[repr(C)]
3144#[derive(Debug, Clone)]
3145pub struct mjsKey_ {
3146    pub element: *mut mjsElement,
3147    pub time: f64,
3148    pub qpos: *mut mjDoubleVec,
3149    pub qvel: *mut mjDoubleVec,
3150    pub act: *mut mjDoubleVec,
3151    pub mpos: *mut mjDoubleVec,
3152    pub mquat: *mut mjDoubleVec,
3153    pub ctrl: *mut mjDoubleVec,
3154    pub info: *mut mjString,
3155}
3156pub type mjsKey = mjsKey_;
3157#[repr(C)]
3158#[derive(Debug, Clone)]
3159pub struct mjsDefault_ {
3160    pub element: *mut mjsElement,
3161    pub joint: *mut mjsJoint,
3162    pub geom: *mut mjsGeom,
3163    pub site: *mut mjsSite,
3164    pub camera: *mut mjsCamera,
3165    pub light: *mut mjsLight,
3166    pub flex: *mut mjsFlex,
3167    pub mesh: *mut mjsMesh,
3168    pub material: *mut mjsMaterial,
3169    pub pair: *mut mjsPair,
3170    pub equality: *mut mjsEquality,
3171    pub tendon: *mut mjsTendon,
3172    pub actuator: *mut mjsActuator,
3173}
3174pub type mjsDefault = mjsDefault_;
3175#[repr(u32)]
3176#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
3177pub enum mjtButton_ {
3178    mjBUTTON_NONE = 0,
3179    mjBUTTON_LEFT = 1,
3180    mjBUTTON_RIGHT = 2,
3181    mjBUTTON_MIDDLE = 3,
3182}
3183pub use self::mjtButton_ as mjtButton;
3184#[repr(u32)]
3185#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
3186pub enum mjtEvent_ {
3187    mjEVENT_NONE = 0,
3188    mjEVENT_MOVE = 1,
3189    mjEVENT_PRESS = 2,
3190    mjEVENT_RELEASE = 3,
3191    mjEVENT_SCROLL = 4,
3192    mjEVENT_KEY = 5,
3193    mjEVENT_RESIZE = 6,
3194    mjEVENT_REDRAW = 7,
3195    mjEVENT_FILESDROP = 8,
3196}
3197pub use self::mjtEvent_ as mjtEvent;
3198#[repr(i32)]
3199#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
3200pub enum mjtItem_ {
3201    mjITEM_END = -2,
3202    mjITEM_SECTION = -1,
3203    mjITEM_SEPARATOR = 0,
3204    mjITEM_STATIC = 1,
3205    mjITEM_BUTTON = 2,
3206    mjITEM_CHECKINT = 3,
3207    mjITEM_CHECKBYTE = 4,
3208    mjITEM_RADIO = 5,
3209    mjITEM_RADIOLINE = 6,
3210    mjITEM_SELECT = 7,
3211    mjITEM_SLIDERINT = 8,
3212    mjITEM_SLIDERNUM = 9,
3213    mjITEM_EDITINT = 10,
3214    mjITEM_EDITNUM = 11,
3215    mjITEM_EDITFLOAT = 12,
3216    mjITEM_EDITTXT = 13,
3217    mjNITEM = 14,
3218}
3219pub use self::mjtItem_ as mjtItem;
3220#[repr(u32)]
3221#[derive(Debug, Clone, Hash, PartialEq, Eq, )]
3222pub enum mjtSection_ {
3223    mjSECT_CLOSED = 0,
3224    mjSECT_OPEN = 1,
3225    mjSECT_FIXED = 2,
3226}
3227pub use self::mjtSection_ as mjtSection;
3228pub type mjfItemEnable = ::std::option::Option<
3229    unsafe extern "C" fn(
3230        category: ::std::os::raw::c_int,
3231        data: *mut ::std::os::raw::c_void,
3232    ) -> ::std::os::raw::c_int,
3233>;
3234#[repr(C)]
3235#[derive(Debug, Clone, Copy)]
3236pub struct mjuiState_ {
3237    pub nrect: ::std::os::raw::c_int,
3238    pub rect: [mjrRect; 25usize],
3239    pub userdata: *mut ::std::os::raw::c_void,
3240    pub type_: ::std::os::raw::c_int,
3241    pub left: ::std::os::raw::c_int,
3242    pub right: ::std::os::raw::c_int,
3243    pub middle: ::std::os::raw::c_int,
3244    pub doubleclick: ::std::os::raw::c_int,
3245    pub button: ::std::os::raw::c_int,
3246    pub buttontime: f64,
3247    pub x: f64,
3248    pub y: f64,
3249    pub dx: f64,
3250    pub dy: f64,
3251    pub sx: f64,
3252    pub sy: f64,
3253    pub control: ::std::os::raw::c_int,
3254    pub shift: ::std::os::raw::c_int,
3255    pub alt: ::std::os::raw::c_int,
3256    pub key: ::std::os::raw::c_int,
3257    pub keytime: f64,
3258    pub mouserect: ::std::os::raw::c_int,
3259    pub dragrect: ::std::os::raw::c_int,
3260    pub dragbutton: ::std::os::raw::c_int,
3261    pub dropcount: ::std::os::raw::c_int,
3262    pub droppaths: *mut *const ::std::os::raw::c_char,
3263}
3264pub type mjuiState = mjuiState_;
3265#[repr(C)]
3266#[derive(Debug, Clone, Copy)]
3267pub struct mjuiThemeSpacing_ {
3268    pub total: ::std::os::raw::c_int,
3269    pub scroll: ::std::os::raw::c_int,
3270    pub label: ::std::os::raw::c_int,
3271    pub section: ::std::os::raw::c_int,
3272    pub cornersect: ::std::os::raw::c_int,
3273    pub cornersep: ::std::os::raw::c_int,
3274    pub itemside: ::std::os::raw::c_int,
3275    pub itemmid: ::std::os::raw::c_int,
3276    pub itemver: ::std::os::raw::c_int,
3277    pub texthor: ::std::os::raw::c_int,
3278    pub textver: ::std::os::raw::c_int,
3279    pub linescroll: ::std::os::raw::c_int,
3280    pub samples: ::std::os::raw::c_int,
3281}
3282pub type mjuiThemeSpacing = mjuiThemeSpacing_;
3283#[repr(C)]
3284#[derive(Debug, Clone, Copy)]
3285pub struct mjuiThemeColor_ {
3286    pub master: [f32; 3usize],
3287    pub thumb: [f32; 3usize],
3288    pub secttitle: [f32; 3usize],
3289    pub secttitle2: [f32; 3usize],
3290    pub secttitleuncheck: [f32; 3usize],
3291    pub secttitleuncheck2: [f32; 3usize],
3292    pub secttitlecheck: [f32; 3usize],
3293    pub secttitlecheck2: [f32; 3usize],
3294    pub sectfont: [f32; 3usize],
3295    pub sectsymbol: [f32; 3usize],
3296    pub sectpane: [f32; 3usize],
3297    pub separator: [f32; 3usize],
3298    pub separator2: [f32; 3usize],
3299    pub shortcut: [f32; 3usize],
3300    pub fontactive: [f32; 3usize],
3301    pub fontinactive: [f32; 3usize],
3302    pub decorinactive: [f32; 3usize],
3303    pub decorinactive2: [f32; 3usize],
3304    pub button: [f32; 3usize],
3305    pub check: [f32; 3usize],
3306    pub radio: [f32; 3usize],
3307    pub select: [f32; 3usize],
3308    pub select2: [f32; 3usize],
3309    pub slider: [f32; 3usize],
3310    pub slider2: [f32; 3usize],
3311    pub edit: [f32; 3usize],
3312    pub edit2: [f32; 3usize],
3313    pub cursor: [f32; 3usize],
3314}
3315pub type mjuiThemeColor = mjuiThemeColor_;
3316#[repr(C)]
3317#[derive(Debug, Clone, Copy)]
3318pub struct mjuiItemSingle_ {
3319    pub modifier: ::std::os::raw::c_int,
3320    pub shortcut: ::std::os::raw::c_int,
3321}
3322#[repr(C)]
3323#[derive(Debug, Clone, Copy)]
3324pub struct mjuiItemMulti_ {
3325    pub nelem: ::std::os::raw::c_int,
3326    pub name: [[::std::os::raw::c_char; 40usize]; 35usize],
3327}
3328#[repr(C)]
3329#[derive(Debug, Clone, Copy)]
3330pub struct mjuiItemSlider_ {
3331    pub range: [f64; 2usize],
3332    pub divisions: f64,
3333}
3334#[repr(C)]
3335#[derive(Debug, Clone, Copy)]
3336pub struct mjuiItemEdit_ {
3337    pub nelem: ::std::os::raw::c_int,
3338    pub range: [[f64; 2usize]; 7usize],
3339}
3340#[repr(C)]
3341#[derive(Clone, Copy)]
3342pub struct mjuiItem_ {
3343    pub type_: ::std::os::raw::c_int,
3344    pub name: [::std::os::raw::c_char; 40usize],
3345    pub state: ::std::os::raw::c_int,
3346    pub pdata: *mut ::std::os::raw::c_void,
3347    pub sectionid: ::std::os::raw::c_int,
3348    pub itemid: ::std::os::raw::c_int,
3349    pub userid: ::std::os::raw::c_int,
3350    pub __bindgen_anon_1: mjuiItem___bindgen_ty_1,
3351    pub rect: mjrRect,
3352    pub skip: ::std::os::raw::c_int,
3353}
3354#[repr(C)]
3355#[derive(Clone, Copy)]
3356pub struct mjuiItem___bindgen_ty_1 {
3357    pub single: __BindgenUnionField<mjuiItemSingle_>,
3358    pub multi: __BindgenUnionField<mjuiItemMulti_>,
3359    pub slider: __BindgenUnionField<mjuiItemSlider_>,
3360    pub edit: __BindgenUnionField<mjuiItemEdit_>,
3361    pub bindgen_union_field: [u64; 176usize],
3362}
3363pub type mjuiItem = mjuiItem_;
3364#[repr(C)]
3365#[derive(Clone, Copy)]
3366pub struct mjuiSection_ {
3367    pub name: [::std::os::raw::c_char; 40usize],
3368    pub state: ::std::os::raw::c_int,
3369    pub modifier: ::std::os::raw::c_int,
3370    pub shortcut: ::std::os::raw::c_int,
3371    pub checkbox: ::std::os::raw::c_int,
3372    pub nitem: ::std::os::raw::c_int,
3373    pub item: [mjuiItem; 200usize],
3374    pub rtitle: mjrRect,
3375    pub rcontent: mjrRect,
3376    pub lastclick: ::std::os::raw::c_int,
3377}
3378pub type mjuiSection = mjuiSection_;
3379#[repr(C)]
3380#[derive(Clone)]
3381pub struct mjUI_ {
3382    pub spacing: mjuiThemeSpacing,
3383    pub color: mjuiThemeColor,
3384    pub predicate: mjfItemEnable,
3385    pub userdata: *mut ::std::os::raw::c_void,
3386    pub rectid: ::std::os::raw::c_int,
3387    pub auxid: ::std::os::raw::c_int,
3388    pub radiocol: ::std::os::raw::c_int,
3389    pub width: ::std::os::raw::c_int,
3390    pub height: ::std::os::raw::c_int,
3391    pub maxheight: ::std::os::raw::c_int,
3392    pub scroll: ::std::os::raw::c_int,
3393    pub mousesect: ::std::os::raw::c_int,
3394    pub mouseitem: ::std::os::raw::c_int,
3395    pub mousehelp: ::std::os::raw::c_int,
3396    pub mouseclicks: ::std::os::raw::c_int,
3397    pub mousesectcheck: ::std::os::raw::c_int,
3398    pub editsect: ::std::os::raw::c_int,
3399    pub edititem: ::std::os::raw::c_int,
3400    pub editcursor: ::std::os::raw::c_int,
3401    pub editscroll: ::std::os::raw::c_int,
3402    pub edittext: [::std::os::raw::c_char; 300usize],
3403    pub editchanged: *mut mjuiItem,
3404    pub nsect: ::std::os::raw::c_int,
3405    pub sect: [mjuiSection; 10usize],
3406}
3407pub type mjUI = mjUI_;
3408#[repr(C)]
3409#[derive(Debug, Clone, Copy)]
3410pub struct mjuiDef_ {
3411    pub type_: ::std::os::raw::c_int,
3412    pub name: [::std::os::raw::c_char; 40usize],
3413    pub state: ::std::os::raw::c_int,
3414    pub pdata: *mut ::std::os::raw::c_void,
3415    pub other: [::std::os::raw::c_char; 300usize],
3416    pub otherint: ::std::os::raw::c_int,
3417}
3418pub type mjuiDef = mjuiDef_;
3419unsafe extern "C" {
3420    pub static mut mju_user_error:
3421        ::std::option::Option<unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char)>;
3422}
3423unsafe extern "C" {
3424    pub static mut mju_user_warning:
3425        ::std::option::Option<unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char)>;
3426}
3427unsafe extern "C" {
3428    pub static mut mju_user_malloc:
3429        ::std::option::Option<unsafe extern "C" fn(arg1: usize) -> *mut ::std::os::raw::c_void>;
3430}
3431unsafe extern "C" {
3432    pub static mut mju_user_free:
3433        ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
3434}
3435unsafe extern "C" {
3436    pub static mut mjcb_passive: mjfGeneric;
3437}
3438unsafe extern "C" {
3439    pub static mut mjcb_control: mjfGeneric;
3440}
3441unsafe extern "C" {
3442    pub static mut mjcb_contactfilter: mjfConFilt;
3443}
3444unsafe extern "C" {
3445    pub static mut mjcb_sensor: mjfSensor;
3446}
3447unsafe extern "C" {
3448    pub static mut mjcb_time: mjfTime;
3449}
3450unsafe extern "C" {
3451    pub static mut mjcb_act_dyn: mjfAct;
3452}
3453unsafe extern "C" {
3454    pub static mut mjcb_act_gain: mjfAct;
3455}
3456unsafe extern "C" {
3457    pub static mut mjcb_act_bias: mjfAct;
3458}
3459unsafe extern "C" {
3460    pub static mut mjCOLLISIONFUNC: [[mjfCollision; 9usize]; 9usize];
3461}
3462unsafe extern "C" {
3463    pub static mut mjDISABLESTRING: [*const ::std::os::raw::c_char; 17usize];
3464}
3465unsafe extern "C" {
3466    pub static mut mjENABLESTRING: [*const ::std::os::raw::c_char; 6usize];
3467}
3468unsafe extern "C" {
3469    pub static mut mjTIMERSTRING: [*const ::std::os::raw::c_char; 15usize];
3470}
3471unsafe extern "C" {
3472    pub static mut mjLABELSTRING: [*const ::std::os::raw::c_char; 17usize];
3473}
3474unsafe extern "C" {
3475    pub static mut mjFRAMESTRING: [*const ::std::os::raw::c_char; 8usize];
3476}
3477unsafe extern "C" {
3478    pub static mut mjVISSTRING: [[*const ::std::os::raw::c_char; 3usize]; 31usize];
3479}
3480unsafe extern "C" {
3481    pub static mut mjRNDSTRING: [[*const ::std::os::raw::c_char; 3usize]; 10usize];
3482}
3483unsafe extern "C" {
3484    pub fn mj_defaultVFS(vfs: *mut mjVFS);
3485}
3486unsafe extern "C" {
3487    pub fn mj_addFileVFS(
3488        vfs: *mut mjVFS,
3489        directory: *const ::std::os::raw::c_char,
3490        filename: *const ::std::os::raw::c_char,
3491    ) -> ::std::os::raw::c_int;
3492}
3493unsafe extern "C" {
3494    pub fn mj_addBufferVFS(
3495        vfs: *mut mjVFS,
3496        name: *const ::std::os::raw::c_char,
3497        buffer: *const ::std::os::raw::c_void,
3498        nbuffer: ::std::os::raw::c_int,
3499    ) -> ::std::os::raw::c_int;
3500}
3501unsafe extern "C" {
3502    pub fn mj_deleteFileVFS(
3503        vfs: *mut mjVFS,
3504        filename: *const ::std::os::raw::c_char,
3505    ) -> ::std::os::raw::c_int;
3506}
3507unsafe extern "C" {
3508    pub fn mj_deleteVFS(vfs: *mut mjVFS);
3509}
3510unsafe extern "C" {
3511    pub fn mj_loadXML(
3512        filename: *const ::std::os::raw::c_char,
3513        vfs: *const mjVFS,
3514        error: *mut ::std::os::raw::c_char,
3515        error_sz: ::std::os::raw::c_int,
3516    ) -> *mut mjModel;
3517}
3518unsafe extern "C" {
3519    pub fn mj_parseXML(
3520        filename: *const ::std::os::raw::c_char,
3521        vfs: *const mjVFS,
3522        error: *mut ::std::os::raw::c_char,
3523        error_sz: ::std::os::raw::c_int,
3524    ) -> *mut mjSpec;
3525}
3526unsafe extern "C" {
3527    pub fn mj_parseXMLString(
3528        xml: *const ::std::os::raw::c_char,
3529        vfs: *const mjVFS,
3530        error: *mut ::std::os::raw::c_char,
3531        error_sz: ::std::os::raw::c_int,
3532    ) -> *mut mjSpec;
3533}
3534unsafe extern "C" {
3535    pub fn mj_compile(s: *mut mjSpec, vfs: *const mjVFS) -> *mut mjModel;
3536}
3537unsafe extern "C" {
3538    pub fn mj_copyBack(s: *mut mjSpec, m: *const mjModel) -> ::std::os::raw::c_int;
3539}
3540unsafe extern "C" {
3541    pub fn mj_recompile(
3542        s: *mut mjSpec,
3543        vfs: *const mjVFS,
3544        m: *mut mjModel,
3545        d: *mut mjData,
3546    ) -> ::std::os::raw::c_int;
3547}
3548unsafe extern "C" {
3549    pub fn mj_saveLastXML(
3550        filename: *const ::std::os::raw::c_char,
3551        m: *const mjModel,
3552        error: *mut ::std::os::raw::c_char,
3553        error_sz: ::std::os::raw::c_int,
3554    ) -> ::std::os::raw::c_int;
3555}
3556unsafe extern "C" {
3557    pub fn mj_freeLastXML();
3558}
3559unsafe extern "C" {
3560    pub fn mj_saveXMLString(
3561        s: *const mjSpec,
3562        xml: *mut ::std::os::raw::c_char,
3563        xml_sz: ::std::os::raw::c_int,
3564        error: *mut ::std::os::raw::c_char,
3565        error_sz: ::std::os::raw::c_int,
3566    ) -> ::std::os::raw::c_int;
3567}
3568unsafe extern "C" {
3569    pub fn mj_saveXML(
3570        s: *const mjSpec,
3571        filename: *const ::std::os::raw::c_char,
3572        error: *mut ::std::os::raw::c_char,
3573        error_sz: ::std::os::raw::c_int,
3574    ) -> ::std::os::raw::c_int;
3575}
3576unsafe extern "C" {
3577    pub fn mj_step(m: *const mjModel, d: *mut mjData);
3578}
3579unsafe extern "C" {
3580    pub fn mj_step1(m: *const mjModel, d: *mut mjData);
3581}
3582unsafe extern "C" {
3583    pub fn mj_step2(m: *const mjModel, d: *mut mjData);
3584}
3585unsafe extern "C" {
3586    pub fn mj_forward(m: *const mjModel, d: *mut mjData);
3587}
3588unsafe extern "C" {
3589    pub fn mj_inverse(m: *const mjModel, d: *mut mjData);
3590}
3591unsafe extern "C" {
3592    pub fn mj_forwardSkip(
3593        m: *const mjModel,
3594        d: *mut mjData,
3595        skipstage: ::std::os::raw::c_int,
3596        skipsensor: ::std::os::raw::c_int,
3597    );
3598}
3599unsafe extern "C" {
3600    pub fn mj_inverseSkip(
3601        m: *const mjModel,
3602        d: *mut mjData,
3603        skipstage: ::std::os::raw::c_int,
3604        skipsensor: ::std::os::raw::c_int,
3605    );
3606}
3607unsafe extern "C" {
3608    pub fn mj_defaultLROpt(opt: *mut mjLROpt);
3609}
3610unsafe extern "C" {
3611    pub fn mj_defaultSolRefImp(solref: *mut mjtNum, solimp: *mut mjtNum);
3612}
3613unsafe extern "C" {
3614    pub fn mj_defaultOption(opt: *mut mjOption);
3615}
3616unsafe extern "C" {
3617    pub fn mj_defaultVisual(vis: *mut mjVisual);
3618}
3619unsafe extern "C" {
3620    pub fn mj_copyModel(dest: *mut mjModel, src: *const mjModel) -> *mut mjModel;
3621}
3622unsafe extern "C" {
3623    pub fn mj_saveModel(
3624        m: *const mjModel,
3625        filename: *const ::std::os::raw::c_char,
3626        buffer: *mut ::std::os::raw::c_void,
3627        buffer_sz: ::std::os::raw::c_int,
3628    );
3629}
3630unsafe extern "C" {
3631    pub fn mj_loadModel(filename: *const ::std::os::raw::c_char, vfs: *const mjVFS)
3632        -> *mut mjModel;
3633}
3634unsafe extern "C" {
3635    pub fn mj_deleteModel(m: *mut mjModel);
3636}
3637unsafe extern "C" {
3638    pub fn mj_sizeModel(m: *const mjModel) -> ::std::os::raw::c_int;
3639}
3640unsafe extern "C" {
3641    pub fn mj_makeData(m: *const mjModel) -> *mut mjData;
3642}
3643unsafe extern "C" {
3644    pub fn mj_copyData(dest: *mut mjData, m: *const mjModel, src: *const mjData) -> *mut mjData;
3645}
3646unsafe extern "C" {
3647    pub fn mjv_copyData(dest: *mut mjData, m: *const mjModel, src: *const mjData) -> *mut mjData;
3648}
3649unsafe extern "C" {
3650    pub fn mj_resetData(m: *const mjModel, d: *mut mjData);
3651}
3652unsafe extern "C" {
3653    pub fn mj_resetDataDebug(
3654        m: *const mjModel,
3655        d: *mut mjData,
3656        debug_value: ::std::os::raw::c_uchar,
3657    );
3658}
3659unsafe extern "C" {
3660    pub fn mj_resetDataKeyframe(m: *const mjModel, d: *mut mjData, key: ::std::os::raw::c_int);
3661}
3662unsafe extern "C" {
3663    pub fn mj_markStack(d: *mut mjData);
3664}
3665unsafe extern "C" {
3666    pub fn mj_freeStack(d: *mut mjData);
3667}
3668unsafe extern "C" {
3669    pub fn mj_stackAllocByte(
3670        d: *mut mjData,
3671        bytes: usize,
3672        alignment: usize,
3673    ) -> *mut ::std::os::raw::c_void;
3674}
3675unsafe extern "C" {
3676    pub fn mj_stackAllocNum(d: *mut mjData, size: usize) -> *mut mjtNum;
3677}
3678unsafe extern "C" {
3679    pub fn mj_stackAllocInt(d: *mut mjData, size: usize) -> *mut ::std::os::raw::c_int;
3680}
3681unsafe extern "C" {
3682    pub fn mj_deleteData(d: *mut mjData);
3683}
3684unsafe extern "C" {
3685    pub fn mj_resetCallbacks();
3686}
3687unsafe extern "C" {
3688    pub fn mj_setConst(m: *mut mjModel, d: *mut mjData);
3689}
3690unsafe extern "C" {
3691    pub fn mj_setLengthRange(
3692        m: *mut mjModel,
3693        d: *mut mjData,
3694        index: ::std::os::raw::c_int,
3695        opt: *const mjLROpt,
3696        error: *mut ::std::os::raw::c_char,
3697        error_sz: ::std::os::raw::c_int,
3698    ) -> ::std::os::raw::c_int;
3699}
3700unsafe extern "C" {
3701    pub fn mj_makeSpec() -> *mut mjSpec;
3702}
3703unsafe extern "C" {
3704    pub fn mj_copySpec(s: *const mjSpec) -> *mut mjSpec;
3705}
3706unsafe extern "C" {
3707    pub fn mj_deleteSpec(s: *mut mjSpec);
3708}
3709unsafe extern "C" {
3710    pub fn mjs_activatePlugin(
3711        s: *mut mjSpec,
3712        name: *const ::std::os::raw::c_char,
3713    ) -> ::std::os::raw::c_int;
3714}
3715unsafe extern "C" {
3716    pub fn mjs_setDeepCopy(
3717        s: *mut mjSpec,
3718        deepcopy: ::std::os::raw::c_int,
3719    ) -> ::std::os::raw::c_int;
3720}
3721unsafe extern "C" {
3722    pub fn mj_printFormattedModel(
3723        m: *const mjModel,
3724        filename: *const ::std::os::raw::c_char,
3725        float_format: *const ::std::os::raw::c_char,
3726    );
3727}
3728unsafe extern "C" {
3729    pub fn mj_printModel(m: *const mjModel, filename: *const ::std::os::raw::c_char);
3730}
3731unsafe extern "C" {
3732    pub fn mj_printFormattedData(
3733        m: *const mjModel,
3734        d: *const mjData,
3735        filename: *const ::std::os::raw::c_char,
3736        float_format: *const ::std::os::raw::c_char,
3737    );
3738}
3739unsafe extern "C" {
3740    pub fn mj_printData(
3741        m: *const mjModel,
3742        d: *const mjData,
3743        filename: *const ::std::os::raw::c_char,
3744    );
3745}
3746unsafe extern "C" {
3747    pub fn mju_printMat(mat: *const mjtNum, nr: ::std::os::raw::c_int, nc: ::std::os::raw::c_int);
3748}
3749unsafe extern "C" {
3750    pub fn mju_printMatSparse(
3751        mat: *const mjtNum,
3752        nr: ::std::os::raw::c_int,
3753        rownnz: *const ::std::os::raw::c_int,
3754        rowadr: *const ::std::os::raw::c_int,
3755        colind: *const ::std::os::raw::c_int,
3756    );
3757}
3758unsafe extern "C" {
3759    pub fn mj_printSchema(
3760        filename: *const ::std::os::raw::c_char,
3761        buffer: *mut ::std::os::raw::c_char,
3762        buffer_sz: ::std::os::raw::c_int,
3763        flg_html: ::std::os::raw::c_int,
3764        flg_pad: ::std::os::raw::c_int,
3765    ) -> ::std::os::raw::c_int;
3766}
3767unsafe extern "C" {
3768    pub fn mj_fwdPosition(m: *const mjModel, d: *mut mjData);
3769}
3770unsafe extern "C" {
3771    pub fn mj_fwdVelocity(m: *const mjModel, d: *mut mjData);
3772}
3773unsafe extern "C" {
3774    pub fn mj_fwdActuation(m: *const mjModel, d: *mut mjData);
3775}
3776unsafe extern "C" {
3777    pub fn mj_fwdAcceleration(m: *const mjModel, d: *mut mjData);
3778}
3779unsafe extern "C" {
3780    pub fn mj_fwdConstraint(m: *const mjModel, d: *mut mjData);
3781}
3782unsafe extern "C" {
3783    pub fn mj_Euler(m: *const mjModel, d: *mut mjData);
3784}
3785unsafe extern "C" {
3786    pub fn mj_RungeKutta(m: *const mjModel, d: *mut mjData, N: ::std::os::raw::c_int);
3787}
3788unsafe extern "C" {
3789    pub fn mj_implicit(m: *const mjModel, d: *mut mjData);
3790}
3791unsafe extern "C" {
3792    pub fn mj_invPosition(m: *const mjModel, d: *mut mjData);
3793}
3794unsafe extern "C" {
3795    pub fn mj_invVelocity(m: *const mjModel, d: *mut mjData);
3796}
3797unsafe extern "C" {
3798    pub fn mj_invConstraint(m: *const mjModel, d: *mut mjData);
3799}
3800unsafe extern "C" {
3801    pub fn mj_compareFwdInv(m: *const mjModel, d: *mut mjData);
3802}
3803unsafe extern "C" {
3804    pub fn mj_sensorPos(m: *const mjModel, d: *mut mjData);
3805}
3806unsafe extern "C" {
3807    pub fn mj_sensorVel(m: *const mjModel, d: *mut mjData);
3808}
3809unsafe extern "C" {
3810    pub fn mj_sensorAcc(m: *const mjModel, d: *mut mjData);
3811}
3812unsafe extern "C" {
3813    pub fn mj_energyPos(m: *const mjModel, d: *mut mjData);
3814}
3815unsafe extern "C" {
3816    pub fn mj_energyVel(m: *const mjModel, d: *mut mjData);
3817}
3818unsafe extern "C" {
3819    pub fn mj_checkPos(m: *const mjModel, d: *mut mjData);
3820}
3821unsafe extern "C" {
3822    pub fn mj_checkVel(m: *const mjModel, d: *mut mjData);
3823}
3824unsafe extern "C" {
3825    pub fn mj_checkAcc(m: *const mjModel, d: *mut mjData);
3826}
3827unsafe extern "C" {
3828    pub fn mj_kinematics(m: *const mjModel, d: *mut mjData);
3829}
3830unsafe extern "C" {
3831    pub fn mj_comPos(m: *const mjModel, d: *mut mjData);
3832}
3833unsafe extern "C" {
3834    pub fn mj_camlight(m: *const mjModel, d: *mut mjData);
3835}
3836unsafe extern "C" {
3837    pub fn mj_flex(m: *const mjModel, d: *mut mjData);
3838}
3839unsafe extern "C" {
3840    pub fn mj_tendon(m: *const mjModel, d: *mut mjData);
3841}
3842unsafe extern "C" {
3843    pub fn mj_transmission(m: *const mjModel, d: *mut mjData);
3844}
3845unsafe extern "C" {
3846    pub fn mj_crb(m: *const mjModel, d: *mut mjData);
3847}
3848unsafe extern "C" {
3849    pub fn mj_makeM(m: *const mjModel, d: *mut mjData);
3850}
3851unsafe extern "C" {
3852    pub fn mj_factorM(m: *const mjModel, d: *mut mjData);
3853}
3854unsafe extern "C" {
3855    pub fn mj_solveM(
3856        m: *const mjModel,
3857        d: *mut mjData,
3858        x: *mut mjtNum,
3859        y: *const mjtNum,
3860        n: ::std::os::raw::c_int,
3861    );
3862}
3863unsafe extern "C" {
3864    pub fn mj_solveM2(
3865        m: *const mjModel,
3866        d: *mut mjData,
3867        x: *mut mjtNum,
3868        y: *const mjtNum,
3869        sqrtInvD: *const mjtNum,
3870        n: ::std::os::raw::c_int,
3871    );
3872}
3873unsafe extern "C" {
3874    pub fn mj_comVel(m: *const mjModel, d: *mut mjData);
3875}
3876unsafe extern "C" {
3877    pub fn mj_passive(m: *const mjModel, d: *mut mjData);
3878}
3879unsafe extern "C" {
3880    pub fn mj_subtreeVel(m: *const mjModel, d: *mut mjData);
3881}
3882unsafe extern "C" {
3883    pub fn mj_rne(
3884        m: *const mjModel,
3885        d: *mut mjData,
3886        flg_acc: ::std::os::raw::c_int,
3887        result: *mut mjtNum,
3888    );
3889}
3890unsafe extern "C" {
3891    pub fn mj_rnePostConstraint(m: *const mjModel, d: *mut mjData);
3892}
3893unsafe extern "C" {
3894    pub fn mj_collision(m: *const mjModel, d: *mut mjData);
3895}
3896unsafe extern "C" {
3897    pub fn mj_makeConstraint(m: *const mjModel, d: *mut mjData);
3898}
3899unsafe extern "C" {
3900    pub fn mj_island(m: *const mjModel, d: *mut mjData);
3901}
3902unsafe extern "C" {
3903    pub fn mj_projectConstraint(m: *const mjModel, d: *mut mjData);
3904}
3905unsafe extern "C" {
3906    pub fn mj_referenceConstraint(m: *const mjModel, d: *mut mjData);
3907}
3908unsafe extern "C" {
3909    pub fn mj_constraintUpdate(
3910        m: *const mjModel,
3911        d: *mut mjData,
3912        jar: *const mjtNum,
3913        cost: *mut mjtNum,
3914        flg_coneHessian: ::std::os::raw::c_int,
3915    );
3916}
3917unsafe extern "C" {
3918    pub fn mj_stateSize(m: *const mjModel, spec: ::std::os::raw::c_uint) -> ::std::os::raw::c_int;
3919}
3920unsafe extern "C" {
3921    pub fn mj_getState(
3922        m: *const mjModel,
3923        d: *const mjData,
3924        state: *mut mjtNum,
3925        spec: ::std::os::raw::c_uint,
3926    );
3927}
3928unsafe extern "C" {
3929    pub fn mj_setState(
3930        m: *const mjModel,
3931        d: *mut mjData,
3932        state: *const mjtNum,
3933        spec: ::std::os::raw::c_uint,
3934    );
3935}
3936unsafe extern "C" {
3937    pub fn mj_setKeyframe(m: *mut mjModel, d: *const mjData, k: ::std::os::raw::c_int);
3938}
3939unsafe extern "C" {
3940    pub fn mj_addContact(
3941        m: *const mjModel,
3942        d: *mut mjData,
3943        con: *const mjContact,
3944    ) -> ::std::os::raw::c_int;
3945}
3946unsafe extern "C" {
3947    pub fn mj_isPyramidal(m: *const mjModel) -> ::std::os::raw::c_int;
3948}
3949unsafe extern "C" {
3950    pub fn mj_isSparse(m: *const mjModel) -> ::std::os::raw::c_int;
3951}
3952unsafe extern "C" {
3953    pub fn mj_isDual(m: *const mjModel) -> ::std::os::raw::c_int;
3954}
3955unsafe extern "C" {
3956    pub fn mj_mulJacVec(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
3957}
3958unsafe extern "C" {
3959    pub fn mj_mulJacTVec(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
3960}
3961unsafe extern "C" {
3962    pub fn mj_jac(
3963        m: *const mjModel,
3964        d: *const mjData,
3965        jacp: *mut mjtNum,
3966        jacr: *mut mjtNum,
3967        point: *const mjtNum,
3968        body: ::std::os::raw::c_int,
3969    );
3970}
3971unsafe extern "C" {
3972    pub fn mj_jacBody(
3973        m: *const mjModel,
3974        d: *const mjData,
3975        jacp: *mut mjtNum,
3976        jacr: *mut mjtNum,
3977        body: ::std::os::raw::c_int,
3978    );
3979}
3980unsafe extern "C" {
3981    pub fn mj_jacBodyCom(
3982        m: *const mjModel,
3983        d: *const mjData,
3984        jacp: *mut mjtNum,
3985        jacr: *mut mjtNum,
3986        body: ::std::os::raw::c_int,
3987    );
3988}
3989unsafe extern "C" {
3990    pub fn mj_jacSubtreeCom(
3991        m: *const mjModel,
3992        d: *mut mjData,
3993        jacp: *mut mjtNum,
3994        body: ::std::os::raw::c_int,
3995    );
3996}
3997unsafe extern "C" {
3998    pub fn mj_jacGeom(
3999        m: *const mjModel,
4000        d: *const mjData,
4001        jacp: *mut mjtNum,
4002        jacr: *mut mjtNum,
4003        geom: ::std::os::raw::c_int,
4004    );
4005}
4006unsafe extern "C" {
4007    pub fn mj_jacSite(
4008        m: *const mjModel,
4009        d: *const mjData,
4010        jacp: *mut mjtNum,
4011        jacr: *mut mjtNum,
4012        site: ::std::os::raw::c_int,
4013    );
4014}
4015unsafe extern "C" {
4016    pub fn mj_jacPointAxis(
4017        m: *const mjModel,
4018        d: *mut mjData,
4019        jacPoint: *mut mjtNum,
4020        jacAxis: *mut mjtNum,
4021        point: *const mjtNum,
4022        axis: *const mjtNum,
4023        body: ::std::os::raw::c_int,
4024    );
4025}
4026unsafe extern "C" {
4027    pub fn mj_jacDot(
4028        m: *const mjModel,
4029        d: *const mjData,
4030        jacp: *mut mjtNum,
4031        jacr: *mut mjtNum,
4032        point: *const mjtNum,
4033        body: ::std::os::raw::c_int,
4034    );
4035}
4036unsafe extern "C" {
4037    pub fn mj_angmomMat(
4038        m: *const mjModel,
4039        d: *mut mjData,
4040        mat: *mut mjtNum,
4041        body: ::std::os::raw::c_int,
4042    );
4043}
4044unsafe extern "C" {
4045    pub fn mj_name2id(
4046        m: *const mjModel,
4047        type_: ::std::os::raw::c_int,
4048        name: *const ::std::os::raw::c_char,
4049    ) -> ::std::os::raw::c_int;
4050}
4051unsafe extern "C" {
4052    pub fn mj_id2name(
4053        m: *const mjModel,
4054        type_: ::std::os::raw::c_int,
4055        id: ::std::os::raw::c_int,
4056    ) -> *const ::std::os::raw::c_char;
4057}
4058unsafe extern "C" {
4059    pub fn mj_fullM(m: *const mjModel, dst: *mut mjtNum, M: *const mjtNum);
4060}
4061unsafe extern "C" {
4062    pub fn mj_mulM(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
4063}
4064unsafe extern "C" {
4065    pub fn mj_mulM2(m: *const mjModel, d: *const mjData, res: *mut mjtNum, vec: *const mjtNum);
4066}
4067unsafe extern "C" {
4068    pub fn mj_addM(
4069        m: *const mjModel,
4070        d: *mut mjData,
4071        dst: *mut mjtNum,
4072        rownnz: *mut ::std::os::raw::c_int,
4073        rowadr: *mut ::std::os::raw::c_int,
4074        colind: *mut ::std::os::raw::c_int,
4075    );
4076}
4077unsafe extern "C" {
4078    pub fn mj_applyFT(
4079        m: *const mjModel,
4080        d: *mut mjData,
4081        force: *const mjtNum,
4082        torque: *const mjtNum,
4083        point: *const mjtNum,
4084        body: ::std::os::raw::c_int,
4085        qfrc_target: *mut mjtNum,
4086    );
4087}
4088unsafe extern "C" {
4089    pub fn mj_objectVelocity(
4090        m: *const mjModel,
4091        d: *const mjData,
4092        objtype: ::std::os::raw::c_int,
4093        objid: ::std::os::raw::c_int,
4094        res: *mut mjtNum,
4095        flg_local: ::std::os::raw::c_int,
4096    );
4097}
4098unsafe extern "C" {
4099    pub fn mj_objectAcceleration(
4100        m: *const mjModel,
4101        d: *const mjData,
4102        objtype: ::std::os::raw::c_int,
4103        objid: ::std::os::raw::c_int,
4104        res: *mut mjtNum,
4105        flg_local: ::std::os::raw::c_int,
4106    );
4107}
4108unsafe extern "C" {
4109    pub fn mj_geomDistance(
4110        m: *const mjModel,
4111        d: *const mjData,
4112        geom1: ::std::os::raw::c_int,
4113        geom2: ::std::os::raw::c_int,
4114        distmax: mjtNum,
4115        fromto: *mut mjtNum,
4116    ) -> mjtNum;
4117}
4118unsafe extern "C" {
4119    pub fn mj_contactForce(
4120        m: *const mjModel,
4121        d: *const mjData,
4122        id: ::std::os::raw::c_int,
4123        result: *mut mjtNum,
4124    );
4125}
4126unsafe extern "C" {
4127    pub fn mj_differentiatePos(
4128        m: *const mjModel,
4129        qvel: *mut mjtNum,
4130        dt: mjtNum,
4131        qpos1: *const mjtNum,
4132        qpos2: *const mjtNum,
4133    );
4134}
4135unsafe extern "C" {
4136    pub fn mj_integratePos(m: *const mjModel, qpos: *mut mjtNum, qvel: *const mjtNum, dt: mjtNum);
4137}
4138unsafe extern "C" {
4139    pub fn mj_normalizeQuat(m: *const mjModel, qpos: *mut mjtNum);
4140}
4141unsafe extern "C" {
4142    pub fn mj_local2Global(
4143        d: *mut mjData,
4144        xpos: *mut mjtNum,
4145        xmat: *mut mjtNum,
4146        pos: *const mjtNum,
4147        quat: *const mjtNum,
4148        body: ::std::os::raw::c_int,
4149        sameframe: mjtByte,
4150    );
4151}
4152unsafe extern "C" {
4153    pub fn mj_getTotalmass(m: *const mjModel) -> mjtNum;
4154}
4155unsafe extern "C" {
4156    pub fn mj_setTotalmass(m: *mut mjModel, newmass: mjtNum);
4157}
4158unsafe extern "C" {
4159    pub fn mj_getPluginConfig(
4160        m: *const mjModel,
4161        plugin_id: ::std::os::raw::c_int,
4162        attrib: *const ::std::os::raw::c_char,
4163    ) -> *const ::std::os::raw::c_char;
4164}
4165unsafe extern "C" {
4166    pub fn mj_loadPluginLibrary(path: *const ::std::os::raw::c_char);
4167}
4168unsafe extern "C" {
4169    pub fn mj_loadAllPluginLibraries(
4170        directory: *const ::std::os::raw::c_char,
4171        callback: mjfPluginLibraryLoadCallback,
4172    );
4173}
4174unsafe extern "C" {
4175    pub fn mj_version() -> ::std::os::raw::c_int;
4176}
4177unsafe extern "C" {
4178    pub fn mj_versionString() -> *const ::std::os::raw::c_char;
4179}
4180unsafe extern "C" {
4181    pub fn mj_multiRay(
4182        m: *const mjModel,
4183        d: *mut mjData,
4184        pnt: *const mjtNum,
4185        vec: *const mjtNum,
4186        geomgroup: *const mjtByte,
4187        flg_static: mjtByte,
4188        bodyexclude: ::std::os::raw::c_int,
4189        geomid: *mut ::std::os::raw::c_int,
4190        dist: *mut mjtNum,
4191        nray: ::std::os::raw::c_int,
4192        cutoff: mjtNum,
4193    );
4194}
4195unsafe extern "C" {
4196    pub fn mj_ray(
4197        m: *const mjModel,
4198        d: *const mjData,
4199        pnt: *const mjtNum,
4200        vec: *const mjtNum,
4201        geomgroup: *const mjtByte,
4202        flg_static: mjtByte,
4203        bodyexclude: ::std::os::raw::c_int,
4204        geomid: *mut ::std::os::raw::c_int,
4205    ) -> mjtNum;
4206}
4207unsafe extern "C" {
4208    pub fn mj_rayHfield(
4209        m: *const mjModel,
4210        d: *const mjData,
4211        geomid: ::std::os::raw::c_int,
4212        pnt: *const mjtNum,
4213        vec: *const mjtNum,
4214    ) -> mjtNum;
4215}
4216unsafe extern "C" {
4217    pub fn mj_rayMesh(
4218        m: *const mjModel,
4219        d: *const mjData,
4220        geomid: ::std::os::raw::c_int,
4221        pnt: *const mjtNum,
4222        vec: *const mjtNum,
4223    ) -> mjtNum;
4224}
4225unsafe extern "C" {
4226    pub fn mju_rayGeom(
4227        pos: *const mjtNum,
4228        mat: *const mjtNum,
4229        size: *const mjtNum,
4230        pnt: *const mjtNum,
4231        vec: *const mjtNum,
4232        geomtype: ::std::os::raw::c_int,
4233    ) -> mjtNum;
4234}
4235unsafe extern "C" {
4236    pub fn mju_rayFlex(
4237        m: *const mjModel,
4238        d: *const mjData,
4239        flex_layer: ::std::os::raw::c_int,
4240        flg_vert: mjtByte,
4241        flg_edge: mjtByte,
4242        flg_face: mjtByte,
4243        flg_skin: mjtByte,
4244        flexid: ::std::os::raw::c_int,
4245        pnt: *const mjtNum,
4246        vec: *const mjtNum,
4247        vertid: *mut ::std::os::raw::c_int,
4248    ) -> mjtNum;
4249}
4250unsafe extern "C" {
4251    pub fn mju_raySkin(
4252        nface: ::std::os::raw::c_int,
4253        nvert: ::std::os::raw::c_int,
4254        face: *const ::std::os::raw::c_int,
4255        vert: *const f32,
4256        pnt: *const mjtNum,
4257        vec: *const mjtNum,
4258        vertid: *mut ::std::os::raw::c_int,
4259    ) -> mjtNum;
4260}
4261unsafe extern "C" {
4262    pub fn mjv_defaultCamera(cam: *mut mjvCamera);
4263}
4264unsafe extern "C" {
4265    pub fn mjv_defaultFreeCamera(m: *const mjModel, cam: *mut mjvCamera);
4266}
4267unsafe extern "C" {
4268    pub fn mjv_defaultPerturb(pert: *mut mjvPerturb);
4269}
4270unsafe extern "C" {
4271    pub fn mjv_room2model(
4272        modelpos: *mut mjtNum,
4273        modelquat: *mut mjtNum,
4274        roompos: *const mjtNum,
4275        roomquat: *const mjtNum,
4276        scn: *const mjvScene,
4277    );
4278}
4279unsafe extern "C" {
4280    pub fn mjv_model2room(
4281        roompos: *mut mjtNum,
4282        roomquat: *mut mjtNum,
4283        modelpos: *const mjtNum,
4284        modelquat: *const mjtNum,
4285        scn: *const mjvScene,
4286    );
4287}
4288unsafe extern "C" {
4289    pub fn mjv_cameraInModel(
4290        headpos: *mut mjtNum,
4291        forward: *mut mjtNum,
4292        up: *mut mjtNum,
4293        scn: *const mjvScene,
4294    );
4295}
4296unsafe extern "C" {
4297    pub fn mjv_cameraInRoom(
4298        headpos: *mut mjtNum,
4299        forward: *mut mjtNum,
4300        up: *mut mjtNum,
4301        scn: *const mjvScene,
4302    );
4303}
4304unsafe extern "C" {
4305    pub fn mjv_frustumHeight(scn: *const mjvScene) -> mjtNum;
4306}
4307unsafe extern "C" {
4308    pub fn mjv_alignToCamera(res: *mut mjtNum, vec: *const mjtNum, forward: *const mjtNum);
4309}
4310unsafe extern "C" {
4311    pub fn mjv_moveCamera(
4312        m: *const mjModel,
4313        action: ::std::os::raw::c_int,
4314        reldx: mjtNum,
4315        reldy: mjtNum,
4316        scn: *const mjvScene,
4317        cam: *mut mjvCamera,
4318    );
4319}
4320unsafe extern "C" {
4321    pub fn mjv_movePerturb(
4322        m: *const mjModel,
4323        d: *const mjData,
4324        action: ::std::os::raw::c_int,
4325        reldx: mjtNum,
4326        reldy: mjtNum,
4327        scn: *const mjvScene,
4328        pert: *mut mjvPerturb,
4329    );
4330}
4331unsafe extern "C" {
4332    pub fn mjv_moveModel(
4333        m: *const mjModel,
4334        action: ::std::os::raw::c_int,
4335        reldx: mjtNum,
4336        reldy: mjtNum,
4337        roomup: *const mjtNum,
4338        scn: *mut mjvScene,
4339    );
4340}
4341unsafe extern "C" {
4342    pub fn mjv_initPerturb(
4343        m: *const mjModel,
4344        d: *mut mjData,
4345        scn: *const mjvScene,
4346        pert: *mut mjvPerturb,
4347    );
4348}
4349unsafe extern "C" {
4350    pub fn mjv_applyPerturbPose(
4351        m: *const mjModel,
4352        d: *mut mjData,
4353        pert: *const mjvPerturb,
4354        flg_paused: ::std::os::raw::c_int,
4355    );
4356}
4357unsafe extern "C" {
4358    pub fn mjv_applyPerturbForce(m: *const mjModel, d: *mut mjData, pert: *const mjvPerturb);
4359}
4360unsafe extern "C" {
4361    pub fn mjv_averageCamera(cam1: *const mjvGLCamera, cam2: *const mjvGLCamera) -> mjvGLCamera;
4362}
4363unsafe extern "C" {
4364    pub fn mjv_select(
4365        m: *const mjModel,
4366        d: *const mjData,
4367        vopt: *const mjvOption,
4368        aspectratio: mjtNum,
4369        relx: mjtNum,
4370        rely: mjtNum,
4371        scn: *const mjvScene,
4372        selpnt: *mut mjtNum,
4373        geomid: *mut ::std::os::raw::c_int,
4374        flexid: *mut ::std::os::raw::c_int,
4375        skinid: *mut ::std::os::raw::c_int,
4376    ) -> ::std::os::raw::c_int;
4377}
4378unsafe extern "C" {
4379    pub fn mjv_defaultOption(opt: *mut mjvOption);
4380}
4381unsafe extern "C" {
4382    pub fn mjv_defaultFigure(fig: *mut mjvFigure);
4383}
4384unsafe extern "C" {
4385    pub fn mjv_initGeom(
4386        geom: *mut mjvGeom,
4387        type_: ::std::os::raw::c_int,
4388        size: *const mjtNum,
4389        pos: *const mjtNum,
4390        mat: *const mjtNum,
4391        rgba: *const f32,
4392    );
4393}
4394unsafe extern "C" {
4395    pub fn mjv_connector(
4396        geom: *mut mjvGeom,
4397        type_: ::std::os::raw::c_int,
4398        width: mjtNum,
4399        from: *const mjtNum,
4400        to: *const mjtNum,
4401    );
4402}
4403unsafe extern "C" {
4404    pub fn mjv_defaultScene(scn: *mut mjvScene);
4405}
4406unsafe extern "C" {
4407    pub fn mjv_makeScene(m: *const mjModel, scn: *mut mjvScene, maxgeom: ::std::os::raw::c_int);
4408}
4409unsafe extern "C" {
4410    pub fn mjv_freeScene(scn: *mut mjvScene);
4411}
4412unsafe extern "C" {
4413    pub fn mjv_updateScene(
4414        m: *const mjModel,
4415        d: *mut mjData,
4416        opt: *const mjvOption,
4417        pert: *const mjvPerturb,
4418        cam: *mut mjvCamera,
4419        catmask: ::std::os::raw::c_int,
4420        scn: *mut mjvScene,
4421    );
4422}
4423unsafe extern "C" {
4424    pub fn mjv_copyModel(dest: *mut mjModel, src: *const mjModel);
4425}
4426unsafe extern "C" {
4427    pub fn mjv_addGeoms(
4428        m: *const mjModel,
4429        d: *mut mjData,
4430        opt: *const mjvOption,
4431        pert: *const mjvPerturb,
4432        catmask: ::std::os::raw::c_int,
4433        scn: *mut mjvScene,
4434    );
4435}
4436unsafe extern "C" {
4437    pub fn mjv_makeLights(m: *const mjModel, d: *const mjData, scn: *mut mjvScene);
4438}
4439unsafe extern "C" {
4440    pub fn mjv_updateCamera(
4441        m: *const mjModel,
4442        d: *const mjData,
4443        cam: *mut mjvCamera,
4444        scn: *mut mjvScene,
4445    );
4446}
4447unsafe extern "C" {
4448    pub fn mjv_updateSkin(m: *const mjModel, d: *const mjData, scn: *mut mjvScene);
4449}
4450unsafe extern "C" {
4451    pub fn mjr_defaultContext(con: *mut mjrContext);
4452}
4453unsafe extern "C" {
4454    pub fn mjr_makeContext(
4455        m: *const mjModel,
4456        con: *mut mjrContext,
4457        fontscale: ::std::os::raw::c_int,
4458    );
4459}
4460unsafe extern "C" {
4461    pub fn mjr_changeFont(fontscale: ::std::os::raw::c_int, con: *mut mjrContext);
4462}
4463unsafe extern "C" {
4464    pub fn mjr_addAux(
4465        index: ::std::os::raw::c_int,
4466        width: ::std::os::raw::c_int,
4467        height: ::std::os::raw::c_int,
4468        samples: ::std::os::raw::c_int,
4469        con: *mut mjrContext,
4470    );
4471}
4472unsafe extern "C" {
4473    pub fn mjr_freeContext(con: *mut mjrContext);
4474}
4475unsafe extern "C" {
4476    pub fn mjr_resizeOffscreen(
4477        width: ::std::os::raw::c_int,
4478        height: ::std::os::raw::c_int,
4479        con: *mut mjrContext,
4480    );
4481}
4482unsafe extern "C" {
4483    pub fn mjr_uploadTexture(
4484        m: *const mjModel,
4485        con: *const mjrContext,
4486        texid: ::std::os::raw::c_int,
4487    );
4488}
4489unsafe extern "C" {
4490    pub fn mjr_uploadMesh(m: *const mjModel, con: *const mjrContext, meshid: ::std::os::raw::c_int);
4491}
4492unsafe extern "C" {
4493    pub fn mjr_uploadHField(
4494        m: *const mjModel,
4495        con: *const mjrContext,
4496        hfieldid: ::std::os::raw::c_int,
4497    );
4498}
4499unsafe extern "C" {
4500    pub fn mjr_restoreBuffer(con: *const mjrContext);
4501}
4502unsafe extern "C" {
4503    pub fn mjr_setBuffer(framebuffer: ::std::os::raw::c_int, con: *mut mjrContext);
4504}
4505unsafe extern "C" {
4506    pub fn mjr_readPixels(
4507        rgb: *mut ::std::os::raw::c_uchar,
4508        depth: *mut f32,
4509        viewport: mjrRect,
4510        con: *const mjrContext,
4511    );
4512}
4513unsafe extern "C" {
4514    pub fn mjr_drawPixels(
4515        rgb: *const ::std::os::raw::c_uchar,
4516        depth: *const f32,
4517        viewport: mjrRect,
4518        con: *const mjrContext,
4519    );
4520}
4521unsafe extern "C" {
4522    pub fn mjr_blitBuffer(
4523        src: mjrRect,
4524        dst: mjrRect,
4525        flg_color: ::std::os::raw::c_int,
4526        flg_depth: ::std::os::raw::c_int,
4527        con: *const mjrContext,
4528    );
4529}
4530unsafe extern "C" {
4531    pub fn mjr_setAux(index: ::std::os::raw::c_int, con: *const mjrContext);
4532}
4533unsafe extern "C" {
4534    pub fn mjr_blitAux(
4535        index: ::std::os::raw::c_int,
4536        src: mjrRect,
4537        left: ::std::os::raw::c_int,
4538        bottom: ::std::os::raw::c_int,
4539        con: *const mjrContext,
4540    );
4541}
4542unsafe extern "C" {
4543    pub fn mjr_text(
4544        font: ::std::os::raw::c_int,
4545        txt: *const ::std::os::raw::c_char,
4546        con: *const mjrContext,
4547        x: f32,
4548        y: f32,
4549        r: f32,
4550        g: f32,
4551        b: f32,
4552    );
4553}
4554unsafe extern "C" {
4555    pub fn mjr_overlay(
4556        font: ::std::os::raw::c_int,
4557        gridpos: ::std::os::raw::c_int,
4558        viewport: mjrRect,
4559        overlay: *const ::std::os::raw::c_char,
4560        overlay2: *const ::std::os::raw::c_char,
4561        con: *const mjrContext,
4562    );
4563}
4564unsafe extern "C" {
4565    pub fn mjr_maxViewport(con: *const mjrContext) -> mjrRect;
4566}
4567unsafe extern "C" {
4568    pub fn mjr_rectangle(viewport: mjrRect, r: f32, g: f32, b: f32, a: f32);
4569}
4570unsafe extern "C" {
4571    pub fn mjr_label(
4572        viewport: mjrRect,
4573        font: ::std::os::raw::c_int,
4574        txt: *const ::std::os::raw::c_char,
4575        r: f32,
4576        g: f32,
4577        b: f32,
4578        a: f32,
4579        rt: f32,
4580        gt: f32,
4581        bt: f32,
4582        con: *const mjrContext,
4583    );
4584}
4585unsafe extern "C" {
4586    pub fn mjr_figure(viewport: mjrRect, fig: *mut mjvFigure, con: *const mjrContext);
4587}
4588unsafe extern "C" {
4589    pub fn mjr_render(viewport: mjrRect, scn: *mut mjvScene, con: *const mjrContext);
4590}
4591unsafe extern "C" {
4592    pub fn mjr_finish();
4593}
4594unsafe extern "C" {
4595    pub fn mjr_getError() -> ::std::os::raw::c_int;
4596}
4597unsafe extern "C" {
4598    pub fn mjr_findRect(
4599        x: ::std::os::raw::c_int,
4600        y: ::std::os::raw::c_int,
4601        nrect: ::std::os::raw::c_int,
4602        rect: *const mjrRect,
4603    ) -> ::std::os::raw::c_int;
4604}
4605unsafe extern "C" {
4606    pub fn mjui_themeSpacing(ind: ::std::os::raw::c_int) -> mjuiThemeSpacing;
4607}
4608unsafe extern "C" {
4609    pub fn mjui_themeColor(ind: ::std::os::raw::c_int) -> mjuiThemeColor;
4610}
4611unsafe extern "C" {
4612    pub fn mjui_add(ui: *mut mjUI, def: *const mjuiDef);
4613}
4614unsafe extern "C" {
4615    pub fn mjui_addToSection(ui: *mut mjUI, sect: ::std::os::raw::c_int, def: *const mjuiDef);
4616}
4617unsafe extern "C" {
4618    pub fn mjui_resize(ui: *mut mjUI, con: *const mjrContext);
4619}
4620unsafe extern "C" {
4621    pub fn mjui_update(
4622        section: ::std::os::raw::c_int,
4623        item: ::std::os::raw::c_int,
4624        ui: *const mjUI,
4625        state: *const mjuiState,
4626        con: *const mjrContext,
4627    );
4628}
4629unsafe extern "C" {
4630    pub fn mjui_event(
4631        ui: *mut mjUI,
4632        state: *mut mjuiState,
4633        con: *const mjrContext,
4634    ) -> *mut mjuiItem;
4635}
4636unsafe extern "C" {
4637    pub fn mjui_render(ui: *mut mjUI, state: *const mjuiState, con: *const mjrContext);
4638}
4639unsafe extern "C" {
4640    pub fn mju_error(msg: *const ::std::os::raw::c_char, ...);
4641}
4642unsafe extern "C" {
4643    pub fn mju_error_i(msg: *const ::std::os::raw::c_char, i: ::std::os::raw::c_int);
4644}
4645unsafe extern "C" {
4646    pub fn mju_error_s(msg: *const ::std::os::raw::c_char, text: *const ::std::os::raw::c_char);
4647}
4648unsafe extern "C" {
4649    pub fn mju_warning(msg: *const ::std::os::raw::c_char, ...);
4650}
4651unsafe extern "C" {
4652    pub fn mju_warning_i(msg: *const ::std::os::raw::c_char, i: ::std::os::raw::c_int);
4653}
4654unsafe extern "C" {
4655    pub fn mju_warning_s(msg: *const ::std::os::raw::c_char, text: *const ::std::os::raw::c_char);
4656}
4657unsafe extern "C" {
4658    pub fn mju_clearHandlers();
4659}
4660unsafe extern "C" {
4661    pub fn mju_malloc(size: usize) -> *mut ::std::os::raw::c_void;
4662}
4663unsafe extern "C" {
4664    pub fn mju_free(ptr: *mut ::std::os::raw::c_void);
4665}
4666unsafe extern "C" {
4667    pub fn mj_warning(d: *mut mjData, warning: ::std::os::raw::c_int, info: ::std::os::raw::c_int);
4668}
4669unsafe extern "C" {
4670    pub fn mju_writeLog(type_: *const ::std::os::raw::c_char, msg: *const ::std::os::raw::c_char);
4671}
4672unsafe extern "C" {
4673    pub fn mjs_getError(s: *mut mjSpec) -> *const ::std::os::raw::c_char;
4674}
4675unsafe extern "C" {
4676    pub fn mjs_isWarning(s: *mut mjSpec) -> ::std::os::raw::c_int;
4677}
4678unsafe extern "C" {
4679    pub fn mju_zero3(res: *mut mjtNum);
4680}
4681unsafe extern "C" {
4682    pub fn mju_copy3(res: *mut mjtNum, data: *const mjtNum);
4683}
4684unsafe extern "C" {
4685    pub fn mju_scl3(res: *mut mjtNum, vec: *const mjtNum, scl: mjtNum);
4686}
4687unsafe extern "C" {
4688    pub fn mju_add3(res: *mut mjtNum, vec1: *const mjtNum, vec2: *const mjtNum);
4689}
4690unsafe extern "C" {
4691    pub fn mju_sub3(res: *mut mjtNum, vec1: *const mjtNum, vec2: *const mjtNum);
4692}
4693unsafe extern "C" {
4694    pub fn mju_addTo3(res: *mut mjtNum, vec: *const mjtNum);
4695}
4696unsafe extern "C" {
4697    pub fn mju_subFrom3(res: *mut mjtNum, vec: *const mjtNum);
4698}
4699unsafe extern "C" {
4700    pub fn mju_addToScl3(res: *mut mjtNum, vec: *const mjtNum, scl: mjtNum);
4701}
4702unsafe extern "C" {
4703    pub fn mju_addScl3(res: *mut mjtNum, vec1: *const mjtNum, vec2: *const mjtNum, scl: mjtNum);
4704}
4705unsafe extern "C" {
4706    pub fn mju_normalize3(vec: *mut mjtNum) -> mjtNum;
4707}
4708unsafe extern "C" {
4709    pub fn mju_norm3(vec: *const mjtNum) -> mjtNum;
4710}
4711unsafe extern "C" {
4712    pub fn mju_dot3(vec1: *const mjtNum, vec2: *const mjtNum) -> mjtNum;
4713}
4714unsafe extern "C" {
4715    pub fn mju_dist3(pos1: *const mjtNum, pos2: *const mjtNum) -> mjtNum;
4716}
4717unsafe extern "C" {
4718    pub fn mju_mulMatVec3(res: *mut mjtNum, mat: *const mjtNum, vec: *const mjtNum);
4719}
4720unsafe extern "C" {
4721    pub fn mju_mulMatTVec3(res: *mut mjtNum, mat: *const mjtNum, vec: *const mjtNum);
4722}
4723unsafe extern "C" {
4724    pub fn mju_cross(res: *mut mjtNum, a: *const mjtNum, b: *const mjtNum);
4725}
4726unsafe extern "C" {
4727    pub fn mju_zero4(res: *mut mjtNum);
4728}
4729unsafe extern "C" {
4730    pub fn mju_unit4(res: *mut mjtNum);
4731}
4732unsafe extern "C" {
4733    pub fn mju_copy4(res: *mut mjtNum, data: *const mjtNum);
4734}
4735unsafe extern "C" {
4736    pub fn mju_normalize4(vec: *mut mjtNum) -> mjtNum;
4737}
4738unsafe extern "C" {
4739    pub fn mju_zero(res: *mut mjtNum, n: ::std::os::raw::c_int);
4740}
4741unsafe extern "C" {
4742    pub fn mju_fill(res: *mut mjtNum, val: mjtNum, n: ::std::os::raw::c_int);
4743}
4744unsafe extern "C" {
4745    pub fn mju_copy(res: *mut mjtNum, vec: *const mjtNum, n: ::std::os::raw::c_int);
4746}
4747unsafe extern "C" {
4748    pub fn mju_sum(vec: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
4749}
4750unsafe extern "C" {
4751    pub fn mju_L1(vec: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
4752}
4753unsafe extern "C" {
4754    pub fn mju_scl(res: *mut mjtNum, vec: *const mjtNum, scl: mjtNum, n: ::std::os::raw::c_int);
4755}
4756unsafe extern "C" {
4757    pub fn mju_add(
4758        res: *mut mjtNum,
4759        vec1: *const mjtNum,
4760        vec2: *const mjtNum,
4761        n: ::std::os::raw::c_int,
4762    );
4763}
4764unsafe extern "C" {
4765    pub fn mju_sub(
4766        res: *mut mjtNum,
4767        vec1: *const mjtNum,
4768        vec2: *const mjtNum,
4769        n: ::std::os::raw::c_int,
4770    );
4771}
4772unsafe extern "C" {
4773    pub fn mju_addTo(res: *mut mjtNum, vec: *const mjtNum, n: ::std::os::raw::c_int);
4774}
4775unsafe extern "C" {
4776    pub fn mju_subFrom(res: *mut mjtNum, vec: *const mjtNum, n: ::std::os::raw::c_int);
4777}
4778unsafe extern "C" {
4779    pub fn mju_addToScl(
4780        res: *mut mjtNum,
4781        vec: *const mjtNum,
4782        scl: mjtNum,
4783        n: ::std::os::raw::c_int,
4784    );
4785}
4786unsafe extern "C" {
4787    pub fn mju_addScl(
4788        res: *mut mjtNum,
4789        vec1: *const mjtNum,
4790        vec2: *const mjtNum,
4791        scl: mjtNum,
4792        n: ::std::os::raw::c_int,
4793    );
4794}
4795unsafe extern "C" {
4796    pub fn mju_normalize(res: *mut mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
4797}
4798unsafe extern "C" {
4799    pub fn mju_norm(res: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
4800}
4801unsafe extern "C" {
4802    pub fn mju_dot(vec1: *const mjtNum, vec2: *const mjtNum, n: ::std::os::raw::c_int) -> mjtNum;
4803}
4804unsafe extern "C" {
4805    pub fn mju_mulMatVec(
4806        res: *mut mjtNum,
4807        mat: *const mjtNum,
4808        vec: *const mjtNum,
4809        nr: ::std::os::raw::c_int,
4810        nc: ::std::os::raw::c_int,
4811    );
4812}
4813unsafe extern "C" {
4814    pub fn mju_mulMatTVec(
4815        res: *mut mjtNum,
4816        mat: *const mjtNum,
4817        vec: *const mjtNum,
4818        nr: ::std::os::raw::c_int,
4819        nc: ::std::os::raw::c_int,
4820    );
4821}
4822unsafe extern "C" {
4823    pub fn mju_mulVecMatVec(
4824        vec1: *const mjtNum,
4825        mat: *const mjtNum,
4826        vec2: *const mjtNum,
4827        n: ::std::os::raw::c_int,
4828    ) -> mjtNum;
4829}
4830unsafe extern "C" {
4831    pub fn mju_transpose(
4832        res: *mut mjtNum,
4833        mat: *const mjtNum,
4834        nr: ::std::os::raw::c_int,
4835        nc: ::std::os::raw::c_int,
4836    );
4837}
4838unsafe extern "C" {
4839    pub fn mju_symmetrize(res: *mut mjtNum, mat: *const mjtNum, n: ::std::os::raw::c_int);
4840}
4841unsafe extern "C" {
4842    pub fn mju_eye(mat: *mut mjtNum, n: ::std::os::raw::c_int);
4843}
4844unsafe extern "C" {
4845    pub fn mju_mulMatMat(
4846        res: *mut mjtNum,
4847        mat1: *const mjtNum,
4848        mat2: *const mjtNum,
4849        r1: ::std::os::raw::c_int,
4850        c1: ::std::os::raw::c_int,
4851        c2: ::std::os::raw::c_int,
4852    );
4853}
4854unsafe extern "C" {
4855    pub fn mju_mulMatMatT(
4856        res: *mut mjtNum,
4857        mat1: *const mjtNum,
4858        mat2: *const mjtNum,
4859        r1: ::std::os::raw::c_int,
4860        c1: ::std::os::raw::c_int,
4861        r2: ::std::os::raw::c_int,
4862    );
4863}
4864unsafe extern "C" {
4865    pub fn mju_mulMatTMat(
4866        res: *mut mjtNum,
4867        mat1: *const mjtNum,
4868        mat2: *const mjtNum,
4869        r1: ::std::os::raw::c_int,
4870        c1: ::std::os::raw::c_int,
4871        c2: ::std::os::raw::c_int,
4872    );
4873}
4874unsafe extern "C" {
4875    pub fn mju_sqrMatTD(
4876        res: *mut mjtNum,
4877        mat: *const mjtNum,
4878        diag: *const mjtNum,
4879        nr: ::std::os::raw::c_int,
4880        nc: ::std::os::raw::c_int,
4881    );
4882}
4883unsafe extern "C" {
4884    pub fn mju_transformSpatial(
4885        res: *mut mjtNum,
4886        vec: *const mjtNum,
4887        flg_force: ::std::os::raw::c_int,
4888        newpos: *const mjtNum,
4889        oldpos: *const mjtNum,
4890        rotnew2old: *const mjtNum,
4891    );
4892}
4893unsafe extern "C" {
4894    pub fn mju_dense2sparse(
4895        res: *mut mjtNum,
4896        mat: *const mjtNum,
4897        nr: ::std::os::raw::c_int,
4898        nc: ::std::os::raw::c_int,
4899        rownnz: *mut ::std::os::raw::c_int,
4900        rowadr: *mut ::std::os::raw::c_int,
4901        colind: *mut ::std::os::raw::c_int,
4902        nnz: ::std::os::raw::c_int,
4903    ) -> ::std::os::raw::c_int;
4904}
4905unsafe extern "C" {
4906    pub fn mju_sparse2dense(
4907        res: *mut mjtNum,
4908        mat: *const mjtNum,
4909        nr: ::std::os::raw::c_int,
4910        nc: ::std::os::raw::c_int,
4911        rownnz: *const ::std::os::raw::c_int,
4912        rowadr: *const ::std::os::raw::c_int,
4913        colind: *const ::std::os::raw::c_int,
4914    );
4915}
4916unsafe extern "C" {
4917    pub fn mju_rotVecQuat(res: *mut mjtNum, vec: *const mjtNum, quat: *const mjtNum);
4918}
4919unsafe extern "C" {
4920    pub fn mju_negQuat(res: *mut mjtNum, quat: *const mjtNum);
4921}
4922unsafe extern "C" {
4923    pub fn mju_mulQuat(res: *mut mjtNum, quat1: *const mjtNum, quat2: *const mjtNum);
4924}
4925unsafe extern "C" {
4926    pub fn mju_mulQuatAxis(res: *mut mjtNum, quat: *const mjtNum, axis: *const mjtNum);
4927}
4928unsafe extern "C" {
4929    pub fn mju_axisAngle2Quat(res: *mut mjtNum, axis: *const mjtNum, angle: mjtNum);
4930}
4931unsafe extern "C" {
4932    pub fn mju_quat2Vel(res: *mut mjtNum, quat: *const mjtNum, dt: mjtNum);
4933}
4934unsafe extern "C" {
4935    pub fn mju_subQuat(res: *mut mjtNum, qa: *const mjtNum, qb: *const mjtNum);
4936}
4937unsafe extern "C" {
4938    pub fn mju_quat2Mat(res: *mut mjtNum, quat: *const mjtNum);
4939}
4940unsafe extern "C" {
4941    pub fn mju_mat2Quat(quat: *mut mjtNum, mat: *const mjtNum);
4942}
4943unsafe extern "C" {
4944    pub fn mju_derivQuat(res: *mut mjtNum, quat: *const mjtNum, vel: *const mjtNum);
4945}
4946unsafe extern "C" {
4947    pub fn mju_quatIntegrate(quat: *mut mjtNum, vel: *const mjtNum, scale: mjtNum);
4948}
4949unsafe extern "C" {
4950    pub fn mju_quatZ2Vec(quat: *mut mjtNum, vec: *const mjtNum);
4951}
4952unsafe extern "C" {
4953    pub fn mju_mat2Rot(quat: *mut mjtNum, mat: *const mjtNum) -> ::std::os::raw::c_int;
4954}
4955unsafe extern "C" {
4956    pub fn mju_euler2Quat(
4957        quat: *mut mjtNum,
4958        euler: *const mjtNum,
4959        seq: *const ::std::os::raw::c_char,
4960    );
4961}
4962unsafe extern "C" {
4963    pub fn mju_mulPose(
4964        posres: *mut mjtNum,
4965        quatres: *mut mjtNum,
4966        pos1: *const mjtNum,
4967        quat1: *const mjtNum,
4968        pos2: *const mjtNum,
4969        quat2: *const mjtNum,
4970    );
4971}
4972unsafe extern "C" {
4973    pub fn mju_negPose(
4974        posres: *mut mjtNum,
4975        quatres: *mut mjtNum,
4976        pos: *const mjtNum,
4977        quat: *const mjtNum,
4978    );
4979}
4980unsafe extern "C" {
4981    pub fn mju_trnVecPose(
4982        res: *mut mjtNum,
4983        pos: *const mjtNum,
4984        quat: *const mjtNum,
4985        vec: *const mjtNum,
4986    );
4987}
4988unsafe extern "C" {
4989    pub fn mju_cholFactor(
4990        mat: *mut mjtNum,
4991        n: ::std::os::raw::c_int,
4992        mindiag: mjtNum,
4993    ) -> ::std::os::raw::c_int;
4994}
4995unsafe extern "C" {
4996    pub fn mju_cholSolve(
4997        res: *mut mjtNum,
4998        mat: *const mjtNum,
4999        vec: *const mjtNum,
5000        n: ::std::os::raw::c_int,
5001    );
5002}
5003unsafe extern "C" {
5004    pub fn mju_cholUpdate(
5005        mat: *mut mjtNum,
5006        x: *mut mjtNum,
5007        n: ::std::os::raw::c_int,
5008        flg_plus: ::std::os::raw::c_int,
5009    ) -> ::std::os::raw::c_int;
5010}
5011unsafe extern "C" {
5012    pub fn mju_cholFactorBand(
5013        mat: *mut mjtNum,
5014        ntotal: ::std::os::raw::c_int,
5015        nband: ::std::os::raw::c_int,
5016        ndense: ::std::os::raw::c_int,
5017        diagadd: mjtNum,
5018        diagmul: mjtNum,
5019    ) -> mjtNum;
5020}
5021unsafe extern "C" {
5022    pub fn mju_cholSolveBand(
5023        res: *mut mjtNum,
5024        mat: *const mjtNum,
5025        vec: *const mjtNum,
5026        ntotal: ::std::os::raw::c_int,
5027        nband: ::std::os::raw::c_int,
5028        ndense: ::std::os::raw::c_int,
5029    );
5030}
5031unsafe extern "C" {
5032    pub fn mju_band2Dense(
5033        res: *mut mjtNum,
5034        mat: *const mjtNum,
5035        ntotal: ::std::os::raw::c_int,
5036        nband: ::std::os::raw::c_int,
5037        ndense: ::std::os::raw::c_int,
5038        flg_sym: mjtByte,
5039    );
5040}
5041unsafe extern "C" {
5042    pub fn mju_dense2Band(
5043        res: *mut mjtNum,
5044        mat: *const mjtNum,
5045        ntotal: ::std::os::raw::c_int,
5046        nband: ::std::os::raw::c_int,
5047        ndense: ::std::os::raw::c_int,
5048    );
5049}
5050unsafe extern "C" {
5051    pub fn mju_bandMulMatVec(
5052        res: *mut mjtNum,
5053        mat: *const mjtNum,
5054        vec: *const mjtNum,
5055        ntotal: ::std::os::raw::c_int,
5056        nband: ::std::os::raw::c_int,
5057        ndense: ::std::os::raw::c_int,
5058        nvec: ::std::os::raw::c_int,
5059        flg_sym: mjtByte,
5060    );
5061}
5062unsafe extern "C" {
5063    pub fn mju_bandDiag(
5064        i: ::std::os::raw::c_int,
5065        ntotal: ::std::os::raw::c_int,
5066        nband: ::std::os::raw::c_int,
5067        ndense: ::std::os::raw::c_int,
5068    ) -> ::std::os::raw::c_int;
5069}
5070unsafe extern "C" {
5071    pub fn mju_eig3(
5072        eigval: *mut mjtNum,
5073        eigvec: *mut mjtNum,
5074        quat: *mut mjtNum,
5075        mat: *const mjtNum,
5076    ) -> ::std::os::raw::c_int;
5077}
5078unsafe extern "C" {
5079    pub fn mju_boxQP(
5080        res: *mut mjtNum,
5081        R: *mut mjtNum,
5082        index: *mut ::std::os::raw::c_int,
5083        H: *const mjtNum,
5084        g: *const mjtNum,
5085        n: ::std::os::raw::c_int,
5086        lower: *const mjtNum,
5087        upper: *const mjtNum,
5088    ) -> ::std::os::raw::c_int;
5089}
5090unsafe extern "C" {
5091    pub fn mju_boxQPmalloc(
5092        res: *mut *mut mjtNum,
5093        R: *mut *mut mjtNum,
5094        index: *mut *mut ::std::os::raw::c_int,
5095        H: *mut *mut mjtNum,
5096        g: *mut *mut mjtNum,
5097        n: ::std::os::raw::c_int,
5098        lower: *mut *mut mjtNum,
5099        upper: *mut *mut mjtNum,
5100    );
5101}
5102unsafe extern "C" {
5103    pub fn mju_muscleGain(
5104        len: mjtNum,
5105        vel: mjtNum,
5106        lengthrange: *const mjtNum,
5107        acc0: mjtNum,
5108        prm: *const mjtNum,
5109    ) -> mjtNum;
5110}
5111unsafe extern "C" {
5112    pub fn mju_muscleBias(
5113        len: mjtNum,
5114        lengthrange: *const mjtNum,
5115        acc0: mjtNum,
5116        prm: *const mjtNum,
5117    ) -> mjtNum;
5118}
5119unsafe extern "C" {
5120    pub fn mju_muscleDynamics(ctrl: mjtNum, act: mjtNum, prm: *const mjtNum) -> mjtNum;
5121}
5122unsafe extern "C" {
5123    pub fn mju_encodePyramid(
5124        pyramid: *mut mjtNum,
5125        force: *const mjtNum,
5126        mu: *const mjtNum,
5127        dim: ::std::os::raw::c_int,
5128    );
5129}
5130unsafe extern "C" {
5131    pub fn mju_decodePyramid(
5132        force: *mut mjtNum,
5133        pyramid: *const mjtNum,
5134        mu: *const mjtNum,
5135        dim: ::std::os::raw::c_int,
5136    );
5137}
5138unsafe extern "C" {
5139    pub fn mju_springDamper(
5140        pos0: mjtNum,
5141        vel0: mjtNum,
5142        Kp: mjtNum,
5143        Kv: mjtNum,
5144        dt: mjtNum,
5145    ) -> mjtNum;
5146}
5147unsafe extern "C" {
5148    pub fn mju_min(a: mjtNum, b: mjtNum) -> mjtNum;
5149}
5150unsafe extern "C" {
5151    pub fn mju_max(a: mjtNum, b: mjtNum) -> mjtNum;
5152}
5153unsafe extern "C" {
5154    pub fn mju_clip(x: mjtNum, min: mjtNum, max: mjtNum) -> mjtNum;
5155}
5156unsafe extern "C" {
5157    pub fn mju_sign(x: mjtNum) -> mjtNum;
5158}
5159unsafe extern "C" {
5160    pub fn mju_round(x: mjtNum) -> ::std::os::raw::c_int;
5161}
5162unsafe extern "C" {
5163    pub fn mju_type2Str(type_: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
5164}
5165unsafe extern "C" {
5166    pub fn mju_str2Type(str_: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
5167}
5168unsafe extern "C" {
5169    pub fn mju_writeNumBytes(nbytes: usize) -> *const ::std::os::raw::c_char;
5170}
5171unsafe extern "C" {
5172    pub fn mju_warningText(
5173        warning: ::std::os::raw::c_int,
5174        info: usize,
5175    ) -> *const ::std::os::raw::c_char;
5176}
5177unsafe extern "C" {
5178    pub fn mju_isBad(x: mjtNum) -> ::std::os::raw::c_int;
5179}
5180unsafe extern "C" {
5181    pub fn mju_isZero(vec: *mut mjtNum, n: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
5182}
5183unsafe extern "C" {
5184    pub fn mju_standardNormal(num2: *mut mjtNum) -> mjtNum;
5185}
5186unsafe extern "C" {
5187    pub fn mju_f2n(res: *mut mjtNum, vec: *const f32, n: ::std::os::raw::c_int);
5188}
5189unsafe extern "C" {
5190    pub fn mju_n2f(res: *mut f32, vec: *const mjtNum, n: ::std::os::raw::c_int);
5191}
5192unsafe extern "C" {
5193    pub fn mju_d2n(res: *mut mjtNum, vec: *const f64, n: ::std::os::raw::c_int);
5194}
5195unsafe extern "C" {
5196    pub fn mju_n2d(res: *mut f64, vec: *const mjtNum, n: ::std::os::raw::c_int);
5197}
5198unsafe extern "C" {
5199    pub fn mju_insertionSort(list: *mut mjtNum, n: ::std::os::raw::c_int);
5200}
5201unsafe extern "C" {
5202    pub fn mju_insertionSortInt(list: *mut ::std::os::raw::c_int, n: ::std::os::raw::c_int);
5203}
5204unsafe extern "C" {
5205    pub fn mju_Halton(index: ::std::os::raw::c_int, base: ::std::os::raw::c_int) -> mjtNum;
5206}
5207unsafe extern "C" {
5208    pub fn mju_strncpy(
5209        dst: *mut ::std::os::raw::c_char,
5210        src: *const ::std::os::raw::c_char,
5211        n: ::std::os::raw::c_int,
5212    ) -> *mut ::std::os::raw::c_char;
5213}
5214unsafe extern "C" {
5215    pub fn mju_sigmoid(x: mjtNum) -> mjtNum;
5216}
5217unsafe extern "C" {
5218    pub fn mjc_getSDF(m: *const mjModel, id: ::std::os::raw::c_int) -> *const mjpPlugin;
5219}
5220unsafe extern "C" {
5221    pub fn mjc_distance(
5222        m: *const mjModel,
5223        d: *const mjData,
5224        s: *const mjSDF,
5225        x: *const mjtNum,
5226    ) -> mjtNum;
5227}
5228unsafe extern "C" {
5229    pub fn mjc_gradient(
5230        m: *const mjModel,
5231        d: *const mjData,
5232        s: *const mjSDF,
5233        gradient: *mut mjtNum,
5234        x: *const mjtNum,
5235    );
5236}
5237unsafe extern "C" {
5238    pub fn mjd_transitionFD(
5239        m: *const mjModel,
5240        d: *mut mjData,
5241        eps: mjtNum,
5242        flg_centered: mjtByte,
5243        A: *mut mjtNum,
5244        B: *mut mjtNum,
5245        C: *mut mjtNum,
5246        D: *mut mjtNum,
5247    );
5248}
5249unsafe extern "C" {
5250    pub fn mjd_inverseFD(
5251        m: *const mjModel,
5252        d: *mut mjData,
5253        eps: mjtNum,
5254        flg_actuation: mjtByte,
5255        DfDq: *mut mjtNum,
5256        DfDv: *mut mjtNum,
5257        DfDa: *mut mjtNum,
5258        DsDq: *mut mjtNum,
5259        DsDv: *mut mjtNum,
5260        DsDa: *mut mjtNum,
5261        DmDq: *mut mjtNum,
5262    );
5263}
5264unsafe extern "C" {
5265    pub fn mjd_subQuat(qa: *const mjtNum, qb: *const mjtNum, Da: *mut mjtNum, Db: *mut mjtNum);
5266}
5267unsafe extern "C" {
5268    pub fn mjd_quatIntegrate(
5269        vel: *const mjtNum,
5270        scale: mjtNum,
5271        Dquat: *mut mjtNum,
5272        Dvel: *mut mjtNum,
5273        Dscale: *mut mjtNum,
5274    );
5275}
5276unsafe extern "C" {
5277    pub fn mjp_defaultPlugin(plugin: *mut mjpPlugin);
5278}
5279unsafe extern "C" {
5280    pub fn mjp_registerPlugin(plugin: *const mjpPlugin) -> ::std::os::raw::c_int;
5281}
5282unsafe extern "C" {
5283    pub fn mjp_pluginCount() -> ::std::os::raw::c_int;
5284}
5285unsafe extern "C" {
5286    pub fn mjp_getPlugin(
5287        name: *const ::std::os::raw::c_char,
5288        slot: *mut ::std::os::raw::c_int,
5289    ) -> *const mjpPlugin;
5290}
5291unsafe extern "C" {
5292    pub fn mjp_getPluginAtSlot(slot: ::std::os::raw::c_int) -> *const mjpPlugin;
5293}
5294unsafe extern "C" {
5295    pub fn mjp_defaultResourceProvider(provider: *mut mjpResourceProvider);
5296}
5297unsafe extern "C" {
5298    pub fn mjp_registerResourceProvider(
5299        provider: *const mjpResourceProvider,
5300    ) -> ::std::os::raw::c_int;
5301}
5302unsafe extern "C" {
5303    pub fn mjp_resourceProviderCount() -> ::std::os::raw::c_int;
5304}
5305unsafe extern "C" {
5306    pub fn mjp_getResourceProvider(
5307        resource_name: *const ::std::os::raw::c_char,
5308    ) -> *const mjpResourceProvider;
5309}
5310unsafe extern "C" {
5311    pub fn mjp_getResourceProviderAtSlot(slot: ::std::os::raw::c_int)
5312        -> *const mjpResourceProvider;
5313}
5314unsafe extern "C" {
5315    pub fn mju_threadPoolCreate(number_of_threads: usize) -> *mut mjThreadPool;
5316}
5317unsafe extern "C" {
5318    pub fn mju_bindThreadPool(d: *mut mjData, thread_pool: *mut ::std::os::raw::c_void);
5319}
5320unsafe extern "C" {
5321    pub fn mju_threadPoolEnqueue(thread_pool: *mut mjThreadPool, task: *mut mjTask);
5322}
5323unsafe extern "C" {
5324    pub fn mju_threadPoolDestroy(thread_pool: *mut mjThreadPool);
5325}
5326unsafe extern "C" {
5327    pub fn mju_defaultTask(task: *mut mjTask);
5328}
5329unsafe extern "C" {
5330    pub fn mju_taskJoin(task: *mut mjTask);
5331}
5332unsafe extern "C" {
5333    pub fn mjs_attach(
5334        parent: *mut mjsElement,
5335        child: *const mjsElement,
5336        prefix: *const ::std::os::raw::c_char,
5337        suffix: *const ::std::os::raw::c_char,
5338    ) -> *mut mjsElement;
5339}
5340unsafe extern "C" {
5341    pub fn mjs_addBody(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsBody;
5342}
5343unsafe extern "C" {
5344    pub fn mjs_addSite(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsSite;
5345}
5346unsafe extern "C" {
5347    pub fn mjs_addJoint(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsJoint;
5348}
5349unsafe extern "C" {
5350    pub fn mjs_addFreeJoint(body: *mut mjsBody) -> *mut mjsJoint;
5351}
5352unsafe extern "C" {
5353    pub fn mjs_addGeom(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsGeom;
5354}
5355unsafe extern "C" {
5356    pub fn mjs_addCamera(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsCamera;
5357}
5358unsafe extern "C" {
5359    pub fn mjs_addLight(body: *mut mjsBody, def: *const mjsDefault) -> *mut mjsLight;
5360}
5361unsafe extern "C" {
5362    pub fn mjs_addFrame(body: *mut mjsBody, parentframe: *mut mjsFrame) -> *mut mjsFrame;
5363}
5364unsafe extern "C" {
5365    pub fn mjs_delete(spec: *mut mjSpec, element: *mut mjsElement) -> ::std::os::raw::c_int;
5366}
5367unsafe extern "C" {
5368    pub fn mjs_addActuator(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsActuator;
5369}
5370unsafe extern "C" {
5371    pub fn mjs_addSensor(s: *mut mjSpec) -> *mut mjsSensor;
5372}
5373unsafe extern "C" {
5374    pub fn mjs_addFlex(s: *mut mjSpec) -> *mut mjsFlex;
5375}
5376unsafe extern "C" {
5377    pub fn mjs_addPair(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsPair;
5378}
5379unsafe extern "C" {
5380    pub fn mjs_addExclude(s: *mut mjSpec) -> *mut mjsExclude;
5381}
5382unsafe extern "C" {
5383    pub fn mjs_addEquality(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsEquality;
5384}
5385unsafe extern "C" {
5386    pub fn mjs_addTendon(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsTendon;
5387}
5388unsafe extern "C" {
5389    pub fn mjs_wrapSite(
5390        tendon: *mut mjsTendon,
5391        name: *const ::std::os::raw::c_char,
5392    ) -> *mut mjsWrap;
5393}
5394unsafe extern "C" {
5395    pub fn mjs_wrapGeom(
5396        tendon: *mut mjsTendon,
5397        name: *const ::std::os::raw::c_char,
5398        sidesite: *const ::std::os::raw::c_char,
5399    ) -> *mut mjsWrap;
5400}
5401unsafe extern "C" {
5402    pub fn mjs_wrapJoint(
5403        tendon: *mut mjsTendon,
5404        name: *const ::std::os::raw::c_char,
5405        coef: f64,
5406    ) -> *mut mjsWrap;
5407}
5408unsafe extern "C" {
5409    pub fn mjs_wrapPulley(tendon: *mut mjsTendon, divisor: f64) -> *mut mjsWrap;
5410}
5411unsafe extern "C" {
5412    pub fn mjs_addNumeric(s: *mut mjSpec) -> *mut mjsNumeric;
5413}
5414unsafe extern "C" {
5415    pub fn mjs_addText(s: *mut mjSpec) -> *mut mjsText;
5416}
5417unsafe extern "C" {
5418    pub fn mjs_addTuple(s: *mut mjSpec) -> *mut mjsTuple;
5419}
5420unsafe extern "C" {
5421    pub fn mjs_addKey(s: *mut mjSpec) -> *mut mjsKey;
5422}
5423unsafe extern "C" {
5424    pub fn mjs_addPlugin(s: *mut mjSpec) -> *mut mjsPlugin;
5425}
5426unsafe extern "C" {
5427    pub fn mjs_addDefault(
5428        s: *mut mjSpec,
5429        classname: *const ::std::os::raw::c_char,
5430        parent: *const mjsDefault,
5431    ) -> *mut mjsDefault;
5432}
5433unsafe extern "C" {
5434    pub fn mjs_setToMotor(actuator: *mut mjsActuator) -> *const ::std::os::raw::c_char;
5435}
5436unsafe extern "C" {
5437    pub fn mjs_setToPosition(
5438        actuator: *mut mjsActuator,
5439        kp: f64,
5440        kv: *mut f64,
5441        dampratio: *mut f64,
5442        timeconst: *mut f64,
5443        inheritrange: f64,
5444    ) -> *const ::std::os::raw::c_char;
5445}
5446unsafe extern "C" {
5447    pub fn mjs_setToIntVelocity(
5448        actuator: *mut mjsActuator,
5449        kp: f64,
5450        kv: *mut f64,
5451        dampratio: *mut f64,
5452        timeconst: *mut f64,
5453        inheritrange: f64,
5454    ) -> *const ::std::os::raw::c_char;
5455}
5456unsafe extern "C" {
5457    pub fn mjs_setToVelocity(actuator: *mut mjsActuator, kv: f64) -> *const ::std::os::raw::c_char;
5458}
5459unsafe extern "C" {
5460    pub fn mjs_setToDamper(actuator: *mut mjsActuator, kv: f64) -> *const ::std::os::raw::c_char;
5461}
5462unsafe extern "C" {
5463    pub fn mjs_setToCylinder(
5464        actuator: *mut mjsActuator,
5465        timeconst: f64,
5466        bias: f64,
5467        area: f64,
5468        diameter: f64,
5469    ) -> *const ::std::os::raw::c_char;
5470}
5471unsafe extern "C" {
5472    pub fn mjs_setToMuscle(
5473        actuator: *mut mjsActuator,
5474        timeconst: *mut f64,
5475        tausmooth: f64,
5476        range: *mut f64,
5477        force: f64,
5478        scale: f64,
5479        lmin: f64,
5480        lmax: f64,
5481        vmax: f64,
5482        fpmax: f64,
5483        fvmax: f64,
5484    ) -> *const ::std::os::raw::c_char;
5485}
5486unsafe extern "C" {
5487    pub fn mjs_setToAdhesion(
5488        actuator: *mut mjsActuator,
5489        gain: f64,
5490    ) -> *const ::std::os::raw::c_char;
5491}
5492unsafe extern "C" {
5493    pub fn mjs_addMesh(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsMesh;
5494}
5495unsafe extern "C" {
5496    pub fn mjs_addHField(s: *mut mjSpec) -> *mut mjsHField;
5497}
5498unsafe extern "C" {
5499    pub fn mjs_addSkin(s: *mut mjSpec) -> *mut mjsSkin;
5500}
5501unsafe extern "C" {
5502    pub fn mjs_addTexture(s: *mut mjSpec) -> *mut mjsTexture;
5503}
5504unsafe extern "C" {
5505    pub fn mjs_addMaterial(s: *mut mjSpec, def: *const mjsDefault) -> *mut mjsMaterial;
5506}
5507unsafe extern "C" {
5508    pub fn mjs_makeMesh(
5509        mesh: *mut mjsMesh,
5510        builtin: mjtMeshBuiltin,
5511        params: *mut f64,
5512        nparams: ::std::os::raw::c_int,
5513    ) -> ::std::os::raw::c_int;
5514}
5515unsafe extern "C" {
5516    pub fn mjs_getSpec(element: *mut mjsElement) -> *mut mjSpec;
5517}
5518unsafe extern "C" {
5519    pub fn mjs_findSpec(spec: *mut mjSpec, name: *const ::std::os::raw::c_char) -> *mut mjSpec;
5520}
5521unsafe extern "C" {
5522    pub fn mjs_findBody(s: *mut mjSpec, name: *const ::std::os::raw::c_char) -> *mut mjsBody;
5523}
5524unsafe extern "C" {
5525    pub fn mjs_findElement(
5526        s: *mut mjSpec,
5527        type_: mjtObj,
5528        name: *const ::std::os::raw::c_char,
5529    ) -> *mut mjsElement;
5530}
5531unsafe extern "C" {
5532    pub fn mjs_findChild(body: *mut mjsBody, name: *const ::std::os::raw::c_char) -> *mut mjsBody;
5533}
5534unsafe extern "C" {
5535    pub fn mjs_getParent(element: *mut mjsElement) -> *mut mjsBody;
5536}
5537unsafe extern "C" {
5538    pub fn mjs_getFrame(element: *mut mjsElement) -> *mut mjsFrame;
5539}
5540unsafe extern "C" {
5541    pub fn mjs_findFrame(s: *mut mjSpec, name: *const ::std::os::raw::c_char) -> *mut mjsFrame;
5542}
5543unsafe extern "C" {
5544    pub fn mjs_getDefault(element: *mut mjsElement) -> *mut mjsDefault;
5545}
5546unsafe extern "C" {
5547    pub fn mjs_findDefault(
5548        s: *mut mjSpec,
5549        classname: *const ::std::os::raw::c_char,
5550    ) -> *mut mjsDefault;
5551}
5552unsafe extern "C" {
5553    pub fn mjs_getSpecDefault(s: *mut mjSpec) -> *mut mjsDefault;
5554}
5555unsafe extern "C" {
5556    pub fn mjs_getId(element: *mut mjsElement) -> ::std::os::raw::c_int;
5557}
5558unsafe extern "C" {
5559    pub fn mjs_firstChild(
5560        body: *mut mjsBody,
5561        type_: mjtObj,
5562        recurse: ::std::os::raw::c_int,
5563    ) -> *mut mjsElement;
5564}
5565unsafe extern "C" {
5566    pub fn mjs_nextChild(
5567        body: *mut mjsBody,
5568        child: *mut mjsElement,
5569        recurse: ::std::os::raw::c_int,
5570    ) -> *mut mjsElement;
5571}
5572unsafe extern "C" {
5573    pub fn mjs_firstElement(s: *mut mjSpec, type_: mjtObj) -> *mut mjsElement;
5574}
5575unsafe extern "C" {
5576    pub fn mjs_nextElement(s: *mut mjSpec, element: *mut mjsElement) -> *mut mjsElement;
5577}
5578unsafe extern "C" {
5579    pub fn mjs_setName(
5580        element: *mut mjsElement,
5581        name: *const ::std::os::raw::c_char,
5582    ) -> ::std::os::raw::c_int;
5583}
5584unsafe extern "C" {
5585    pub fn mjs_setBuffer(
5586        dest: *mut mjByteVec,
5587        array: *const ::std::os::raw::c_void,
5588        size: ::std::os::raw::c_int,
5589    );
5590}
5591unsafe extern "C" {
5592    pub fn mjs_setString(dest: *mut mjString, text: *const ::std::os::raw::c_char);
5593}
5594unsafe extern "C" {
5595    pub fn mjs_setStringVec(dest: *mut mjStringVec, text: *const ::std::os::raw::c_char);
5596}
5597unsafe extern "C" {
5598    pub fn mjs_setInStringVec(
5599        dest: *mut mjStringVec,
5600        i: ::std::os::raw::c_int,
5601        text: *const ::std::os::raw::c_char,
5602    ) -> mjtByte;
5603}
5604unsafe extern "C" {
5605    pub fn mjs_appendString(dest: *mut mjStringVec, text: *const ::std::os::raw::c_char);
5606}
5607unsafe extern "C" {
5608    pub fn mjs_setInt(
5609        dest: *mut mjIntVec,
5610        array: *const ::std::os::raw::c_int,
5611        size: ::std::os::raw::c_int,
5612    );
5613}
5614unsafe extern "C" {
5615    pub fn mjs_appendIntVec(
5616        dest: *mut mjIntVecVec,
5617        array: *const ::std::os::raw::c_int,
5618        size: ::std::os::raw::c_int,
5619    );
5620}
5621unsafe extern "C" {
5622    pub fn mjs_setFloat(dest: *mut mjFloatVec, array: *const f32, size: ::std::os::raw::c_int);
5623}
5624unsafe extern "C" {
5625    pub fn mjs_appendFloatVec(
5626        dest: *mut mjFloatVecVec,
5627        array: *const f32,
5628        size: ::std::os::raw::c_int,
5629    );
5630}
5631unsafe extern "C" {
5632    pub fn mjs_setDouble(dest: *mut mjDoubleVec, array: *const f64, size: ::std::os::raw::c_int);
5633}
5634unsafe extern "C" {
5635    pub fn mjs_setPluginAttributes(plugin: *mut mjsPlugin, attributes: *mut ::std::os::raw::c_void);
5636}
5637unsafe extern "C" {
5638    pub fn mjs_getName(element: *mut mjsElement) -> *mut mjString;
5639}
5640unsafe extern "C" {
5641    pub fn mjs_getString(source: *const mjString) -> *const ::std::os::raw::c_char;
5642}
5643unsafe extern "C" {
5644    pub fn mjs_getDouble(
5645        source: *const mjDoubleVec,
5646        size: *mut ::std::os::raw::c_int,
5647    ) -> *const f64;
5648}
5649unsafe extern "C" {
5650    pub fn mjs_getPluginAttributes(plugin: *const mjsPlugin) -> *const ::std::os::raw::c_void;
5651}
5652unsafe extern "C" {
5653    pub fn mjs_setDefault(element: *mut mjsElement, def: *const mjsDefault);
5654}
5655unsafe extern "C" {
5656    pub fn mjs_setFrame(dest: *mut mjsElement, frame: *mut mjsFrame) -> ::std::os::raw::c_int;
5657}
5658unsafe extern "C" {
5659    pub fn mjs_resolveOrientation(
5660        quat: *mut f64,
5661        degree: mjtByte,
5662        sequence: *const ::std::os::raw::c_char,
5663        orientation: *const mjsOrientation,
5664    ) -> *const ::std::os::raw::c_char;
5665}
5666unsafe extern "C" {
5667    pub fn mjs_bodyToFrame(body: *mut *mut mjsBody) -> *mut mjsFrame;
5668}
5669unsafe extern "C" {
5670    pub fn mjs_setUserValue(
5671        element: *mut mjsElement,
5672        key: *const ::std::os::raw::c_char,
5673        data: *const ::std::os::raw::c_void,
5674    );
5675}
5676unsafe extern "C" {
5677    pub fn mjs_setUserValueWithCleanup(
5678        element: *mut mjsElement,
5679        key: *const ::std::os::raw::c_char,
5680        data: *const ::std::os::raw::c_void,
5681        cleanup: ::std::option::Option<unsafe extern "C" fn(arg1: *const ::std::os::raw::c_void)>,
5682    );
5683}
5684unsafe extern "C" {
5685    pub fn mjs_getUserValue(
5686        element: *mut mjsElement,
5687        key: *const ::std::os::raw::c_char,
5688    ) -> *const ::std::os::raw::c_void;
5689}
5690unsafe extern "C" {
5691    pub fn mjs_deleteUserValue(element: *mut mjsElement, key: *const ::std::os::raw::c_char);
5692}
5693unsafe extern "C" {
5694    pub fn mjs_sensorDim(sensor: *const mjsSensor) -> ::std::os::raw::c_int;
5695}
5696unsafe extern "C" {
5697    pub fn mjs_defaultSpec(spec: *mut mjSpec);
5698}
5699unsafe extern "C" {
5700    pub fn mjs_defaultOrientation(orient: *mut mjsOrientation);
5701}
5702unsafe extern "C" {
5703    pub fn mjs_defaultBody(body: *mut mjsBody);
5704}
5705unsafe extern "C" {
5706    pub fn mjs_defaultFrame(frame: *mut mjsFrame);
5707}
5708unsafe extern "C" {
5709    pub fn mjs_defaultJoint(joint: *mut mjsJoint);
5710}
5711unsafe extern "C" {
5712    pub fn mjs_defaultGeom(geom: *mut mjsGeom);
5713}
5714unsafe extern "C" {
5715    pub fn mjs_defaultSite(site: *mut mjsSite);
5716}
5717unsafe extern "C" {
5718    pub fn mjs_defaultCamera(camera: *mut mjsCamera);
5719}
5720unsafe extern "C" {
5721    pub fn mjs_defaultLight(light: *mut mjsLight);
5722}
5723unsafe extern "C" {
5724    pub fn mjs_defaultFlex(flex: *mut mjsFlex);
5725}
5726unsafe extern "C" {
5727    pub fn mjs_defaultMesh(mesh: *mut mjsMesh);
5728}
5729unsafe extern "C" {
5730    pub fn mjs_defaultHField(hfield: *mut mjsHField);
5731}
5732unsafe extern "C" {
5733    pub fn mjs_defaultSkin(skin: *mut mjsSkin);
5734}
5735unsafe extern "C" {
5736    pub fn mjs_defaultTexture(texture: *mut mjsTexture);
5737}
5738unsafe extern "C" {
5739    pub fn mjs_defaultMaterial(material: *mut mjsMaterial);
5740}
5741unsafe extern "C" {
5742    pub fn mjs_defaultPair(pair: *mut mjsPair);
5743}
5744unsafe extern "C" {
5745    pub fn mjs_defaultEquality(equality: *mut mjsEquality);
5746}
5747unsafe extern "C" {
5748    pub fn mjs_defaultTendon(tendon: *mut mjsTendon);
5749}
5750unsafe extern "C" {
5751    pub fn mjs_defaultActuator(actuator: *mut mjsActuator);
5752}
5753unsafe extern "C" {
5754    pub fn mjs_defaultSensor(sensor: *mut mjsSensor);
5755}
5756unsafe extern "C" {
5757    pub fn mjs_defaultNumeric(numeric: *mut mjsNumeric);
5758}
5759unsafe extern "C" {
5760    pub fn mjs_defaultText(text: *mut mjsText);
5761}
5762unsafe extern "C" {
5763    pub fn mjs_defaultTuple(tuple: *mut mjsTuple);
5764}
5765unsafe extern "C" {
5766    pub fn mjs_defaultKey(key: *mut mjsKey);
5767}
5768unsafe extern "C" {
5769    pub fn mjs_defaultPlugin(plugin: *mut mjsPlugin);
5770}
5771unsafe extern "C" {
5772    pub fn mjs_asBody(element: *mut mjsElement) -> *mut mjsBody;
5773}
5774unsafe extern "C" {
5775    pub fn mjs_asGeom(element: *mut mjsElement) -> *mut mjsGeom;
5776}
5777unsafe extern "C" {
5778    pub fn mjs_asJoint(element: *mut mjsElement) -> *mut mjsJoint;
5779}
5780unsafe extern "C" {
5781    pub fn mjs_asSite(element: *mut mjsElement) -> *mut mjsSite;
5782}
5783unsafe extern "C" {
5784    pub fn mjs_asCamera(element: *mut mjsElement) -> *mut mjsCamera;
5785}
5786unsafe extern "C" {
5787    pub fn mjs_asLight(element: *mut mjsElement) -> *mut mjsLight;
5788}
5789unsafe extern "C" {
5790    pub fn mjs_asFrame(element: *mut mjsElement) -> *mut mjsFrame;
5791}
5792unsafe extern "C" {
5793    pub fn mjs_asActuator(element: *mut mjsElement) -> *mut mjsActuator;
5794}
5795unsafe extern "C" {
5796    pub fn mjs_asSensor(element: *mut mjsElement) -> *mut mjsSensor;
5797}
5798unsafe extern "C" {
5799    pub fn mjs_asFlex(element: *mut mjsElement) -> *mut mjsFlex;
5800}
5801unsafe extern "C" {
5802    pub fn mjs_asPair(element: *mut mjsElement) -> *mut mjsPair;
5803}
5804unsafe extern "C" {
5805    pub fn mjs_asEquality(element: *mut mjsElement) -> *mut mjsEquality;
5806}
5807unsafe extern "C" {
5808    pub fn mjs_asExclude(element: *mut mjsElement) -> *mut mjsExclude;
5809}
5810unsafe extern "C" {
5811    pub fn mjs_asTendon(element: *mut mjsElement) -> *mut mjsTendon;
5812}
5813unsafe extern "C" {
5814    pub fn mjs_asNumeric(element: *mut mjsElement) -> *mut mjsNumeric;
5815}
5816unsafe extern "C" {
5817    pub fn mjs_asText(element: *mut mjsElement) -> *mut mjsText;
5818}
5819unsafe extern "C" {
5820    pub fn mjs_asTuple(element: *mut mjsElement) -> *mut mjsTuple;
5821}
5822unsafe extern "C" {
5823    pub fn mjs_asKey(element: *mut mjsElement) -> *mut mjsKey;
5824}
5825unsafe extern "C" {
5826    pub fn mjs_asMesh(element: *mut mjsElement) -> *mut mjsMesh;
5827}
5828unsafe extern "C" {
5829    pub fn mjs_asHField(element: *mut mjsElement) -> *mut mjsHField;
5830}
5831unsafe extern "C" {
5832    pub fn mjs_asSkin(element: *mut mjsElement) -> *mut mjsSkin;
5833}
5834unsafe extern "C" {
5835    pub fn mjs_asTexture(element: *mut mjsElement) -> *mut mjsTexture;
5836}
5837unsafe extern "C" {
5838    pub fn mjs_asMaterial(element: *mut mjsElement) -> *mut mjsMaterial;
5839}
5840unsafe extern "C" {
5841    pub fn mjs_asPlugin(element: *mut mjsElement) -> *mut mjsPlugin;
5842}
5843#[repr(C)]
5844#[derive(Debug, Clone)]
5845pub struct GLFWmonitor {
5846    _unused: [u8; 0],
5847}
5848#[repr(C)]
5849#[derive(Debug, Clone)]
5850pub struct GLFWwindow {
5851    _unused: [u8; 0],
5852}
5853#[repr(C)]
5854#[derive(Debug, Clone)]
5855pub struct GLFWvidmode {
5856    pub width: ::std::os::raw::c_int,
5857    pub height: ::std::os::raw::c_int,
5858    pub redBits: ::std::os::raw::c_int,
5859    pub greenBits: ::std::os::raw::c_int,
5860    pub blueBits: ::std::os::raw::c_int,
5861    pub refreshRate: ::std::os::raw::c_int,
5862}
5863#[repr(C)]
5864pub struct mujoco_GlfwAdapter__bindgen_vtable(::std::os::raw::c_void);
5865#[repr(C)]
5866#[derive(Debug, Clone)]
5867pub struct mujoco_GlfwAdapter {
5868    pub vtable_: *const mujoco_GlfwAdapter__bindgen_vtable,
5869    pub state_: mjuiState,
5870    pub last_key_: ::std::os::raw::c_int,
5871    pub event_callback_: ::std::option::Option<unsafe extern "C" fn(arg1: *mut mjuiState)>,
5872    pub layout_callback_: ::std::option::Option<unsafe extern "C" fn(arg1: *mut mjuiState)>,
5873    pub con_: mjrContext,
5874    pub last_model_: *const mjModel,
5875    pub last_fontscale_: ::std::os::raw::c_int,
5876    pub vidmode_: GLFWvidmode,
5877    pub window_: *mut GLFWwindow,
5878    pub window_pos_: __BindgenOpaqueArray<u32, 2usize>,
5879    pub window_size_: __BindgenOpaqueArray<u32, 2usize>,
5880}
5881unsafe extern "C" {
5882    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11MakeCurrentEv"]
5883    pub fn mujoco_GlfwAdapter_MakeCurrent(this: *mut mujoco_GlfwAdapter);
5884}
5885unsafe extern "C" {
5886    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter17GetCursorPositionEv"]
5887    pub fn mujoco_GlfwAdapter_GetCursorPosition(this: *const mujoco_GlfwAdapter) -> u8;
5888}
5889unsafe extern "C" {
5890    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter23GetDisplayPixelsPerInchEv"]
5891    pub fn mujoco_GlfwAdapter_GetDisplayPixelsPerInch(this: *const mujoco_GlfwAdapter) -> f64;
5892}
5893unsafe extern "C" {
5894    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter18GetFramebufferSizeEv"]
5895    pub fn mujoco_GlfwAdapter_GetFramebufferSize(
5896        this: *const mujoco_GlfwAdapter,
5897    ) -> __BindgenOpaqueArray<u32, 2usize>;
5898}
5899unsafe extern "C" {
5900    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter13GetWindowSizeEv"]
5901    pub fn mujoco_GlfwAdapter_GetWindowSize(
5902        this: *const mujoco_GlfwAdapter,
5903    ) -> __BindgenOpaqueArray<u32, 2usize>;
5904}
5905unsafe extern "C" {
5906    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter16IsGPUAcceleratedEv"]
5907    pub fn mujoco_GlfwAdapter_IsGPUAccelerated(this: *const mujoco_GlfwAdapter) -> bool;
5908}
5909unsafe extern "C" {
5910    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter10PollEventsEv"]
5911    pub fn mujoco_GlfwAdapter_PollEvents(this: *mut mujoco_GlfwAdapter);
5912}
5913unsafe extern "C" {
5914    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter18SetClipboardStringEPKc"]
5915    pub fn mujoco_GlfwAdapter_SetClipboardString(
5916        this: *mut mujoco_GlfwAdapter,
5917        text: *const ::std::os::raw::c_char,
5918    );
5919}
5920unsafe extern "C" {
5921    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter8SetVSyncEb"]
5922    pub fn mujoco_GlfwAdapter_SetVSync(this: *mut mujoco_GlfwAdapter, enabled: bool);
5923}
5924unsafe extern "C" {
5925    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter14SetWindowTitleEPKc"]
5926    pub fn mujoco_GlfwAdapter_SetWindowTitle(
5927        this: *mut mujoco_GlfwAdapter,
5928        title: *const ::std::os::raw::c_char,
5929    );
5930}
5931unsafe extern "C" {
5932    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter17ShouldCloseWindowEv"]
5933    pub fn mujoco_GlfwAdapter_ShouldCloseWindow(this: *const mujoco_GlfwAdapter) -> bool;
5934}
5935unsafe extern "C" {
5936    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11SwapBuffersEv"]
5937    pub fn mujoco_GlfwAdapter_SwapBuffers(this: *mut mujoco_GlfwAdapter);
5938}
5939unsafe extern "C" {
5940    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter16ToggleFullscreenEv"]
5941    pub fn mujoco_GlfwAdapter_ToggleFullscreen(this: *mut mujoco_GlfwAdapter);
5942}
5943unsafe extern "C" {
5944    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter24IsLeftMouseButtonPressedEv"]
5945    pub fn mujoco_GlfwAdapter_IsLeftMouseButtonPressed(this: *const mujoco_GlfwAdapter) -> bool;
5946}
5947unsafe extern "C" {
5948    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter26IsMiddleMouseButtonPressedEv"]
5949    pub fn mujoco_GlfwAdapter_IsMiddleMouseButtonPressed(this: *const mujoco_GlfwAdapter) -> bool;
5950}
5951unsafe extern "C" {
5952    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter25IsRightMouseButtonPressedEv"]
5953    pub fn mujoco_GlfwAdapter_IsRightMouseButtonPressed(this: *const mujoco_GlfwAdapter) -> bool;
5954}
5955unsafe extern "C" {
5956    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter15IsAltKeyPressedEv"]
5957    pub fn mujoco_GlfwAdapter_IsAltKeyPressed(this: *const mujoco_GlfwAdapter) -> bool;
5958}
5959unsafe extern "C" {
5960    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter16IsCtrlKeyPressedEv"]
5961    pub fn mujoco_GlfwAdapter_IsCtrlKeyPressed(this: *const mujoco_GlfwAdapter) -> bool;
5962}
5963unsafe extern "C" {
5964    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter17IsShiftKeyPressedEv"]
5965    pub fn mujoco_GlfwAdapter_IsShiftKeyPressed(this: *const mujoco_GlfwAdapter) -> bool;
5966}
5967unsafe extern "C" {
5968    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter22IsMouseButtonDownEventEi"]
5969    pub fn mujoco_GlfwAdapter_IsMouseButtonDownEvent(
5970        this: *const mujoco_GlfwAdapter,
5971        act: ::std::os::raw::c_int,
5972    ) -> bool;
5973}
5974unsafe extern "C" {
5975    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter14IsKeyDownEventEi"]
5976    pub fn mujoco_GlfwAdapter_IsKeyDownEvent(
5977        this: *const mujoco_GlfwAdapter,
5978        act: ::std::os::raw::c_int,
5979    ) -> bool;
5980}
5981unsafe extern "C" {
5982    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter16TranslateKeyCodeEi"]
5983    pub fn mujoco_GlfwAdapter_TranslateKeyCode(
5984        this: *const mujoco_GlfwAdapter,
5985        key: ::std::os::raw::c_int,
5986    ) -> ::std::os::raw::c_int;
5987}
5988unsafe extern "C" {
5989    #[link_name = "\u{1}_ZNK6mujoco11GlfwAdapter20TranslateMouseButtonEi"]
5990    pub fn mujoco_GlfwAdapter_TranslateMouseButton(
5991        this: *const mujoco_GlfwAdapter,
5992        button: ::std::os::raw::c_int,
5993    ) -> mjtButton;
5994}
5995unsafe extern "C" {
5996    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter14FreeMjrContextEv"]
5997    pub fn mujoco_GlfwAdapter_FreeMjrContext(this: *mut mujoco_GlfwAdapter);
5998}
5999unsafe extern "C" {
6000    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11OnFilesDropEiPPKc"]
6001    pub fn mujoco_GlfwAdapter_OnFilesDrop(
6002        this: *mut mujoco_GlfwAdapter,
6003        count: ::std::os::raw::c_int,
6004        paths: *mut *const ::std::os::raw::c_char,
6005    );
6006}
6007unsafe extern "C" {
6008    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter13OnMouseButtonEii"]
6009    pub fn mujoco_GlfwAdapter_OnMouseButton(
6010        this: *mut mujoco_GlfwAdapter,
6011        button: ::std::os::raw::c_int,
6012        act: ::std::os::raw::c_int,
6013    );
6014}
6015unsafe extern "C" {
6016    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter11OnMouseMoveEdd"]
6017    pub fn mujoco_GlfwAdapter_OnMouseMove(this: *mut mujoco_GlfwAdapter, x: f64, y: f64);
6018}
6019unsafe extern "C" {
6020    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter8OnScrollEdd"]
6021    pub fn mujoco_GlfwAdapter_OnScroll(this: *mut mujoco_GlfwAdapter, xoffset: f64, yoffset: f64);
6022}
6023unsafe extern "C" {
6024    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter15OnWindowRefreshEv"]
6025    pub fn mujoco_GlfwAdapter_OnWindowRefresh(this: *mut mujoco_GlfwAdapter);
6026}
6027unsafe extern "C" {
6028    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter14OnWindowResizeEii"]
6029    pub fn mujoco_GlfwAdapter_OnWindowResize(
6030        this: *mut mujoco_GlfwAdapter,
6031        width: ::std::os::raw::c_int,
6032        height: ::std::os::raw::c_int,
6033    );
6034}
6035unsafe extern "C" {
6036    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapterC1Ev"]
6037    pub fn mujoco_GlfwAdapter_GlfwAdapter(this: *mut mujoco_GlfwAdapter);
6038}
6039unsafe extern "C" {
6040    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapterD1Ev"]
6041    pub fn mujoco_GlfwAdapter_GlfwAdapter_destructor(this: *mut mujoco_GlfwAdapter);
6042}
6043impl mujoco_GlfwAdapter {
6044    #[inline]
6045    pub unsafe fn MakeCurrent(&mut self) {
6046        mujoco_GlfwAdapter_MakeCurrent(self)
6047    }
6048    #[inline]
6049    pub unsafe fn GetCursorPosition(&self) -> u8 {
6050        mujoco_GlfwAdapter_GetCursorPosition(self)
6051    }
6052    #[inline]
6053    pub unsafe fn GetDisplayPixelsPerInch(&self) -> f64 {
6054        mujoco_GlfwAdapter_GetDisplayPixelsPerInch(self)
6055    }
6056    #[inline]
6057    pub unsafe fn GetFramebufferSize(&self) -> __BindgenOpaqueArray<u32, 2usize> {
6058        mujoco_GlfwAdapter_GetFramebufferSize(self)
6059    }
6060    #[inline]
6061    pub unsafe fn GetWindowSize(&self) -> __BindgenOpaqueArray<u32, 2usize> {
6062        mujoco_GlfwAdapter_GetWindowSize(self)
6063    }
6064    #[inline]
6065    pub unsafe fn IsGPUAccelerated(&self) -> bool {
6066        mujoco_GlfwAdapter_IsGPUAccelerated(self)
6067    }
6068    #[inline]
6069    pub unsafe fn PollEvents(&mut self) {
6070        mujoco_GlfwAdapter_PollEvents(self)
6071    }
6072    #[inline]
6073    pub unsafe fn SetClipboardString(&mut self, text: *const ::std::os::raw::c_char) {
6074        mujoco_GlfwAdapter_SetClipboardString(self, text)
6075    }
6076    #[inline]
6077    pub unsafe fn SetVSync(&mut self, enabled: bool) {
6078        mujoco_GlfwAdapter_SetVSync(self, enabled)
6079    }
6080    #[inline]
6081    pub unsafe fn SetWindowTitle(&mut self, title: *const ::std::os::raw::c_char) {
6082        mujoco_GlfwAdapter_SetWindowTitle(self, title)
6083    }
6084    #[inline]
6085    pub unsafe fn ShouldCloseWindow(&self) -> bool {
6086        mujoco_GlfwAdapter_ShouldCloseWindow(self)
6087    }
6088    #[inline]
6089    pub unsafe fn SwapBuffers(&mut self) {
6090        mujoco_GlfwAdapter_SwapBuffers(self)
6091    }
6092    #[inline]
6093    pub unsafe fn ToggleFullscreen(&mut self) {
6094        mujoco_GlfwAdapter_ToggleFullscreen(self)
6095    }
6096    #[inline]
6097    pub unsafe fn IsLeftMouseButtonPressed(&self) -> bool {
6098        mujoco_GlfwAdapter_IsLeftMouseButtonPressed(self)
6099    }
6100    #[inline]
6101    pub unsafe fn IsMiddleMouseButtonPressed(&self) -> bool {
6102        mujoco_GlfwAdapter_IsMiddleMouseButtonPressed(self)
6103    }
6104    #[inline]
6105    pub unsafe fn IsRightMouseButtonPressed(&self) -> bool {
6106        mujoco_GlfwAdapter_IsRightMouseButtonPressed(self)
6107    }
6108    #[inline]
6109    pub unsafe fn IsAltKeyPressed(&self) -> bool {
6110        mujoco_GlfwAdapter_IsAltKeyPressed(self)
6111    }
6112    #[inline]
6113    pub unsafe fn IsCtrlKeyPressed(&self) -> bool {
6114        mujoco_GlfwAdapter_IsCtrlKeyPressed(self)
6115    }
6116    #[inline]
6117    pub unsafe fn IsShiftKeyPressed(&self) -> bool {
6118        mujoco_GlfwAdapter_IsShiftKeyPressed(self)
6119    }
6120    #[inline]
6121    pub unsafe fn IsMouseButtonDownEvent(&self, act: ::std::os::raw::c_int) -> bool {
6122        mujoco_GlfwAdapter_IsMouseButtonDownEvent(self, act)
6123    }
6124    #[inline]
6125    pub unsafe fn IsKeyDownEvent(&self, act: ::std::os::raw::c_int) -> bool {
6126        mujoco_GlfwAdapter_IsKeyDownEvent(self, act)
6127    }
6128    #[inline]
6129    pub unsafe fn TranslateKeyCode(&self, key: ::std::os::raw::c_int) -> ::std::os::raw::c_int {
6130        mujoco_GlfwAdapter_TranslateKeyCode(self, key)
6131    }
6132    #[inline]
6133    pub unsafe fn TranslateMouseButton(&self, button: ::std::os::raw::c_int) -> mjtButton {
6134        mujoco_GlfwAdapter_TranslateMouseButton(self, button)
6135    }
6136    #[inline]
6137    pub unsafe fn FreeMjrContext(&mut self) {
6138        mujoco_GlfwAdapter_FreeMjrContext(self)
6139    }
6140    #[inline]
6141    pub unsafe fn OnFilesDrop(
6142        &mut self,
6143        count: ::std::os::raw::c_int,
6144        paths: *mut *const ::std::os::raw::c_char,
6145    ) {
6146        mujoco_GlfwAdapter_OnFilesDrop(self, count, paths)
6147    }
6148    #[inline]
6149    pub unsafe fn OnMouseButton(
6150        &mut self,
6151        button: ::std::os::raw::c_int,
6152        act: ::std::os::raw::c_int,
6153    ) {
6154        mujoco_GlfwAdapter_OnMouseButton(self, button, act)
6155    }
6156    #[inline]
6157    pub unsafe fn OnMouseMove(&mut self, x: f64, y: f64) {
6158        mujoco_GlfwAdapter_OnMouseMove(self, x, y)
6159    }
6160    #[inline]
6161    pub unsafe fn OnScroll(&mut self, xoffset: f64, yoffset: f64) {
6162        mujoco_GlfwAdapter_OnScroll(self, xoffset, yoffset)
6163    }
6164    #[inline]
6165    pub unsafe fn OnWindowRefresh(&mut self) {
6166        mujoco_GlfwAdapter_OnWindowRefresh(self)
6167    }
6168    #[inline]
6169    pub unsafe fn OnWindowResize(
6170        &mut self,
6171        width: ::std::os::raw::c_int,
6172        height: ::std::os::raw::c_int,
6173    ) {
6174        mujoco_GlfwAdapter_OnWindowResize(self, width, height)
6175    }
6176    #[inline]
6177    pub unsafe fn new() -> Self {
6178        let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit();
6179        mujoco_GlfwAdapter_GlfwAdapter(__bindgen_tmp.as_mut_ptr());
6180        __bindgen_tmp.assume_init()
6181    }
6182    #[inline]
6183    pub unsafe fn destruct(&mut self) {
6184        mujoco_GlfwAdapter_GlfwAdapter_destructor(self)
6185    }
6186}
6187unsafe extern "C" {
6188    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter17RefreshMjrContextEPK8mjModel_i"]
6189    pub fn mujoco_GlfwAdapter_RefreshMjrContext(
6190        this: *mut ::std::os::raw::c_void,
6191        m: *const mjModel,
6192        fontscale: ::std::os::raw::c_int,
6193    ) -> bool;
6194}
6195unsafe extern "C" {
6196    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter17EnsureContextSizeEv"]
6197    pub fn mujoco_GlfwAdapter_EnsureContextSize(this: *mut ::std::os::raw::c_void) -> bool;
6198}
6199unsafe extern "C" {
6200    #[link_name = "\u{1}_ZN6mujoco11GlfwAdapter5OnKeyEiii"]
6201    pub fn mujoco_GlfwAdapter_OnKey(
6202        this: *mut ::std::os::raw::c_void,
6203        key: ::std::os::raw::c_int,
6204        scancode: ::std::os::raw::c_int,
6205        act: ::std::os::raw::c_int,
6206    );
6207}
6208#[repr(C)]
6209#[derive(Debug, Clone)]
6210pub struct mujoco_SimulateMutex {
6211    pub _base: std_recursive_mutex,
6212}
6213pub type mujoco_MutexLock = u8;
6214#[repr(C)]
6215#[derive(Clone)]
6216pub struct mujoco_Simulate {
6217    pub is_passive_: bool,
6218    pub mnew_: *mut mjModel,
6219    pub dnew_: *mut mjData,
6220    pub m_: *mut mjModel,
6221    pub d_: *mut mjData,
6222    pub ncam_: ::std::os::raw::c_int,
6223    pub nkey_: ::std::os::raw::c_int,
6224    pub state_size_: ::std::os::raw::c_int,
6225    pub nhistory_: ::std::os::raw::c_int,
6226    pub history_cursor_: ::std::os::raw::c_int,
6227    pub body_parentid_: __BindgenOpaqueArray<u64, 3usize>,
6228    pub jnt_type_: __BindgenOpaqueArray<u64, 3usize>,
6229    pub jnt_group_: __BindgenOpaqueArray<u64, 3usize>,
6230    pub jnt_qposadr_: __BindgenOpaqueArray<u64, 3usize>,
6231    pub jnt_range_: __BindgenOpaqueArray<u64, 3usize>,
6232    pub jnt_names_: __BindgenOpaqueArray<u64, 3usize>,
6233    pub actuator_group_: __BindgenOpaqueArray<u64, 3usize>,
6234    pub actuator_ctrlrange_: __BindgenOpaqueArray<u64, 3usize>,
6235    pub actuator_names_: __BindgenOpaqueArray<u64, 3usize>,
6236    pub equality_names_: __BindgenOpaqueArray<u64, 3usize>,
6237    pub history_: __BindgenOpaqueArray<u64, 3usize>,
6238    pub qpos_: __BindgenOpaqueArray<u64, 3usize>,
6239    pub qpos_prev_: __BindgenOpaqueArray<u64, 3usize>,
6240    pub ctrl_: __BindgenOpaqueArray<u64, 3usize>,
6241    pub ctrl_prev_: __BindgenOpaqueArray<u64, 3usize>,
6242    pub eq_active_: __BindgenOpaqueArray<u64, 3usize>,
6243    pub eq_active_prev_: __BindgenOpaqueArray<u64, 3usize>,
6244    pub m_passive_: *mut mjModel,
6245    pub d_passive_: *mut mjData,
6246    pub user_scn_geoms_: __BindgenOpaqueArray<u64, 3usize>,
6247    pub mjopt_prev_: mjOption,
6248    pub mjvis_prev_: mjVisual,
6249    pub mjstat_prev_: mjStatistic,
6250    pub opt_prev_: mjvOption,
6251    pub cam_prev_: mjvCamera,
6252    pub warn_vgeomfull_prev_: ::std::os::raw::c_int,
6253    pub pending_: mujoco_Simulate__bindgen_ty_1,
6254    pub mtx: mujoco_SimulateMutex,
6255    pub cond_loadrequest: std_condition_variable_any,
6256    pub frames_: ::std::os::raw::c_int,
6257    pub last_fps_update_: u64,
6258    pub fps_: f64,
6259    pub spacing: ::std::os::raw::c_int,
6260    pub color: ::std::os::raw::c_int,
6261    pub font: ::std::os::raw::c_int,
6262    pub ui0_enable: ::std::os::raw::c_int,
6263    pub ui1_enable: ::std::os::raw::c_int,
6264    pub help: ::std::os::raw::c_int,
6265    pub info: ::std::os::raw::c_int,
6266    pub profiler: ::std::os::raw::c_int,
6267    pub sensor: ::std::os::raw::c_int,
6268    pub pause_update: ::std::os::raw::c_int,
6269    pub fullscreen: ::std::os::raw::c_int,
6270    pub vsync: ::std::os::raw::c_int,
6271    pub busywait: ::std::os::raw::c_int,
6272    pub key: ::std::os::raw::c_int,
6273    pub scrub_index: ::std::os::raw::c_int,
6274    pub run: ::std::os::raw::c_int,
6275    pub exitrequest: std_atomic_int,
6276    pub droploadrequest: std_atomic_int,
6277    pub screenshotrequest: std_atomic_int,
6278    pub uiloadrequest: std_atomic_int,
6279    pub newfigurerequest: std_atomic_int,
6280    pub newtextrequest: std_atomic_int,
6281    pub newimagerequest: std_atomic_int,
6282    pub loadrequest: ::std::os::raw::c_int,
6283    pub load_error: [::std::os::raw::c_char; 1000usize],
6284    pub dropfilename: [::std::os::raw::c_char; 1000usize],
6285    pub filename: [::std::os::raw::c_char; 1000usize],
6286    pub previous_filename: [::std::os::raw::c_char; 1000usize],
6287    pub real_time_index: ::std::os::raw::c_int,
6288    pub speed_changed: bool,
6289    pub measured_slowdown: f32,
6290    pub ctrl_noise_std: f64,
6291    pub ctrl_noise_rate: f64,
6292    pub field: [::std::os::raw::c_char; 300usize],
6293    pub index: ::std::os::raw::c_int,
6294    pub disable: [::std::os::raw::c_int; 17usize],
6295    pub enable: [::std::os::raw::c_int; 6usize],
6296    pub enableactuator: [::std::os::raw::c_int; 6usize],
6297    pub camera: ::std::os::raw::c_int,
6298    pub scn: mjvScene,
6299    pub cam: *mut mjvCamera,
6300    pub opt: *mut mjvOption,
6301    pub pert: *mut mjvPerturb,
6302    pub figconstraint: mjvFigure,
6303    pub figcost: mjvFigure,
6304    pub figtimer: mjvFigure,
6305    pub figsize: mjvFigure,
6306    pub figsensor: mjvFigure,
6307    pub user_scn: *mut mjvScene,
6308    pub user_scn_flags_prev_: [mjtByte; 10usize],
6309    pub user_figures_: __BindgenOpaqueArray<u64, 3usize>,
6310    pub user_figures_new_: __BindgenOpaqueArray<u64, 3usize>,
6311    pub user_texts_: __BindgenOpaqueArray<u64, 3usize>,
6312    pub user_texts_new_: __BindgenOpaqueArray<u64, 3usize>,
6313    pub user_images_: __BindgenOpaqueArray<u64, 3usize>,
6314    pub user_images_new_: __BindgenOpaqueArray<u64, 3usize>,
6315    pub refresh_rate: ::std::os::raw::c_int,
6316    pub window_pos: [::std::os::raw::c_int; 2usize],
6317    pub window_size: [::std::os::raw::c_int; 2usize],
6318    pub platform_ui: mujoco_GlfwAdapter,
6319    pub uistate: *mut mjuiState,
6320    pub ui0: mjUI,
6321    pub ui1: mjUI,
6322    pub def_option: [mjuiDef; 13usize],
6323    pub def_simulation: [mjuiDef; 14usize],
6324    pub def_watch: [mjuiDef; 5usize],
6325    pub info_title: [::std::os::raw::c_char; 1000usize],
6326    pub info_content: [::std::os::raw::c_char; 1000usize],
6327    pub cond_upload_: std_condition_variable_any,
6328    pub texture_upload_: ::std::os::raw::c_int,
6329    pub mesh_upload_: ::std::os::raw::c_int,
6330    pub hfield_upload_: ::std::os::raw::c_int,
6331}
6332pub type mujoco_Simulate_Clock = std_chrono_steady_clock;
6333#[repr(C)]
6334#[derive(Debug, Clone)]
6335pub struct mujoco_Simulate__bindgen_ty_1 {
6336    pub save_xml: __BindgenOpaqueArray<u64, 4usize>,
6337    pub save_mjb: __BindgenOpaqueArray<u64, 4usize>,
6338    pub print_model: __BindgenOpaqueArray<u64, 4usize>,
6339    pub print_data: __BindgenOpaqueArray<u64, 4usize>,
6340    pub reset: bool,
6341    pub align: bool,
6342    pub copy_key: bool,
6343    pub copy_key_full_precision: bool,
6344    pub load_from_history: bool,
6345    pub load_key: bool,
6346    pub save_key: bool,
6347    pub zero_ctrl: bool,
6348    pub newperturb: ::std::os::raw::c_int,
6349    pub select: bool,
6350    pub select_state: mjuiState,
6351    pub ui_update_simulation: bool,
6352    pub ui_update_physics: bool,
6353    pub ui_update_rendering: bool,
6354    pub ui_update_visualization: bool,
6355    pub ui_update_joint: bool,
6356    pub ui_update_ctrl: bool,
6357    pub ui_update_equality: bool,
6358    pub ui_remake_ctrl: bool,
6359}
6360pub const mujoco_Simulate_kMaxGeom: ::std::os::raw::c_int = 100000;
6361pub const mujoco_Simulate_kMaxFilenameLength: ::std::os::raw::c_int = 1000;
6362unsafe extern "C" {
6363    #[link_name = "\u{1}_ZN6mujoco8Simulate15percentRealTimeE"]
6364    pub static mujoco_Simulate_percentRealTime: [f32; 31usize];
6365}
6366unsafe extern "C" {
6367    #[link_name = "\u{1}_ZN6mujoco8Simulate4SyncEb"]
6368    pub fn mujoco_Simulate_Sync(this: *mut mujoco_Simulate, state_only: bool);
6369}
6370unsafe extern "C" {
6371    #[link_name = "\u{1}_ZN6mujoco8Simulate12UpdateHFieldEi"]
6372    pub fn mujoco_Simulate_UpdateHField(
6373        this: *mut mujoco_Simulate,
6374        hfieldid: ::std::os::raw::c_int,
6375    );
6376}
6377unsafe extern "C" {
6378    #[link_name = "\u{1}_ZN6mujoco8Simulate10UpdateMeshEi"]
6379    pub fn mujoco_Simulate_UpdateMesh(this: *mut mujoco_Simulate, meshid: ::std::os::raw::c_int);
6380}
6381unsafe extern "C" {
6382    #[link_name = "\u{1}_ZN6mujoco8Simulate13UpdateTextureEi"]
6383    pub fn mujoco_Simulate_UpdateTexture(this: *mut mujoco_Simulate, texid: ::std::os::raw::c_int);
6384}
6385unsafe extern "C" {
6386    #[link_name = "\u{1}_ZN6mujoco8Simulate11LoadMessageEPKc"]
6387    pub fn mujoco_Simulate_LoadMessage(
6388        this: *mut mujoco_Simulate,
6389        displayed_filename: *const ::std::os::raw::c_char,
6390    );
6391}
6392unsafe extern "C" {
6393    #[link_name = "\u{1}_ZN6mujoco8Simulate4LoadEP8mjModel_P7mjData_PKc"]
6394    pub fn mujoco_Simulate_Load(
6395        this: *mut mujoco_Simulate,
6396        m: *mut mjModel,
6397        d: *mut mjData,
6398        displayed_filename: *const ::std::os::raw::c_char,
6399    );
6400}
6401unsafe extern "C" {
6402    #[link_name = "\u{1}_ZN6mujoco8Simulate16LoadMessageClearEv"]
6403    pub fn mujoco_Simulate_LoadMessageClear(this: *mut mujoco_Simulate);
6404}
6405unsafe extern "C" {
6406    #[link_name = "\u{1}_ZN6mujoco8Simulate18LoadOnRenderThreadEv"]
6407    pub fn mujoco_Simulate_LoadOnRenderThread(this: *mut mujoco_Simulate);
6408}
6409unsafe extern "C" {
6410    #[link_name = "\u{1}_ZN6mujoco8Simulate6RenderEv"]
6411    pub fn mujoco_Simulate_Render(this: *mut mujoco_Simulate);
6412}
6413unsafe extern "C" {
6414    #[link_name = "\u{1}_ZN6mujoco8Simulate10RenderStepEb"]
6415    pub fn mujoco_Simulate_RenderStep(this: *mut mujoco_Simulate, update_timer: bool) -> bool;
6416}
6417unsafe extern "C" {
6418    #[link_name = "\u{1}_ZN6mujoco8Simulate10RenderInitEv"]
6419    pub fn mujoco_Simulate_RenderInit(this: *mut mujoco_Simulate);
6420}
6421unsafe extern "C" {
6422    #[link_name = "\u{1}_ZN6mujoco8Simulate13RenderCleanupEv"]
6423    pub fn mujoco_Simulate_RenderCleanup(this: *mut mujoco_Simulate);
6424}
6425unsafe extern "C" {
6426    #[link_name = "\u{1}_ZN6mujoco8Simulate12AddToHistoryEv"]
6427    pub fn mujoco_Simulate_AddToHistory(this: *mut mujoco_Simulate);
6428}
6429unsafe extern "C" {
6430    #[link_name = "\u{1}_ZN6mujoco8Simulate11InjectNoiseEv"]
6431    pub fn mujoco_Simulate_InjectNoise(this: *mut mujoco_Simulate);
6432}
6433unsafe extern "C" {
6434    #[link_name = "\u{1}_ZN6mujoco8Simulate16destructFromRustEv"]
6435    pub fn mujoco_Simulate_destructFromRust(this: *mut mujoco_Simulate);
6436}
6437unsafe extern "C" {
6438    #[link_name = "\u{1}_ZN6mujoco8Simulate7RunningEv"]
6439    pub fn mujoco_Simulate_Running(this: *mut mujoco_Simulate) -> bool;
6440}
6441unsafe extern "C" {
6442    #[link_name = "\u{1}_ZN6mujoco8SimulateC1EP10mjvCamera_P10mjvOption_P11mjvPerturb_P9mjvScene_b"]
6443    pub fn mujoco_Simulate_Simulate(
6444        this: *mut mujoco_Simulate,
6445        cam: *mut mjvCamera,
6446        opt: *mut mjvOption,
6447        pert: *mut mjvPerturb,
6448        user_scn: *mut mjvScene,
6449        is_passive: bool,
6450    );
6451}
6452impl mujoco_Simulate {
6453    #[inline]
6454    pub unsafe fn Sync(&mut self, state_only: bool) {
6455        mujoco_Simulate_Sync(self, state_only)
6456    }
6457    #[inline]
6458    pub unsafe fn UpdateHField(&mut self, hfieldid: ::std::os::raw::c_int) {
6459        mujoco_Simulate_UpdateHField(self, hfieldid)
6460    }
6461    #[inline]
6462    pub unsafe fn UpdateMesh(&mut self, meshid: ::std::os::raw::c_int) {
6463        mujoco_Simulate_UpdateMesh(self, meshid)
6464    }
6465    #[inline]
6466    pub unsafe fn UpdateTexture(&mut self, texid: ::std::os::raw::c_int) {
6467        mujoco_Simulate_UpdateTexture(self, texid)
6468    }
6469    #[inline]
6470    pub unsafe fn LoadMessage(&mut self, displayed_filename: *const ::std::os::raw::c_char) {
6471        mujoco_Simulate_LoadMessage(self, displayed_filename)
6472    }
6473    #[inline]
6474    pub unsafe fn Load(
6475        &mut self,
6476        m: *mut mjModel,
6477        d: *mut mjData,
6478        displayed_filename: *const ::std::os::raw::c_char,
6479    ) {
6480        mujoco_Simulate_Load(self, m, d, displayed_filename)
6481    }
6482    #[inline]
6483    pub unsafe fn LoadMessageClear(&mut self) {
6484        mujoco_Simulate_LoadMessageClear(self)
6485    }
6486    #[inline]
6487    pub unsafe fn LoadOnRenderThread(&mut self) {
6488        mujoco_Simulate_LoadOnRenderThread(self)
6489    }
6490    #[inline]
6491    pub unsafe fn Render(&mut self) {
6492        mujoco_Simulate_Render(self)
6493    }
6494    #[inline]
6495    pub unsafe fn RenderStep(&mut self, update_timer: bool) -> bool {
6496        mujoco_Simulate_RenderStep(self, update_timer)
6497    }
6498    #[inline]
6499    pub unsafe fn RenderInit(&mut self) {
6500        mujoco_Simulate_RenderInit(self)
6501    }
6502    #[inline]
6503    pub unsafe fn RenderCleanup(&mut self) {
6504        mujoco_Simulate_RenderCleanup(self)
6505    }
6506    #[inline]
6507    pub unsafe fn AddToHistory(&mut self) {
6508        mujoco_Simulate_AddToHistory(self)
6509    }
6510    #[inline]
6511    pub unsafe fn InjectNoise(&mut self) {
6512        mujoco_Simulate_InjectNoise(self)
6513    }
6514    #[inline]
6515    pub unsafe fn destructFromRust(&mut self) {
6516        mujoco_Simulate_destructFromRust(self)
6517    }
6518    #[inline]
6519    pub unsafe fn Running(&mut self) -> bool {
6520        mujoco_Simulate_Running(self)
6521    }
6522    #[inline]
6523    pub unsafe fn new(
6524        cam: *mut mjvCamera,
6525        opt: *mut mjvOption,
6526        pert: *mut mjvPerturb,
6527        user_scn: *mut mjvScene,
6528        is_passive: bool,
6529    ) -> Self {
6530        let mut __bindgen_tmp = ::std::mem::MaybeUninit::uninit();
6531        mujoco_Simulate_Simulate(
6532            __bindgen_tmp.as_mut_ptr(),
6533            cam,
6534            opt,
6535            pert,
6536            user_scn,
6537            is_passive,
6538        );
6539        __bindgen_tmp.assume_init()
6540    }
6541}
6542#[repr(C)]
6543#[derive(Debug, Clone)]
6544pub struct mujoco_Glfw {
6545    pub glfwCreateWindow: ::std::option::Option<
6546        unsafe extern "C" fn(
6547            arg1: ::std::os::raw::c_int,
6548            arg2: ::std::os::raw::c_int,
6549            arg3: *const ::std::os::raw::c_char,
6550            arg4: *mut GLFWmonitor,
6551            arg5: *mut GLFWwindow,
6552        ) -> *mut GLFWwindow,
6553    >,
6554    pub glfwDestroyWindow: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
6555    pub glfwGetCursorPos: ::std::option::Option<
6556        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *mut f64, arg3: *mut f64),
6557    >,
6558    pub glfwGetFramebufferSize: ::std::option::Option<
6559        unsafe extern "C" fn(
6560            arg1: *mut GLFWwindow,
6561            arg2: *mut ::std::os::raw::c_int,
6562            arg3: *mut ::std::os::raw::c_int,
6563        ),
6564    >,
6565    pub glfwGetKey: ::std::option::Option<
6566        unsafe extern "C" fn(
6567            arg1: *mut GLFWwindow,
6568            arg2: ::std::os::raw::c_int,
6569        ) -> ::std::os::raw::c_int,
6570    >,
6571    pub glfwGetMonitorPhysicalSize: ::std::option::Option<
6572        unsafe extern "C" fn(
6573            arg1: *mut GLFWmonitor,
6574            arg2: *mut ::std::os::raw::c_int,
6575            arg3: *mut ::std::os::raw::c_int,
6576        ),
6577    >,
6578    pub glfwGetMouseButton: ::std::option::Option<
6579        unsafe extern "C" fn(
6580            arg1: *mut GLFWwindow,
6581            arg2: ::std::os::raw::c_int,
6582        ) -> ::std::os::raw::c_int,
6583    >,
6584    pub glfwGetPrimaryMonitor: ::std::option::Option<unsafe extern "C" fn() -> *mut GLFWmonitor>,
6585    pub glfwGetTime: ::std::option::Option<unsafe extern "C" fn() -> f64>,
6586    pub glfwGetVideoMode:
6587        ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWmonitor) -> *const GLFWvidmode>,
6588    pub glfwGetWindowMonitor:
6589        ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow) -> *mut GLFWmonitor>,
6590    pub glfwGetWindowPos: ::std::option::Option<
6591        unsafe extern "C" fn(
6592            arg1: *mut GLFWwindow,
6593            arg2: *mut ::std::os::raw::c_int,
6594            arg3: *mut ::std::os::raw::c_int,
6595        ),
6596    >,
6597    pub glfwGetWindowSize: ::std::option::Option<
6598        unsafe extern "C" fn(
6599            arg1: *mut GLFWwindow,
6600            arg2: *mut ::std::os::raw::c_int,
6601            arg3: *mut ::std::os::raw::c_int,
6602        ),
6603    >,
6604    pub glfwGetWindowUserPointer: ::std::option::Option<
6605        unsafe extern "C" fn(arg1: *mut GLFWwindow) -> *mut ::std::os::raw::c_void,
6606    >,
6607    pub glfwInit: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
6608    pub glfwMakeContextCurrent: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
6609    pub glfwPollEvents: ::std::option::Option<unsafe extern "C" fn()>,
6610    pub glfwSetClipboardString: ::std::option::Option<
6611        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *const ::std::os::raw::c_char),
6612    >,
6613    pub glfwSetCursorPosCallback: ::std::option::Option<
6614        unsafe extern "C" fn(
6615            arg1: *mut GLFWwindow,
6616            arg2: ::std::option::Option<
6617                unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
6618            >,
6619        ) -> ::std::option::Option<
6620            unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
6621        >,
6622    >,
6623    pub glfwSetDropCallback: ::std::option::Option<
6624        unsafe extern "C" fn(
6625            arg1: *mut GLFWwindow,
6626            arg2: ::std::option::Option<
6627                unsafe extern "C" fn(
6628                    arg1: *mut GLFWwindow,
6629                    arg2: ::std::os::raw::c_int,
6630                    arg3: *mut *const ::std::os::raw::c_char,
6631                ),
6632            >,
6633        ) -> ::std::option::Option<
6634            unsafe extern "C" fn(
6635                arg1: *mut GLFWwindow,
6636                arg2: ::std::os::raw::c_int,
6637                arg3: *mut *const ::std::os::raw::c_char,
6638            ),
6639        >,
6640    >,
6641    pub glfwSetKeyCallback: ::std::option::Option<
6642        unsafe extern "C" fn(
6643            arg1: *mut GLFWwindow,
6644            arg2: ::std::option::Option<
6645                unsafe extern "C" fn(
6646                    arg1: *mut GLFWwindow,
6647                    arg2: ::std::os::raw::c_int,
6648                    arg3: ::std::os::raw::c_int,
6649                    arg4: ::std::os::raw::c_int,
6650                    arg5: ::std::os::raw::c_int,
6651                ),
6652            >,
6653        ) -> ::std::option::Option<
6654            unsafe extern "C" fn(
6655                arg1: *mut GLFWwindow,
6656                arg2: ::std::os::raw::c_int,
6657                arg3: ::std::os::raw::c_int,
6658                arg4: ::std::os::raw::c_int,
6659                arg5: ::std::os::raw::c_int,
6660            ),
6661        >,
6662    >,
6663    pub glfwSetMouseButtonCallback: ::std::option::Option<
6664        unsafe extern "C" fn(
6665            arg1: *mut GLFWwindow,
6666            arg2: ::std::option::Option<
6667                unsafe extern "C" fn(
6668                    arg1: *mut GLFWwindow,
6669                    arg2: ::std::os::raw::c_int,
6670                    arg3: ::std::os::raw::c_int,
6671                    arg4: ::std::os::raw::c_int,
6672                ),
6673            >,
6674        ) -> ::std::option::Option<
6675            unsafe extern "C" fn(
6676                arg1: *mut GLFWwindow,
6677                arg2: ::std::os::raw::c_int,
6678                arg3: ::std::os::raw::c_int,
6679                arg4: ::std::os::raw::c_int,
6680            ),
6681        >,
6682    >,
6683    pub glfwSetScrollCallback: ::std::option::Option<
6684        unsafe extern "C" fn(
6685            arg1: *mut GLFWwindow,
6686            arg2: ::std::option::Option<
6687                unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
6688            >,
6689        ) -> ::std::option::Option<
6690            unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: f64, arg3: f64),
6691        >,
6692    >,
6693    pub glfwSetWindowMonitor: ::std::option::Option<
6694        unsafe extern "C" fn(
6695            arg1: *mut GLFWwindow,
6696            arg2: *mut GLFWmonitor,
6697            arg3: ::std::os::raw::c_int,
6698            arg4: ::std::os::raw::c_int,
6699            arg5: ::std::os::raw::c_int,
6700            arg6: ::std::os::raw::c_int,
6701            arg7: ::std::os::raw::c_int,
6702        ),
6703    >,
6704    pub glfwSetWindowRefreshCallback: ::std::option::Option<
6705        unsafe extern "C" fn(
6706            arg1: *mut GLFWwindow,
6707            arg2: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
6708        )
6709            -> ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
6710    >,
6711    pub glfwSetWindowSizeCallback: ::std::option::Option<
6712        unsafe extern "C" fn(
6713            arg1: *mut GLFWwindow,
6714            arg2: ::std::option::Option<
6715                unsafe extern "C" fn(
6716                    arg1: *mut GLFWwindow,
6717                    arg2: ::std::os::raw::c_int,
6718                    arg3: ::std::os::raw::c_int,
6719                ),
6720            >,
6721        ) -> ::std::option::Option<
6722            unsafe extern "C" fn(
6723                arg1: *mut GLFWwindow,
6724                arg2: ::std::os::raw::c_int,
6725                arg3: ::std::os::raw::c_int,
6726            ),
6727        >,
6728    >,
6729    pub glfwSetWindowTitle: ::std::option::Option<
6730        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *const ::std::os::raw::c_char),
6731    >,
6732    pub glfwSetWindowUserPointer: ::std::option::Option<
6733        unsafe extern "C" fn(arg1: *mut GLFWwindow, arg2: *mut ::std::os::raw::c_void),
6734    >,
6735    pub glfwSwapBuffers: ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow)>,
6736    pub glfwSwapInterval: ::std::option::Option<unsafe extern "C" fn(arg1: ::std::os::raw::c_int)>,
6737    pub glfwTerminate: ::std::option::Option<unsafe extern "C" fn()>,
6738    pub glfwWindowHint: ::std::option::Option<
6739        unsafe extern "C" fn(arg1: ::std::os::raw::c_int, arg2: ::std::os::raw::c_int),
6740    >,
6741    pub glfwWindowShouldClose:
6742        ::std::option::Option<unsafe extern "C" fn(arg1: *mut GLFWwindow) -> ::std::os::raw::c_int>,
6743}
6744unsafe extern "C" {
6745    #[link_name = "\u{1}_ZN6mujoco4GlfwEPv"]
6746    pub fn mujoco_Glfw(dlhandle: *mut ::std::os::raw::c_void) -> *const mujoco_Glfw;
6747}
6748unsafe extern "C" {
6749    pub fn new_simulate(
6750        cam: *mut mjvCamera,
6751        opt: *mut mjvOption,
6752        pert: *mut mjvPerturb,
6753        user_scn: *mut mjvScene,
6754        is_passive: bool,
6755    ) -> *mut mujoco_Simulate;
6756}
6757unsafe extern "C" {
6758    pub fn free_simulate(simulate: *mut mujoco_Simulate);
6759}