mujoco_rs/
mujoco_c.rs

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