mujoco_rs/
mujoco_c.rs

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