Skip to main content

mujoco_rs/
mujoco_c.rs

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