diff --git a/doc/APIreference/APItypes.rst b/doc/APIreference/APItypes.rst index 205b7762..4ee6367d 100644 --- a/doc/APIreference/APItypes.rst +++ b/doc/APIreference/APItypes.rst @@ -987,17 +987,6 @@ This structure contains everything needed to render the 3D scene in OpenGL. .. mujoco-include:: mjvScene -.. _mjvSceneState: - -mjvSceneState -~~~~~~~~~~~~~ - -This structure contains the portions of :ref:`mjModel` and :ref:`mjData` that are required for -various ``mjv_*`` functions. - -.. mujoco-include:: mjvSceneState - - .. _mjvFigure: mjvFigure diff --git a/doc/APIreference/functions.rst b/doc/APIreference/functions.rst index 49656292..5b985861 100644 --- a/doc/APIreference/functions.rst +++ b/doc/APIreference/functions.rst @@ -2004,15 +2004,6 @@ Rotate 3D vec in horizontal plane by angle between (0,1) and (forward_x,forward_ Move camera with mouse; action is mjtMouse. -.. _mjv_moveCameraFromState: - -`mjv_moveCameraFromState <#mjv_moveCameraFromState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_moveCameraFromState - -Move camera with mouse given a scene state; action is mjtMouse. - .. _mjv_movePerturb: `mjv_movePerturb <#mjv_movePerturb>`__ @@ -2022,15 +2013,6 @@ Move camera with mouse given a scene state; action is mjtMouse. Move perturb object with mouse; action is mjtMouse. -.. _mjv_movePerturbFromState: - -`mjv_movePerturbFromState <#mjv_movePerturbFromState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_movePerturbFromState - -Move perturb object with mouse given a scene state; action is mjtMouse. - .. _mjv_moveModel: `mjv_moveModel <#mjv_moveModel>`__ @@ -2173,15 +2155,6 @@ Free abstract scene. Update entire scene given model state. -.. _mjv_updateSceneFromState: - -`mjv_updateSceneFromState <#mjv_updateSceneFromState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_updateSceneFromState - -Update entire scene from a scene state, return the number of new mjWARN_VGEOMFULL warnings. - .. _mjv_copyModel: `mjv_copyModel <#mjv_copyModel>`__ @@ -2191,42 +2164,6 @@ Update entire scene from a scene state, return the number of new mjWARN_VGEOMFUL Copy mjModel, skip large arrays not required for abstract visualization. -.. _mjv_defaultSceneState: - -`mjv_defaultSceneState <#mjv_defaultSceneState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_defaultSceneState - -Set default scene state. - -.. _mjv_makeSceneState: - -`mjv_makeSceneState <#mjv_makeSceneState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_makeSceneState - -Allocate resources and initialize a scene state object. - -.. _mjv_freeSceneState: - -`mjv_freeSceneState <#mjv_freeSceneState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_freeSceneState - -Free scene state. - -.. _mjv_updateSceneState: - -`mjv_updateSceneState <#mjv_updateSceneState>`__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. mujoco-include:: mjv_updateSceneState - -Update a scene state from model and data. - .. _mjv_addGeoms: `mjv_addGeoms <#mjv_addGeoms>`__ diff --git a/doc/changelog.rst b/doc/changelog.rst index 4dbaf0b2..4255c8f0 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -10,6 +10,12 @@ General - Refactored island implementation so that island data is memory-contiguous. This speeds up island processing in the solver and clears the way for the addition of the Newton and PGS solvers (currently only CG is supported). +simulate +^^^^^^^^ +- The struct ``mjv_sceneState`` has been removed. This struct was used for partial synchronization of ``mjModel`` and + ``mjData`` when the Python viewer is used in passive mode. This functionality is now provided by :ref:`mjv_copyModel` + and :ref:`mjv_copyData`, which don't copy arrays which are not required for visualization. + Version 3.3.2 (April 28, 2025) ------------------------------ diff --git a/doc/includes/references.h b/doc/includes/references.h index f55992d0..9a973092 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -2965,290 +2965,6 @@ struct mjvFigure_ { // abstract 2D figure passed to OpenGL rendere float yaxisdata[2]; // range of y-axis in data units }; typedef struct mjvFigure_ mjvFigure; -struct mjvSceneState_ { - int nbuffer; // size of the buffer in bytes - void* buffer; // heap-allocated memory for all arrays in this struct - int maxgeom; // maximum number of mjvGeom supported by this state object - mjvScene scratch; // scratch space for vis geoms inserted by the user and plugins - - // fields in mjModel that are necessary to re-render a scene - struct { - int nv; - int nu; - int na; - int nbody; - int nbvh; - int nbvhstatic; - int njnt; - int ngeom; - int nsite; - int ncam; - int nlight; - int nmesh; - int nskin; - int nflex; - int nflexvert; - int nflextexcoord; - int nskinvert; - int nskinface; - int nskinbone; - int nskinbonevert; - int nmat; - int neq; - int ntendon; - int ntree; - int nwrap; - int nsensor; - int nnames; - int npaths; - int nsensordata; - int narena; - - mjOption opt; - mjVisual vis; - mjStatistic stat; - - int* body_parentid; - int* body_rootid; - int* body_weldid; - int* body_mocapid; - int* body_jntnum; - int* body_jntadr; - int* body_dofnum; - int* body_dofadr; - int* body_geomnum; - int* body_geomadr; - mjtNum* body_iquat; - mjtNum* body_mass; - mjtNum* body_inertia; - int* body_bvhadr; - int* body_bvhnum; - - int* bvh_depth; - int* bvh_child; - int* bvh_nodeid; - mjtNum* bvh_aabb; - - int* jnt_type; - int* jnt_bodyid; - int* jnt_group; - - int* geom_type; - int* geom_bodyid; - int* geom_contype; - int* geom_conaffinity; - int* geom_dataid; - int* geom_matid; - int* geom_group; - mjtNum* geom_size; - mjtNum* geom_aabb; - mjtNum* geom_rbound; - float* geom_rgba; - - int* site_type; - int* site_bodyid; - int* site_matid; - int* site_group; - mjtNum* site_size; - float* site_rgba; - - int* cam_orthographic; - mjtNum* cam_fovy; - mjtNum* cam_ipd; - int* cam_resolution; - float* cam_sensorsize; - float* cam_intrinsic; - - mjtByte* light_directional; - mjtByte* light_castshadow; - float* light_bulbradius; - float* light_intensity; - float* light_range; - mjtByte* light_active; - float* light_attenuation; - float* light_cutoff; - float* light_exponent; - float* light_ambient; - float* light_diffuse; - float* light_specular; - - mjtByte* flex_flatskin; - int* flex_dim; - int* flex_matid; - int* flex_group; - int* flex_interp; - int* flex_nodeadr; - int* flex_nodenum; - int* flex_nodebodyid; - int* flex_vertadr; - int* flex_vertnum; - int* flex_elem; - int* flex_elemtexcoord; - int* flex_elemlayer; - int* flex_elemadr; - int* flex_elemnum; - int* flex_elemdataadr; - int* flex_shell; - int* flex_shellnum; - int* flex_shelldataadr; - int* flex_texcoordadr; - int* flex_bvhadr; - int* flex_bvhnum; - mjtByte* flex_centered; - mjtNum* flex_node; - mjtNum* flex_radius; - float* flex_rgba; - float* flex_texcoord; - - int* hfield_pathadr; - - int* mesh_bvhadr; - int* mesh_bvhnum; - int* mesh_texcoordadr; - int* mesh_graphadr; - int* mesh_pathadr; - - int* skin_matid; - int* skin_group; - float* skin_rgba; - float* skin_inflate; - int* skin_vertadr; - int* skin_vertnum; - int* skin_texcoordadr; - int* skin_faceadr; - int* skin_facenum; - int* skin_boneadr; - int* skin_bonenum; - float* skin_vert; - int* skin_face; - int* skin_bonevertadr; - int* skin_bonevertnum; - float* skin_bonebindpos; - float* skin_bonebindquat; - int* skin_bonebodyid; - int* skin_bonevertid; - float* skin_bonevertweight; - int* skin_pathadr; - - int* tex_pathadr; - - int* mat_texid; - mjtByte* mat_texuniform; - float* mat_texrepeat; - float* mat_emission; - float* mat_specular; - float* mat_shininess; - float* mat_reflectance; - float* mat_metallic; - float* mat_roughness; - float* mat_rgba; - - int* eq_type; - int* eq_obj1id; - int* eq_obj2id; - int* eq_objtype; - mjtNum* eq_data; - - int* tendon_num; - int* tendon_matid; - int* tendon_group; - mjtByte* tendon_limited; - mjtByte* tendon_actfrclimited; - mjtNum* tendon_width; - mjtNum* tendon_range; - mjtNum* tendon_actfrcrange; - mjtNum* tendon_stiffness; - mjtNum* tendon_damping; - mjtNum* tendon_frictionloss; - mjtNum* tendon_lengthspring; - float* tendon_rgba; - - int* actuator_trntype; - int* actuator_dyntype; - int* actuator_trnid; - int* actuator_actadr; - int* actuator_actnum; - int* actuator_group; - mjtByte* actuator_ctrllimited; - mjtByte* actuator_actlimited; - mjtNum* actuator_ctrlrange; - mjtNum* actuator_actrange; - mjtNum* actuator_cranklength; - - int* sensor_type; - int* sensor_objid; - int* sensor_adr; - - int* name_bodyadr; - int* name_jntadr; - int* name_geomadr; - int* name_siteadr; - int* name_camadr; - int* name_lightadr; - int* name_eqadr; - int* name_tendonadr; - int* name_actuatoradr; - char* names; - char* paths; - } model; - - // fields in mjData that are necessary to re-render a scene - struct { - mjWarningStat warning[mjNWARNING]; - - int nefc; - int ncon; - int nisland; - - mjtNum time; - - mjtNum* act; - - mjtNum* ctrl; - mjtNum* xfrc_applied; - mjtByte* eq_active; - - mjtNum* sensordata; - - mjtNum* xpos; - mjtNum* xquat; - mjtNum* xmat; - mjtNum* xipos; - mjtNum* ximat; - mjtNum* xanchor; - mjtNum* xaxis; - mjtNum* geom_xpos; - mjtNum* geom_xmat; - mjtNum* site_xpos; - mjtNum* site_xmat; - mjtNum* cam_xpos; - mjtNum* cam_xmat; - mjtNum* light_xpos; - mjtNum* light_xdir; - - mjtNum* subtree_com; - - int* ten_wrapadr; - int* ten_wrapnum; - int* wrap_obj; - mjtNum* ten_length; - mjtNum* wrap_xpos; - - mjtNum* bvh_aabb_dyn; - mjtByte* bvh_active; - int* island_dofadr; - int* dof_island; - int* efc_island; - int* tendon_efcadr; - - mjtNum* flexvert_xpos; - - mjContact* contact; - mjtNum* efc_force; - void* arena; - } data; -}; -typedef struct mjvSceneState_ mjvSceneState; //----------------------------- MJAPI FUNCTIONS -------------------------------- void mj_defaultVFS(mjVFS* vfs); @@ -3437,14 +3153,8 @@ mjtNum mjv_frustumHeight(const mjvScene* scn); void mjv_alignToCamera(mjtNum res[3], const mjtNum vec[3], const mjtNum forward[3]); void mjv_moveCamera(const mjModel* m, int action, mjtNum reldx, mjtNum reldy, const mjvScene* scn, mjvCamera* cam); -void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvCamera* cam); void mjv_movePerturb(const mjModel* m, const mjData* d, int action, mjtNum reldx, mjtNum reldy, const mjvScene* scn, mjvPerturb* pert); -void mjv_movePerturbFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvPerturb* pert); void mjv_moveModel(const mjModel* m, int action, mjtNum reldx, mjtNum reldy, const mjtNum roomup[3], mjvScene* scn); void mjv_initPerturb(const mjModel* m, mjData* d, const mjvScene* scn, mjvPerturb* pert); @@ -3467,16 +3177,7 @@ void mjv_makeScene(const mjModel* m, mjvScene* scn, int maxgeom); void mjv_freeScene(mjvScene* scn); void mjv_updateScene(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, mjvCamera* cam, int catmask, mjvScene* scn); -int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt, - const mjvPerturb* pert, mjvCamera* cam, int catmask, - mjvScene* scn); void mjv_copyModel(mjModel* dest, const mjModel* src); -void mjv_defaultSceneState(mjvSceneState* scnstate); -void mjv_makeSceneState(const mjModel* m, const mjData* d, - mjvSceneState* scnstate, int maxgeom); -void mjv_freeSceneState(mjvSceneState* scnstate); -void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt, - mjvSceneState* scnstate); void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, int catmask, mjvScene* scn); void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn); diff --git a/include/mujoco/mjvisualize.h b/include/mujoco/mjvisualize.h index 0093216b..560b8f35 100644 --- a/include/mujoco/mjvisualize.h +++ b/include/mujoco/mjvisualize.h @@ -406,292 +406,4 @@ struct mjvFigure_ { // abstract 2D figure passed to OpenGL rendere }; typedef struct mjvFigure_ mjvFigure; - -//---------------------------------- mjvSceneState ------------------------------------------------- - -struct mjvSceneState_ { - int nbuffer; // size of the buffer in bytes - void* buffer; // heap-allocated memory for all arrays in this struct - int maxgeom; // maximum number of mjvGeom supported by this state object - mjvScene scratch; // scratch space for vis geoms inserted by the user and plugins - - // fields in mjModel that are necessary to re-render a scene - struct { - int nv; - int nu; - int na; - int nbody; - int nbvh; - int nbvhstatic; - int njnt; - int ngeom; - int nsite; - int ncam; - int nlight; - int nmesh; - int nskin; - int nflex; - int nflexvert; - int nflextexcoord; - int nskinvert; - int nskinface; - int nskinbone; - int nskinbonevert; - int nmat; - int neq; - int ntendon; - int ntree; - int nwrap; - int nsensor; - int nnames; - int npaths; - int nsensordata; - int narena; - - mjOption opt; - mjVisual vis; - mjStatistic stat; - - int* body_parentid; - int* body_rootid; - int* body_weldid; - int* body_mocapid; - int* body_jntnum; - int* body_jntadr; - int* body_dofnum; - int* body_dofadr; - int* body_geomnum; - int* body_geomadr; - mjtNum* body_iquat; - mjtNum* body_mass; - mjtNum* body_inertia; - int* body_bvhadr; - int* body_bvhnum; - - int* bvh_depth; - int* bvh_child; - int* bvh_nodeid; - mjtNum* bvh_aabb; - - int* jnt_type; - int* jnt_bodyid; - int* jnt_group; - - int* geom_type; - int* geom_bodyid; - int* geom_contype; - int* geom_conaffinity; - int* geom_dataid; - int* geom_matid; - int* geom_group; - mjtNum* geom_size; - mjtNum* geom_aabb; - mjtNum* geom_rbound; - float* geom_rgba; - - int* site_type; - int* site_bodyid; - int* site_matid; - int* site_group; - mjtNum* site_size; - float* site_rgba; - - int* cam_orthographic; - mjtNum* cam_fovy; - mjtNum* cam_ipd; - int* cam_resolution; - float* cam_sensorsize; - float* cam_intrinsic; - - mjtByte* light_directional; - mjtByte* light_castshadow; - float* light_bulbradius; - float* light_intensity; - float* light_range; - mjtByte* light_active; - float* light_attenuation; - float* light_cutoff; - float* light_exponent; - float* light_ambient; - float* light_diffuse; - float* light_specular; - - mjtByte* flex_flatskin; - int* flex_dim; - int* flex_matid; - int* flex_group; - int* flex_interp; - int* flex_nodeadr; - int* flex_nodenum; - int* flex_nodebodyid; - int* flex_vertadr; - int* flex_vertnum; - int* flex_elem; - int* flex_elemtexcoord; - int* flex_elemlayer; - int* flex_elemadr; - int* flex_elemnum; - int* flex_elemdataadr; - int* flex_shell; - int* flex_shellnum; - int* flex_shelldataadr; - int* flex_texcoordadr; - int* flex_bvhadr; - int* flex_bvhnum; - mjtByte* flex_centered; - mjtNum* flex_node; - mjtNum* flex_radius; - float* flex_rgba; - float* flex_texcoord; - - int* hfield_pathadr; - - int* mesh_bvhadr; - int* mesh_bvhnum; - int* mesh_texcoordadr; - int* mesh_graphadr; - int* mesh_pathadr; - - int* skin_matid; - int* skin_group; - float* skin_rgba; - float* skin_inflate; - int* skin_vertadr; - int* skin_vertnum; - int* skin_texcoordadr; - int* skin_faceadr; - int* skin_facenum; - int* skin_boneadr; - int* skin_bonenum; - float* skin_vert; - int* skin_face; - int* skin_bonevertadr; - int* skin_bonevertnum; - float* skin_bonebindpos; - float* skin_bonebindquat; - int* skin_bonebodyid; - int* skin_bonevertid; - float* skin_bonevertweight; - int* skin_pathadr; - - int* tex_pathadr; - - int* mat_texid; - mjtByte* mat_texuniform; - float* mat_texrepeat; - float* mat_emission; - float* mat_specular; - float* mat_shininess; - float* mat_reflectance; - float* mat_metallic; - float* mat_roughness; - float* mat_rgba; - - int* eq_type; - int* eq_obj1id; - int* eq_obj2id; - int* eq_objtype; - mjtNum* eq_data; - - int* tendon_num; - int* tendon_matid; - int* tendon_group; - mjtByte* tendon_limited; - mjtByte* tendon_actfrclimited; - mjtNum* tendon_width; - mjtNum* tendon_range; - mjtNum* tendon_actfrcrange; - mjtNum* tendon_stiffness; - mjtNum* tendon_damping; - mjtNum* tendon_frictionloss; - mjtNum* tendon_lengthspring; - float* tendon_rgba; - - int* actuator_trntype; - int* actuator_dyntype; - int* actuator_trnid; - int* actuator_actadr; - int* actuator_actnum; - int* actuator_group; - mjtByte* actuator_ctrllimited; - mjtByte* actuator_actlimited; - mjtNum* actuator_ctrlrange; - mjtNum* actuator_actrange; - mjtNum* actuator_cranklength; - - int* sensor_type; - int* sensor_objid; - int* sensor_adr; - - int* name_bodyadr; - int* name_jntadr; - int* name_geomadr; - int* name_siteadr; - int* name_camadr; - int* name_lightadr; - int* name_eqadr; - int* name_tendonadr; - int* name_actuatoradr; - char* names; - char* paths; - } model; - - // fields in mjData that are necessary to re-render a scene - struct { - mjWarningStat warning[mjNWARNING]; - - int nefc; - int ncon; - int nisland; - - mjtNum time; - - mjtNum* act; - - mjtNum* ctrl; - mjtNum* xfrc_applied; - mjtByte* eq_active; - - mjtNum* sensordata; - - mjtNum* xpos; - mjtNum* xquat; - mjtNum* xmat; - mjtNum* xipos; - mjtNum* ximat; - mjtNum* xanchor; - mjtNum* xaxis; - mjtNum* geom_xpos; - mjtNum* geom_xmat; - mjtNum* site_xpos; - mjtNum* site_xmat; - mjtNum* cam_xpos; - mjtNum* cam_xmat; - mjtNum* light_xpos; - mjtNum* light_xdir; - - mjtNum* subtree_com; - - int* ten_wrapadr; - int* ten_wrapnum; - int* wrap_obj; - mjtNum* ten_length; - mjtNum* wrap_xpos; - - mjtNum* bvh_aabb_dyn; - mjtByte* bvh_active; - int* island_dofadr; - int* dof_island; - int* efc_island; - int* tendon_efcadr; - - mjtNum* flexvert_xpos; - - mjContact* contact; - mjtNum* efc_force; - void* arena; - } data; -}; -typedef struct mjvSceneState_ mjvSceneState; - #endif // MUJOCO_MJVISUALIZE_H_ diff --git a/include/mujoco/mjxmacro.h b/include/mujoco/mjxmacro.h index 9ba47b19..5ffe5764 100644 --- a/include/mujoco/mjxmacro.h +++ b/include/mujoco/mjxmacro.h @@ -66,92 +66,92 @@ //-------------------------------- mjModel --------------------------------------------------------- // int fields of mjModel -#define MJMODEL_INTS \ - X ( nq ) \ - XMJV( nv ) \ - XMJV( nu ) \ - XMJV( na ) \ - XMJV( nbody ) \ - XMJV( nbvh ) \ - XMJV( nbvhstatic ) \ - X ( nbvhdynamic ) \ - XMJV( njnt ) \ - XMJV( ngeom ) \ - XMJV( nsite ) \ - XMJV( ncam ) \ - XMJV( nlight ) \ - XMJV( nflex ) \ - X ( nflexnode ) \ - XMJV( nflexvert ) \ - X ( nflexedge ) \ - X ( nflexelem ) \ - X ( nflexelemdata ) \ - X ( nflexelemedge ) \ - X ( nflexshelldata ) \ - X ( nflexevpair ) \ - XMJV( nflextexcoord ) \ - XMJV( nmesh ) \ - X ( nmeshvert ) \ - X ( nmeshnormal ) \ - X ( nmeshtexcoord ) \ - X ( nmeshface ) \ - X ( nmeshgraph ) \ - X ( nmeshpoly ) \ - X ( nmeshpolyvert ) \ - X ( nmeshpolymap ) \ - XMJV( nskin ) \ - XMJV( nskinvert ) \ - X ( nskintexvert ) \ - XMJV( nskinface ) \ - XMJV( nskinbone ) \ - XMJV( nskinbonevert ) \ - X ( nhfield ) \ - X ( nhfielddata ) \ - X ( ntex ) \ - X ( ntexdata ) \ - XMJV( nmat ) \ - X ( npair ) \ - X ( nexclude ) \ - XMJV( neq ) \ - XMJV( ntendon ) \ - XMJV( nwrap ) \ - XMJV( nsensor ) \ - X ( nnumeric ) \ - X ( nnumericdata ) \ - X ( ntext ) \ - X ( ntextdata ) \ - X ( ntuple ) \ - X ( ntupledata ) \ - X ( nkey ) \ - X ( nmocap ) \ - X ( nplugin ) \ - X ( npluginattr ) \ - X ( nuser_body ) \ - X ( nuser_jnt ) \ - X ( nuser_geom ) \ - X ( nuser_site ) \ - X ( nuser_cam ) \ - X ( nuser_tendon ) \ - X ( nuser_actuator ) \ - X ( nuser_sensor ) \ - XMJV( nnames ) \ - XMJV( npaths ) \ - X ( nnames_map ) \ - X ( nM ) \ - X ( nB ) \ - X ( nC ) \ - X ( nD ) \ - X ( nJmom ) \ - XMJV( ntree ) \ - X ( ngravcomp ) \ - X ( nemax ) \ - X ( njmax ) \ - X ( nconmax ) \ - X ( nuserdata ) \ - XMJV( nsensordata ) \ - X ( npluginstate ) \ - X ( narena ) \ - X ( nbuffer ) +#define MJMODEL_INTS \ + X( nq ) \ + X( nv ) \ + X( nu ) \ + X( na ) \ + X( nbody ) \ + X( nbvh ) \ + X( nbvhstatic ) \ + X( nbvhdynamic ) \ + X( njnt ) \ + X( ngeom ) \ + X( nsite ) \ + X( ncam ) \ + X( nlight ) \ + X( nflex ) \ + X( nflexnode ) \ + X( nflexvert ) \ + X( nflexedge ) \ + X( nflexelem ) \ + X( nflexelemdata ) \ + X( nflexelemedge ) \ + X( nflexshelldata ) \ + X( nflexevpair ) \ + X( nflextexcoord ) \ + X( nmesh ) \ + X( nmeshvert ) \ + X( nmeshnormal ) \ + X( nmeshtexcoord ) \ + X( nmeshface ) \ + X( nmeshgraph ) \ + X( nmeshpoly ) \ + X( nmeshpolyvert ) \ + X( nmeshpolymap ) \ + X( nskin ) \ + X( nskinvert ) \ + X( nskintexvert ) \ + X( nskinface ) \ + X( nskinbone ) \ + X( nskinbonevert ) \ + X( nhfield ) \ + X( nhfielddata ) \ + X( ntex ) \ + X( ntexdata ) \ + X( nmat ) \ + X( npair ) \ + X( nexclude ) \ + X( neq ) \ + X( ntendon ) \ + X( nwrap ) \ + X( nsensor ) \ + X( nnumeric ) \ + X( nnumericdata ) \ + X( ntext ) \ + X( ntextdata ) \ + X( ntuple ) \ + X( ntupledata ) \ + X( nkey ) \ + X( nmocap ) \ + X( nplugin ) \ + X( npluginattr ) \ + X( nuser_body ) \ + X( nuser_jnt ) \ + X( nuser_geom ) \ + X( nuser_site ) \ + X( nuser_cam ) \ + X( nuser_tendon ) \ + X( nuser_actuator ) \ + X( nuser_sensor ) \ + X( nnames ) \ + X( npaths ) \ + X( nnames_map ) \ + X( nM ) \ + X( nB ) \ + X( nC ) \ + X( nD ) \ + X( nJmom ) \ + X( ntree ) \ + X( ngravcomp ) \ + X( nemax ) \ + X( njmax ) \ + X( nconmax ) \ + X( nuserdata ) \ + X( nsensordata ) \ + X( npluginstate ) \ + X( narena ) \ + X( nbuffer ) /* nbuffer needs to be the final field */ @@ -178,31 +178,31 @@ // pointer fields of mjModel -// XMJV means that the field is required to construct mjvScene -// (by default we define XMJV to be the same as X) +// XNV means that the field is not required to construct mjvScene +// (by default we define XNV to be the same as X) #define MJMODEL_POINTERS \ X ( mjtNum, qpos0, nq, 1 ) \ X ( mjtNum, qpos_spring, nq, 1 ) \ - XMJV( int, body_parentid, nbody, 1 ) \ - XMJV( int, body_rootid, nbody, 1 ) \ - XMJV( int, body_weldid, nbody, 1 ) \ - XMJV( int, body_mocapid, nbody, 1 ) \ - XMJV( int, body_jntnum, nbody, 1 ) \ - XMJV( int, body_jntadr, nbody, 1 ) \ - XMJV( int, body_dofnum, nbody, 1 ) \ - XMJV( int, body_dofadr, nbody, 1 ) \ + X ( int, body_parentid, nbody, 1 ) \ + X ( int, body_rootid, nbody, 1 ) \ + X ( int, body_weldid, nbody, 1 ) \ + X ( int, body_mocapid, nbody, 1 ) \ + X ( int, body_jntnum, nbody, 1 ) \ + X ( int, body_jntadr, nbody, 1 ) \ + X ( int, body_dofnum, nbody, 1 ) \ + X ( int, body_dofadr, nbody, 1 ) \ X ( int, body_treeid, nbody, 1 ) \ - XMJV( int, body_geomnum, nbody, 1 ) \ - XMJV( int, body_geomadr, nbody, 1 ) \ + X ( int, body_geomnum, nbody, 1 ) \ + X ( int, body_geomadr, nbody, 1 ) \ X ( mjtByte, body_simple, nbody, 1 ) \ X ( mjtByte, body_sameframe, nbody, 1 ) \ X ( mjtNum, body_pos, nbody, 3 ) \ X ( mjtNum, body_quat, nbody, 4 ) \ X ( mjtNum, body_ipos, nbody, 3 ) \ - XMJV( mjtNum, body_iquat, nbody, 4 ) \ - XMJV( mjtNum, body_mass, nbody, 1 ) \ + X ( mjtNum, body_iquat, nbody, 4 ) \ + X ( mjtNum, body_mass, nbody, 1 ) \ X ( mjtNum, body_subtreemass, nbody, 1 ) \ - XMJV( mjtNum, body_inertia, nbody, 3 ) \ + X ( mjtNum, body_inertia, nbody, 3 ) \ X ( mjtNum, body_invweight0, nbody, 2 ) \ X ( mjtNum, body_gravcomp, nbody, 1 ) \ X ( mjtNum, body_margin, nbody, 1 ) \ @@ -210,17 +210,17 @@ X ( int, body_plugin, nbody, 1 ) \ X ( int, body_contype, nbody, 1 ) \ X ( int, body_conaffinity, nbody, 1 ) \ - XMJV( int, body_bvhadr, nbody, 1 ) \ - XMJV( int, body_bvhnum, nbody, 1 ) \ - XMJV( int, bvh_depth, nbvh, 1 ) \ - XMJV( int, bvh_child, nbvh, 2 ) \ - XMJV( int, bvh_nodeid, nbvh, 1 ) \ - XMJV( mjtNum, bvh_aabb, nbvhstatic, 6 ) \ - XMJV( int, jnt_type, njnt, 1 ) \ + X ( int, body_bvhadr, nbody, 1 ) \ + X ( int, body_bvhnum, nbody, 1 ) \ + X ( int, bvh_depth, nbvh, 1 ) \ + X ( int, bvh_child, nbvh, 2 ) \ + X ( int, bvh_nodeid, nbvh, 1 ) \ + X ( mjtNum, bvh_aabb, nbvhstatic, 6 ) \ + X ( int, jnt_type, njnt, 1 ) \ X ( int, jnt_qposadr, njnt, 1 ) \ X ( int, jnt_dofadr, njnt, 1 ) \ - XMJV( int, jnt_bodyid, njnt, 1 ) \ - XMJV( int, jnt_group, njnt, 1 ) \ + X ( int, jnt_bodyid, njnt, 1 ) \ + X ( int, jnt_group, njnt, 1 ) \ X ( mjtByte, jnt_limited, njnt, 1 ) \ X ( mjtByte, jnt_actfrclimited, njnt, 1 ) \ X ( mjtByte, jnt_actgravcomp, njnt, 1 ) \ @@ -246,23 +246,23 @@ X ( mjtNum, dof_damping, nv, 1 ) \ X ( mjtNum, dof_invweight0, nv, 1 ) \ X ( mjtNum, dof_M0, nv, 1 ) \ - XMJV( int, geom_type, ngeom, 1 ) \ - XMJV( int, geom_contype, ngeom, 1 ) \ - XMJV( int, geom_conaffinity, ngeom, 1 ) \ + X ( int, geom_type, ngeom, 1 ) \ + X ( int, geom_contype, ngeom, 1 ) \ + X ( int, geom_conaffinity, ngeom, 1 ) \ X ( int, geom_condim, ngeom, 1 ) \ - XMJV( int, geom_bodyid, ngeom, 1 ) \ - XMJV( int, geom_dataid, ngeom, 1 ) \ - XMJV( int, geom_matid, ngeom, 1 ) \ - XMJV( int, geom_group, ngeom, 1 ) \ + X ( int, geom_bodyid, ngeom, 1 ) \ + X ( int, geom_dataid, ngeom, 1 ) \ + X ( int, geom_matid, ngeom, 1 ) \ + X ( int, geom_group, ngeom, 1 ) \ X ( int, geom_priority, ngeom, 1 ) \ X ( int, geom_plugin, ngeom, 1 ) \ X ( mjtByte, geom_sameframe, ngeom, 1 ) \ X ( mjtNum, geom_solmix, ngeom, 1 ) \ X ( mjtNum, geom_solref, ngeom, mjNREF ) \ X ( mjtNum, geom_solimp, ngeom, mjNIMP ) \ - XMJV( mjtNum, geom_size, ngeom, 3 ) \ - XMJV( mjtNum, geom_aabb, ngeom, 6 ) \ - XMJV( mjtNum, geom_rbound, ngeom, 1 ) \ + X ( mjtNum, geom_size, ngeom, 3 ) \ + X ( mjtNum, geom_aabb, ngeom, 6 ) \ + X ( mjtNum, geom_rbound, ngeom, 1 ) \ X ( mjtNum, geom_pos, ngeom, 3 ) \ X ( mjtNum, geom_quat, ngeom, 4 ) \ X ( mjtNum, geom_friction, ngeom, 3 ) \ @@ -270,17 +270,17 @@ X ( mjtNum, geom_gap, ngeom, 1 ) \ XNV ( mjtNum, geom_fluid, ngeom, mjNFLUID ) \ X ( mjtNum, geom_user, ngeom, MJ_M(nuser_geom) ) \ - XMJV( float, geom_rgba, ngeom, 4 ) \ - XMJV( int, site_type, nsite, 1 ) \ - XMJV( int, site_bodyid, nsite, 1 ) \ - XMJV( int, site_matid, nsite, 1 ) \ - XMJV( int, site_group, nsite, 1 ) \ + X ( float, geom_rgba, ngeom, 4 ) \ + X ( int, site_type, nsite, 1 ) \ + X ( int, site_bodyid, nsite, 1 ) \ + X ( int, site_matid, nsite, 1 ) \ + X ( int, site_group, nsite, 1 ) \ X ( mjtByte, site_sameframe, nsite, 1 ) \ - XMJV( mjtNum, site_size, nsite, 3 ) \ + X ( mjtNum, site_size, nsite, 3 ) \ X ( mjtNum, site_pos, nsite, 3 ) \ X ( mjtNum, site_quat, nsite, 4 ) \ X ( mjtNum, site_user, nsite, MJ_M(nuser_site) ) \ - XMJV( float, site_rgba, nsite, 4 ) \ + X ( float, site_rgba, nsite, 4 ) \ X ( int, cam_mode, ncam, 1 ) \ X ( int, cam_bodyid, ncam, 1 ) \ X ( int, cam_targetbodyid, ncam, 1 ) \ @@ -289,33 +289,33 @@ X ( mjtNum, cam_poscom0, ncam, 3 ) \ X ( mjtNum, cam_pos0, ncam, 3 ) \ X ( mjtNum, cam_mat0, ncam, 9 ) \ - XMJV( int, cam_orthographic, ncam, 1 ) \ - XMJV( mjtNum, cam_fovy, ncam, 1 ) \ - XMJV( mjtNum, cam_ipd, ncam, 1 ) \ - XMJV( int, cam_resolution, ncam, 2 ) \ - XMJV( float, cam_sensorsize, ncam, 2 ) \ - XMJV( float, cam_intrinsic, ncam, 4 ) \ + X ( int, cam_orthographic, ncam, 1 ) \ + X ( mjtNum, cam_fovy, ncam, 1 ) \ + X ( mjtNum, cam_ipd, ncam, 1 ) \ + X ( int, cam_resolution, ncam, 2 ) \ + X ( float, cam_sensorsize, ncam, 2 ) \ + X ( float, cam_intrinsic, ncam, 4 ) \ X ( mjtNum, cam_user, ncam, MJ_M(nuser_cam) ) \ X ( int, light_mode, nlight, 1 ) \ X ( int, light_bodyid, nlight, 1 ) \ X ( int, light_targetbodyid, nlight, 1 ) \ - XMJV( mjtByte, light_directional, nlight, 1 ) \ - XMJV( mjtByte, light_castshadow, nlight, 1 ) \ - XMJV( float, light_bulbradius, nlight, 1 ) \ - XMJV( float, light_intensity, nlight, 1 ) \ - XMJV( float, light_range, nlight, 1 ) \ - XMJV( mjtByte, light_active, nlight, 1 ) \ + X ( mjtByte, light_directional, nlight, 1 ) \ + X ( mjtByte, light_castshadow, nlight, 1 ) \ + X ( float, light_bulbradius, nlight, 1 ) \ + X ( float, light_intensity, nlight, 1 ) \ + X ( float, light_range, nlight, 1 ) \ + X ( mjtByte, light_active, nlight, 1 ) \ X ( mjtNum, light_pos, nlight, 3 ) \ X ( mjtNum, light_dir, nlight, 3 ) \ X ( mjtNum, light_poscom0, nlight, 3 ) \ X ( mjtNum, light_pos0, nlight, 3 ) \ X ( mjtNum, light_dir0, nlight, 3 ) \ - XMJV( float, light_attenuation, nlight, 3 ) \ - XMJV( float, light_cutoff, nlight, 1 ) \ - XMJV( float, light_exponent, nlight, 1 ) \ - XMJV( float, light_ambient, nlight, 3 ) \ - XMJV( float, light_diffuse, nlight, 3 ) \ - XMJV( float, light_specular, nlight, 3 ) \ + X ( float, light_attenuation, nlight, 3 ) \ + X ( float, light_cutoff, nlight, 1 ) \ + X ( float, light_exponent, nlight, 1 ) \ + X ( float, light_ambient, nlight, 3 ) \ + X ( float, light_diffuse, nlight, 3 ) \ + X ( float, light_specular, nlight, 3 ) \ X ( int, flex_contype, nflex, 1 ) \ X ( int, flex_conaffinity, nflex, 1 ) \ X ( int, flex_condim, nflex, 1 ) \ @@ -329,42 +329,42 @@ X ( mjtByte, flex_internal, nflex, 1 ) \ X ( int, flex_selfcollide, nflex, 1 ) \ X ( int, flex_activelayers, nflex, 1 ) \ - XMJV( int, flex_dim, nflex, 1 ) \ - XMJV( int, flex_matid, nflex, 1 ) \ - XMJV( int, flex_group, nflex, 1 ) \ - XMJV( int, flex_interp, nflex, 1 ) \ - XMJV( int, flex_nodeadr, nflex, 1 ) \ - XMJV( int, flex_nodenum, nflex, 1 ) \ - XMJV( int, flex_vertadr, nflex, 1 ) \ - XMJV( int, flex_vertnum, nflex, 1 ) \ + X ( int, flex_dim, nflex, 1 ) \ + X ( int, flex_matid, nflex, 1 ) \ + X ( int, flex_group, nflex, 1 ) \ + X ( int, flex_interp, nflex, 1 ) \ + X ( int, flex_nodeadr, nflex, 1 ) \ + X ( int, flex_nodenum, nflex, 1 ) \ + X ( int, flex_vertadr, nflex, 1 ) \ + X ( int, flex_vertnum, nflex, 1 ) \ X ( int, flex_edgeadr, nflex, 1 ) \ X ( int, flex_edgenum, nflex, 1 ) \ - XMJV( int, flex_elemadr, nflex, 1 ) \ - XMJV( int, flex_elemnum, nflex, 1 ) \ - XMJV( int, flex_elemdataadr, nflex, 1 ) \ + X ( int, flex_elemadr, nflex, 1 ) \ + X ( int, flex_elemnum, nflex, 1 ) \ + X ( int, flex_elemdataadr, nflex, 1 ) \ X ( int, flex_elemedgeadr, nflex, 1 ) \ - XMJV( int, flex_shellnum, nflex, 1 ) \ - XMJV( int, flex_shelldataadr, nflex, 1 ) \ + X ( int, flex_shellnum, nflex, 1 ) \ + X ( int, flex_shelldataadr, nflex, 1 ) \ X ( int, flex_evpairadr, nflex, 1 ) \ X ( int, flex_evpairnum, nflex, 1 ) \ - XMJV( int, flex_texcoordadr, nflex, 1 ) \ - XMJV( int, flex_nodebodyid, nflexnode, 1 ) \ + X ( int, flex_texcoordadr, nflex, 1 ) \ + X ( int, flex_nodebodyid, nflexnode, 1 ) \ X ( int, flex_vertbodyid, nflexvert, 1 ) \ X ( int, flex_edge, nflexedge, 2 ) \ X ( int, flex_edgeflap, nflexedge, 2 ) \ - XMJV( int, flex_elem, nflexelemdata, 1 ) \ - XMJV( int, flex_elemtexcoord, nflexelemdata, 1 ) \ + X ( int, flex_elem, nflexelemdata, 1 ) \ + X ( int, flex_elemtexcoord, nflexelemdata, 1 ) \ X ( int, flex_elemedge, nflexelemedge, 1 ) \ - XMJV( int, flex_elemlayer, nflexelem, 1 ) \ - XMJV( int, flex_shell, nflexshelldata,1 ) \ + X ( int, flex_elemlayer, nflexelem, 1 ) \ + X ( int, flex_shell, nflexshelldata,1 ) \ X ( int, flex_evpair, nflexevpair, 2 ) \ X ( mjtNum, flex_vert, nflexvert, 3 ) \ X ( mjtNum, flex_vert0, nflexvert, 3 ) \ - XMJV( mjtNum, flex_node, nflexnode, 3 ) \ + X ( mjtNum, flex_node, nflexnode, 3 ) \ X ( mjtNum, flex_node0, nflexnode, 3 ) \ X ( mjtNum, flexedge_length0, nflexedge, 1 ) \ X ( mjtNum, flexedge_invweight0, nflexedge, 1 ) \ - XMJV( mjtNum, flex_radius, nflex, 1 ) \ + X ( mjtNum, flex_radius, nflex, 1 ) \ X ( mjtNum, flex_stiffness, nflexelem, 21 ) \ X ( mjtNum, flex_bending, nflexedge, 16 ) \ X ( mjtNum, flex_damping, nflex, 1 ) \ @@ -373,23 +373,23 @@ X ( mjtByte, flex_edgeequality, nflex, 1 ) \ X ( mjtByte, flex_rigid, nflex, 1 ) \ X ( mjtByte, flexedge_rigid, nflexedge, 1 ) \ - XMJV( mjtByte, flex_centered, nflex, 1 ) \ - XMJV( mjtByte, flex_flatskin, nflex, 1 ) \ - XMJV( int, flex_bvhadr, nflex, 1 ) \ - XMJV( int, flex_bvhnum, nflex, 1 ) \ - XMJV( float, flex_rgba, nflex, 4 ) \ - XMJV( float, flex_texcoord, nflextexcoord, 2 ) \ + X ( mjtByte, flex_centered, nflex, 1 ) \ + X ( mjtByte, flex_flatskin, nflex, 1 ) \ + X ( int, flex_bvhadr, nflex, 1 ) \ + X ( int, flex_bvhnum, nflex, 1 ) \ + X ( float, flex_rgba, nflex, 4 ) \ + X ( float, flex_texcoord, nflextexcoord, 2 ) \ X ( int, mesh_vertadr, nmesh, 1 ) \ X ( int, mesh_vertnum, nmesh, 1 ) \ X ( int, mesh_normaladr, nmesh, 1 ) \ X ( int, mesh_normalnum, nmesh, 1 ) \ - XMJV( int, mesh_texcoordadr, nmesh, 1 ) \ + X ( int, mesh_texcoordadr, nmesh, 1 ) \ X ( int, mesh_texcoordnum, nmesh, 1 ) \ X ( int, mesh_faceadr, nmesh, 1 ) \ X ( int, mesh_facenum, nmesh, 1 ) \ - XMJV( int, mesh_bvhadr, nmesh, 1 ) \ - XMJV( int, mesh_bvhnum, nmesh, 1 ) \ - XMJV( int, mesh_graphadr, nmesh, 1 ) \ + X ( int, mesh_bvhadr, nmesh, 1 ) \ + X ( int, mesh_bvhnum, nmesh, 1 ) \ + X ( int, mesh_graphadr, nmesh, 1 ) \ X ( mjtNum, mesh_scale, nmesh, 3 ) \ X ( mjtNum, mesh_pos, nmesh, 3 ) \ X ( mjtNum, mesh_quat, nmesh, 4 ) \ @@ -400,7 +400,7 @@ XNV ( int, mesh_facenormal, nmeshface, 3 ) \ XNV ( int, mesh_facetexcoord, nmeshface, 3 ) \ XNV ( int, mesh_graph, nmeshgraph, 1 ) \ - XMJV( int, mesh_pathadr, nmesh, 1 ) \ + X ( int, mesh_pathadr, nmesh, 1 ) \ XNV ( int, mesh_polynum, nmesh, 1 ) \ XNV ( int, mesh_polyadr, nmesh, 1 ) \ XNV ( mjtNum, mesh_polynormal, nmeshpoly, 3 ) \ @@ -410,51 +410,51 @@ XNV ( int, mesh_polymapadr, nmeshvert, 1 ) \ XNV ( int, mesh_polymapnum, nmeshvert, 1 ) \ XNV ( int, mesh_polymap, nmeshpolymap, 1 ) \ - XMJV( int, skin_matid, nskin, 1 ) \ - XMJV( int, skin_group, nskin, 1 ) \ - XMJV( float, skin_rgba, nskin, 4 ) \ - XMJV( float, skin_inflate, nskin, 1 ) \ - XMJV( int, skin_vertadr, nskin, 1 ) \ - XMJV( int, skin_vertnum, nskin, 1 ) \ - XMJV( int, skin_texcoordadr, nskin, 1 ) \ - XMJV( int, skin_faceadr, nskin, 1 ) \ - XMJV( int, skin_facenum, nskin, 1 ) \ - XMJV( int, skin_boneadr, nskin, 1 ) \ - XMJV( int, skin_bonenum, nskin, 1 ) \ - XMJV( float, skin_vert, nskinvert, 3 ) \ + X ( int, skin_matid, nskin, 1 ) \ + X ( int, skin_group, nskin, 1 ) \ + X ( float, skin_rgba, nskin, 4 ) \ + X ( float, skin_inflate, nskin, 1 ) \ + X ( int, skin_vertadr, nskin, 1 ) \ + X ( int, skin_vertnum, nskin, 1 ) \ + X ( int, skin_texcoordadr, nskin, 1 ) \ + X ( int, skin_faceadr, nskin, 1 ) \ + X ( int, skin_facenum, nskin, 1 ) \ + X ( int, skin_boneadr, nskin, 1 ) \ + X ( int, skin_bonenum, nskin, 1 ) \ + X ( float, skin_vert, nskinvert, 3 ) \ X ( float, skin_texcoord, nskintexvert, 2 ) \ - XMJV( int, skin_face, nskinface, 3 ) \ - XMJV( int, skin_bonevertadr, nskinbone, 1 ) \ - XMJV( int, skin_bonevertnum, nskinbone, 1 ) \ - XMJV( float, skin_bonebindpos, nskinbone, 3 ) \ - XMJV( float, skin_bonebindquat, nskinbone, 4 ) \ - XMJV( int, skin_bonebodyid, nskinbone, 1 ) \ - XMJV( int, skin_bonevertid, nskinbonevert, 1 ) \ - XMJV( float, skin_bonevertweight, nskinbonevert, 1 ) \ - XMJV( int, skin_pathadr, nskin, 1 ) \ + X ( int, skin_face, nskinface, 3 ) \ + X ( int, skin_bonevertadr, nskinbone, 1 ) \ + X ( int, skin_bonevertnum, nskinbone, 1 ) \ + X ( float, skin_bonebindpos, nskinbone, 3 ) \ + X ( float, skin_bonebindquat, nskinbone, 4 ) \ + X ( int, skin_bonebodyid, nskinbone, 1 ) \ + X ( int, skin_bonevertid, nskinbonevert, 1 ) \ + X ( float, skin_bonevertweight, nskinbonevert, 1 ) \ + X ( int, skin_pathadr, nskin, 1 ) \ X ( mjtNum, hfield_size, nhfield, 4 ) \ X ( int, hfield_nrow, nhfield, 1 ) \ X ( int, hfield_ncol, nhfield, 1 ) \ X ( int, hfield_adr, nhfield, 1 ) \ XNV ( float, hfield_data, nhfielddata, 1 ) \ - XMJV( int, hfield_pathadr, nhfield, 1 ) \ + X ( int, hfield_pathadr, nhfield, 1 ) \ X ( int, tex_type, ntex, 1 ) \ X ( int, tex_height, ntex, 1 ) \ X ( int, tex_width, ntex, 1 ) \ X ( int, tex_nchannel, ntex, 1 ) \ X ( int, tex_adr, ntex, 1 ) \ XNV ( mjtByte, tex_data, ntexdata, 1 ) \ - XMJV( int, tex_pathadr, ntex, 1 ) \ - XMJV( int, mat_texid, nmat, mjNTEXROLE ) \ - XMJV( mjtByte, mat_texuniform, nmat, 1 ) \ - XMJV( float, mat_texrepeat, nmat, 2 ) \ - XMJV( float, mat_emission, nmat, 1 ) \ - XMJV( float, mat_specular, nmat, 1 ) \ - XMJV( float, mat_shininess, nmat, 1 ) \ - XMJV( float, mat_reflectance, nmat, 1 ) \ - XMJV( float, mat_metallic, nmat, 1 ) \ - XMJV( float, mat_roughness, nmat, 1 ) \ - XMJV( float, mat_rgba, nmat, 4 ) \ + X ( int, tex_pathadr, ntex, 1 ) \ + X ( int, mat_texid, nmat, mjNTEXROLE ) \ + X ( mjtByte, mat_texuniform, nmat, 1 ) \ + X ( float, mat_texrepeat, nmat, 2 ) \ + X ( float, mat_emission, nmat, 1 ) \ + X ( float, mat_specular, nmat, 1 ) \ + X ( float, mat_shininess, nmat, 1 ) \ + X ( float, mat_reflectance, nmat, 1 ) \ + X ( float, mat_metallic, nmat, 1 ) \ + X ( float, mat_roughness, nmat, 1 ) \ + X ( float, mat_rgba, nmat, 4 ) \ X ( int, pair_dim, npair, 1 ) \ X ( int, pair_geom1, npair, 1 ) \ X ( int, pair_geom2, npair, 1 ) \ @@ -466,74 +466,74 @@ X ( mjtNum, pair_gap, npair, 1 ) \ X ( mjtNum, pair_friction, npair, 5 ) \ X ( int, exclude_signature, nexclude, 1 ) \ - XMJV( int, eq_type, neq, 1 ) \ - XMJV( int, eq_obj1id, neq, 1 ) \ - XMJV( int, eq_obj2id, neq, 1 ) \ - XMJV( int, eq_objtype, neq, 1 ) \ + X ( int, eq_type, neq, 1 ) \ + X ( int, eq_obj1id, neq, 1 ) \ + X ( int, eq_obj2id, neq, 1 ) \ + X ( int, eq_objtype, neq, 1 ) \ X ( mjtByte, eq_active0, neq, 1 ) \ X ( mjtNum, eq_solref, neq, mjNREF ) \ X ( mjtNum, eq_solimp, neq, mjNIMP ) \ - XMJV( mjtNum, eq_data, neq, mjNEQDATA ) \ + X ( mjtNum, eq_data, neq, mjNEQDATA ) \ X ( int, tendon_adr, ntendon, 1 ) \ - XMJV( int, tendon_num, ntendon, 1 ) \ - XMJV( int, tendon_matid, ntendon, 1 ) \ - XMJV( int, tendon_group, ntendon, 1 ) \ - XMJV( mjtByte, tendon_limited, ntendon, 1 ) \ - XMJV( mjtByte, tendon_actfrclimited, ntendon, 1 ) \ - XMJV( mjtNum, tendon_width, ntendon, 1 ) \ + X ( int, tendon_num, ntendon, 1 ) \ + X ( int, tendon_matid, ntendon, 1 ) \ + X ( int, tendon_group, ntendon, 1 ) \ + X ( mjtByte, tendon_limited, ntendon, 1 ) \ + X ( mjtByte, tendon_actfrclimited, ntendon, 1 ) \ + X ( mjtNum, tendon_width, ntendon, 1 ) \ X ( mjtNum, tendon_solref_lim, ntendon, mjNREF ) \ X ( mjtNum, tendon_solimp_lim, ntendon, mjNIMP ) \ X ( mjtNum, tendon_solref_fri, ntendon, mjNREF ) \ X ( mjtNum, tendon_solimp_fri, ntendon, mjNIMP ) \ - XMJV( mjtNum, tendon_range, ntendon, 2 ) \ - XMJV( mjtNum, tendon_actfrcrange, ntendon, 2 ) \ + X ( mjtNum, tendon_range, ntendon, 2 ) \ + X ( mjtNum, tendon_actfrcrange, ntendon, 2 ) \ X ( mjtNum, tendon_margin, ntendon, 1 ) \ - XMJV( mjtNum, tendon_stiffness, ntendon, 1 ) \ - XMJV( mjtNum, tendon_damping, ntendon, 1 ) \ + X ( mjtNum, tendon_stiffness, ntendon, 1 ) \ + X ( mjtNum, tendon_damping, ntendon, 1 ) \ X ( mjtNum, tendon_armature, ntendon, 1 ) \ - XMJV( mjtNum, tendon_frictionloss, ntendon, 1 ) \ - XMJV( mjtNum, tendon_lengthspring, ntendon, 2 ) \ + X ( mjtNum, tendon_frictionloss, ntendon, 1 ) \ + X ( mjtNum, tendon_lengthspring, ntendon, 2 ) \ X ( mjtNum, tendon_length0, ntendon, 1 ) \ X ( mjtNum, tendon_invweight0, ntendon, 1 ) \ X ( mjtNum, tendon_user, ntendon, MJ_M(nuser_tendon) ) \ - XMJV( float, tendon_rgba, ntendon, 4 ) \ + X ( float, tendon_rgba, ntendon, 4 ) \ X ( int, wrap_type, nwrap, 1 ) \ X ( int, wrap_objid, nwrap, 1 ) \ X ( mjtNum, wrap_prm, nwrap, 1 ) \ - XMJV( int, actuator_trntype, nu, 1 ) \ - XMJV( int, actuator_dyntype, nu, 1 ) \ + X ( int, actuator_trntype, nu, 1 ) \ + X ( int, actuator_dyntype, nu, 1 ) \ X ( int, actuator_gaintype, nu, 1 ) \ X ( int, actuator_biastype, nu, 1 ) \ - XMJV( int, actuator_trnid, nu, 2 ) \ - XMJV( int, actuator_actadr, nu, 1 ) \ - XMJV( int, actuator_actnum, nu, 1 ) \ - XMJV( int, actuator_group, nu, 1 ) \ - XMJV( mjtByte, actuator_ctrllimited, nu, 1 ) \ + X ( int, actuator_trnid, nu, 2 ) \ + X ( int, actuator_actadr, nu, 1 ) \ + X ( int, actuator_actnum, nu, 1 ) \ + X ( int, actuator_group, nu, 1 ) \ + X ( mjtByte, actuator_ctrllimited, nu, 1 ) \ X ( mjtByte, actuator_forcelimited, nu, 1 ) \ - XMJV( mjtByte, actuator_actlimited, nu, 1 ) \ + X ( mjtByte, actuator_actlimited, nu, 1 ) \ X ( mjtNum, actuator_dynprm, nu, mjNDYN ) \ X ( mjtNum, actuator_gainprm, nu, mjNGAIN ) \ X ( mjtNum, actuator_biasprm, nu, mjNBIAS ) \ X ( mjtByte, actuator_actearly, nu, 1 ) \ - XMJV( mjtNum, actuator_ctrlrange, nu, 2 ) \ + X ( mjtNum, actuator_ctrlrange, nu, 2 ) \ X ( mjtNum, actuator_forcerange, nu, 2 ) \ - XMJV( mjtNum, actuator_actrange, nu, 2 ) \ + X ( mjtNum, actuator_actrange, nu, 2 ) \ X ( mjtNum, actuator_gear, nu, 6 ) \ - XMJV( mjtNum, actuator_cranklength, nu, 1 ) \ + X ( mjtNum, actuator_cranklength, nu, 1 ) \ X ( mjtNum, actuator_acc0, nu, 1 ) \ X ( mjtNum, actuator_length0, nu, 1 ) \ X ( mjtNum, actuator_lengthrange, nu, 2 ) \ X ( mjtNum, actuator_user, nu, MJ_M(nuser_actuator) ) \ X ( int, actuator_plugin, nu, 1 ) \ - XMJV( int, sensor_type, nsensor, 1 ) \ + X ( int, sensor_type, nsensor, 1 ) \ X ( int, sensor_datatype, nsensor, 1 ) \ X ( int, sensor_needstage, nsensor, 1 ) \ X ( int, sensor_objtype, nsensor, 1 ) \ - XMJV( int, sensor_objid, nsensor, 1 ) \ + X ( int, sensor_objid, nsensor, 1 ) \ X ( int, sensor_reftype, nsensor, 1 ) \ X ( int, sensor_refid, nsensor, 1 ) \ X ( int, sensor_dim, nsensor, 1 ) \ - XMJV( int, sensor_adr, nsensor, 1 ) \ + X ( int, sensor_adr, nsensor, 1 ) \ X ( mjtNum, sensor_cutoff, nsensor, 1 ) \ X ( mjtNum, sensor_noise, nsensor, 1 ) \ X ( mjtNum, sensor_user, nsensor, MJ_M(nuser_sensor) ) \ @@ -561,12 +561,12 @@ X ( mjtNum, key_mpos, nkey, MJ_M(nmocap)*3 ) \ X ( mjtNum, key_mquat, nkey, MJ_M(nmocap)*4 ) \ X ( mjtNum, key_ctrl, nkey, MJ_M(nu) ) \ - XMJV( int, name_bodyadr, nbody, 1 ) \ - XMJV( int, name_jntadr, njnt, 1 ) \ - XMJV( int, name_geomadr, ngeom, 1 ) \ - XMJV( int, name_siteadr, nsite, 1 ) \ - XMJV( int, name_camadr, ncam, 1 ) \ - XMJV( int, name_lightadr, nlight, 1 ) \ + X ( int, name_bodyadr, nbody, 1 ) \ + X ( int, name_jntadr, njnt, 1 ) \ + X ( int, name_geomadr, ngeom, 1 ) \ + X ( int, name_siteadr, nsite, 1 ) \ + X ( int, name_camadr, ncam, 1 ) \ + X ( int, name_lightadr, nlight, 1 ) \ X ( int, name_flexadr, nflex, 1 ) \ X ( int, name_meshadr, nmesh, 1 ) \ X ( int, name_skinadr, nskin, 1 ) \ @@ -575,18 +575,18 @@ X ( int, name_matadr, nmat, 1 ) \ X ( int, name_pairadr, npair, 1 ) \ X ( int, name_excludeadr, nexclude, 1 ) \ - XMJV( int, name_eqadr, neq, 1 ) \ - XMJV( int, name_tendonadr, ntendon, 1 ) \ - XMJV( int, name_actuatoradr, nu, 1 ) \ + X ( int, name_eqadr, neq, 1 ) \ + X ( int, name_tendonadr, ntendon, 1 ) \ + X ( int, name_actuatoradr, nu, 1 ) \ X ( int, name_sensoradr, nsensor, 1 ) \ X ( int, name_numericadr, nnumeric, 1 ) \ X ( int, name_textadr, ntext, 1 ) \ X ( int, name_tupleadr, ntuple, 1 ) \ X ( int, name_keyadr, nkey, 1 ) \ X ( int, name_pluginadr, nplugin, 1 ) \ - XMJV( char, names, nnames, 1 ) \ + X ( char, names, nnames, 1 ) \ X ( int, names_map, nnames_map, 1 ) \ - XMJV( char, paths, npaths, 1 ) \ + X ( char, paths, npaths, 1 ) \ //-------------------------------- mjData ---------------------------------------------------------- @@ -596,60 +596,60 @@ // pointer fields of mjData -// XMJV means that the field is required to construct mjvScene -// (by default we define XMJV to be the same as X) +// XNV means that the field is not required to construct mjvScene +// (by default we define XNV to be the same as X) #define MJDATA_POINTERS \ X ( mjtNum, qpos, nq, 1 ) \ X ( mjtNum, qvel, nv, 1 ) \ - XMJV( mjtNum, act, na, 1 ) \ + X ( mjtNum, act, na, 1 ) \ X ( mjtNum, qacc_warmstart, nv, 1 ) \ X ( mjtNum, plugin_state, npluginstate, 1 ) \ - XMJV( mjtNum, ctrl, nu, 1 ) \ + X ( mjtNum, ctrl, nu, 1 ) \ X ( mjtNum, qfrc_applied, nv, 1 ) \ - XMJV( mjtNum, xfrc_applied, nbody, 6 ) \ - XMJV( mjtByte, eq_active, neq, 1 ) \ + X ( mjtNum, xfrc_applied, nbody, 6 ) \ + X ( mjtByte, eq_active, neq, 1 ) \ X ( mjtNum, mocap_pos, nmocap, 3 ) \ X ( mjtNum, mocap_quat, nmocap, 4 ) \ X ( mjtNum, qacc, nv, 1 ) \ X ( mjtNum, act_dot, na, 1 ) \ X ( mjtNum, userdata, nuserdata, 1 ) \ - XMJV( mjtNum, sensordata, nsensordata, 1 ) \ + X ( mjtNum, sensordata, nsensordata, 1 ) \ X ( int, plugin, nplugin, 1 ) \ X ( uintptr_t, plugin_data, nplugin, 1 ) \ - XMJV( mjtNum, xpos, nbody, 3 ) \ - XMJV( mjtNum, xquat, nbody, 4 ) \ - XMJV( mjtNum, xmat, nbody, 9 ) \ - XMJV( mjtNum, xipos, nbody, 3 ) \ - XMJV( mjtNum, ximat, nbody, 9 ) \ - XMJV( mjtNum, xanchor, njnt, 3 ) \ - XMJV( mjtNum, xaxis, njnt, 3 ) \ - XMJV( mjtNum, geom_xpos, ngeom, 3 ) \ - XMJV( mjtNum, geom_xmat, ngeom, 9 ) \ - XMJV( mjtNum, site_xpos, nsite, 3 ) \ - XMJV( mjtNum, site_xmat, nsite, 9 ) \ - XMJV( mjtNum, cam_xpos, ncam, 3 ) \ - XMJV( mjtNum, cam_xmat, ncam, 9 ) \ - XMJV( mjtNum, light_xpos, nlight, 3 ) \ - XMJV( mjtNum, light_xdir, nlight, 3 ) \ - XMJV( mjtNum, subtree_com, nbody, 3 ) \ + X ( mjtNum, xpos, nbody, 3 ) \ + X ( mjtNum, xquat, nbody, 4 ) \ + X ( mjtNum, xmat, nbody, 9 ) \ + X ( mjtNum, xipos, nbody, 3 ) \ + X ( mjtNum, ximat, nbody, 9 ) \ + X ( mjtNum, xanchor, njnt, 3 ) \ + X ( mjtNum, xaxis, njnt, 3 ) \ + X ( mjtNum, geom_xpos, ngeom, 3 ) \ + X ( mjtNum, geom_xmat, ngeom, 9 ) \ + X ( mjtNum, site_xpos, nsite, 3 ) \ + X ( mjtNum, site_xmat, nsite, 9 ) \ + X ( mjtNum, cam_xpos, ncam, 3 ) \ + X ( mjtNum, cam_xmat, ncam, 9 ) \ + X ( mjtNum, light_xpos, nlight, 3 ) \ + X ( mjtNum, light_xdir, nlight, 3 ) \ + X ( mjtNum, subtree_com, nbody, 3 ) \ X ( mjtNum, cdof, nv, 6 ) \ X ( mjtNum, cinert, nbody, 10 ) \ - XMJV( mjtNum, flexvert_xpos, nflexvert, 3 ) \ + X ( mjtNum, flexvert_xpos, nflexvert, 3 ) \ X ( mjtNum, flexelem_aabb, nflexelem, 6 ) \ X ( int, flexedge_J_rownnz, nflexedge, 1 ) \ X ( int, flexedge_J_rowadr, nflexedge, 1 ) \ X ( int, flexedge_J_colind, nflexedge, MJ_M(nv) ) \ X ( mjtNum, flexedge_J, nflexedge, MJ_M(nv) ) \ X ( mjtNum, flexedge_length, nflexedge, 1 ) \ - XMJV( int, ten_wrapadr, ntendon, 1 ) \ - XMJV( int, ten_wrapnum, ntendon, 1 ) \ + X ( int, ten_wrapadr, ntendon, 1 ) \ + X ( int, ten_wrapnum, ntendon, 1 ) \ X ( int, ten_J_rownnz, ntendon, 1 ) \ X ( int, ten_J_rowadr, ntendon, 1 ) \ X ( int, ten_J_colind, ntendon, MJ_M(nv) ) \ - XMJV( mjtNum, ten_length, ntendon, 1 ) \ + X ( mjtNum, ten_length, ntendon, 1 ) \ X ( mjtNum, ten_J, ntendon, MJ_M(nv) ) \ - XMJV( int, wrap_obj, nwrap, 2 ) \ - XMJV( mjtNum, wrap_xpos, nwrap, 6 ) \ + X ( int, wrap_obj, nwrap, 2 ) \ + X ( mjtNum, wrap_xpos, nwrap, 6 ) \ X ( mjtNum, actuator_length, nu, 1 ) \ X ( int, moment_rownnz, nu, 1 ) \ X ( int, moment_rowadr, nu, 1 ) \ @@ -660,8 +660,8 @@ XNV ( mjtNum, M, nC, 1 ) \ XNV ( mjtNum, qLD, nC, 1 ) \ X ( mjtNum, qLDiagInv, nv, 1 ) \ - XMJV( mjtNum, bvh_aabb_dyn, nbvhdynamic, 6 ) \ - XMJV( mjtByte, bvh_active, nbvh, 1 ) \ + X ( mjtNum, bvh_aabb_dyn, nbvhdynamic, 6 ) \ + X ( mjtByte, bvh_active, nbvh, 1 ) \ X ( mjtNum, flexedge_velocity, nflexedge, 1 ) \ X ( mjtNum, ten_velocity, ntendon, 1 ) \ X ( mjtNum, actuator_velocity, nu, 1 ) \ @@ -834,12 +834,6 @@ X( mjtNum, solver_fwdinv, 2, 1 ) \ X( mjtNum, energy, 2, 1 ) - -// alias XMJV to be the same as X -// to obtain only X macros for fields that are relevant for mjvScene creation, -// redefine X to expand to nothing, and XMJV to do what's required -#define XMJV X - // alias XNV to be the same as X // to obtain only X macros for fields that are relevant for mjvScene creation, // redefine XNV to expand to nothing diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index 8d8cb8c2..6c715427 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -625,20 +625,10 @@ MJAPI void mjv_alignToCamera(mjtNum res[3], const mjtNum vec[3], const mjtNum fo MJAPI void mjv_moveCamera(const mjModel* m, int action, mjtNum reldx, mjtNum reldy, const mjvScene* scn, mjvCamera* cam); -// Move camera with mouse given a scene state; action is mjtMouse. -MJAPI void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvCamera* cam); - // Move perturb object with mouse; action is mjtMouse. MJAPI void mjv_movePerturb(const mjModel* m, const mjData* d, int action, mjtNum reldx, mjtNum reldy, const mjvScene* scn, mjvPerturb* pert); -// Move perturb object with mouse given a scene state; action is mjtMouse. -MJAPI void mjv_movePerturbFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvPerturb* pert); - // Move model with mouse; action is mjtMouse. MJAPI void mjv_moveModel(const mjModel* m, int action, mjtNum reldx, mjtNum reldy, const mjtNum roomup[3], mjvScene* scn); @@ -695,28 +685,9 @@ MJAPI void mjv_freeScene(mjvScene* scn); MJAPI void mjv_updateScene(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, mjvCamera* cam, int catmask, mjvScene* scn); -// Update entire scene from a scene state, return the number of new mjWARN_VGEOMFULL warnings. -MJAPI int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt, - const mjvPerturb* pert, mjvCamera* cam, int catmask, - mjvScene* scn); - // Copy mjModel, skip large arrays not required for abstract visualization. MJAPI void mjv_copyModel(mjModel* dest, const mjModel* src); -// Set default scene state. -MJAPI void mjv_defaultSceneState(mjvSceneState* scnstate); - -// Allocate resources and initialize a scene state object. -MJAPI void mjv_makeSceneState(const mjModel* m, const mjData* d, - mjvSceneState* scnstate, int maxgeom); - -// Free scene state. -MJAPI void mjv_freeSceneState(mjvSceneState* scnstate); - -// Update a scene state from model and data. -MJAPI void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt, - mjvSceneState* scnstate); - // Add geoms from selected categories. MJAPI void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, int catmask, mjvScene* scn); diff --git a/python/mujoco/introspect/functions.py b/python/mujoco/introspect/functions.py index 1f495c03..cf85a819 100644 --- a/python/mujoco/introspect/functions.py +++ b/python/mujoco/introspect/functions.py @@ -4011,44 +4011,6 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ ), doc='Move camera with mouse; action is mjtMouse.', )), - ('mjv_moveCameraFromState', - FunctionDecl( - name='mjv_moveCameraFromState', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState', is_const=True), - ), - ), - FunctionParameterDecl( - name='action', - type=ValueType(name='int'), - ), - FunctionParameterDecl( - name='reldx', - type=ValueType(name='mjtNum'), - ), - FunctionParameterDecl( - name='reldy', - type=ValueType(name='mjtNum'), - ), - FunctionParameterDecl( - name='scn', - type=PointerType( - inner_type=ValueType(name='mjvScene', is_const=True), - ), - ), - FunctionParameterDecl( - name='cam', - type=PointerType( - inner_type=ValueType(name='mjvCamera'), - ), - ), - ), - doc='Move camera with mouse given a scene state; action is mjtMouse.', - )), ('mjv_movePerturb', FunctionDecl( name='mjv_movePerturb', @@ -4093,44 +4055,6 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ ), doc='Move perturb object with mouse; action is mjtMouse.', )), - ('mjv_movePerturbFromState', - FunctionDecl( - name='mjv_movePerturbFromState', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState', is_const=True), - ), - ), - FunctionParameterDecl( - name='action', - type=ValueType(name='int'), - ), - FunctionParameterDecl( - name='reldx', - type=ValueType(name='mjtNum'), - ), - FunctionParameterDecl( - name='reldy', - type=ValueType(name='mjtNum'), - ), - FunctionParameterDecl( - name='scn', - type=PointerType( - inner_type=ValueType(name='mjvScene', is_const=True), - ), - ), - FunctionParameterDecl( - name='pert', - type=PointerType( - inner_type=ValueType(name='mjvPerturb'), - ), - ), - ), - doc='Move perturb object with mouse given a scene state; action is mjtMouse.', # pylint: disable=line-too-long - )), ('mjv_moveModel', FunctionDecl( name='mjv_moveModel', @@ -4560,48 +4484,6 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ ), doc='Update entire scene given model state.', )), - ('mjv_updateSceneFromState', - FunctionDecl( - name='mjv_updateSceneFromState', - return_type=ValueType(name='int'), - parameters=( - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState', is_const=True), - ), - ), - FunctionParameterDecl( - name='opt', - type=PointerType( - inner_type=ValueType(name='mjvOption', is_const=True), - ), - ), - FunctionParameterDecl( - name='pert', - type=PointerType( - inner_type=ValueType(name='mjvPerturb', is_const=True), - ), - ), - FunctionParameterDecl( - name='cam', - type=PointerType( - inner_type=ValueType(name='mjvCamera'), - ), - ), - FunctionParameterDecl( - name='catmask', - type=ValueType(name='int'), - ), - FunctionParameterDecl( - name='scn', - type=PointerType( - inner_type=ValueType(name='mjvScene'), - ), - ), - ), - doc='Update entire scene from a scene state, return the number of new mjWARN_VGEOMFULL warnings.', # pylint: disable=line-too-long - )), ('mjv_copyModel', FunctionDecl( name='mjv_copyModel', @@ -4622,96 +4504,6 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ ), doc='Copy mjModel, skip large arrays not required for abstract visualization.', # pylint: disable=line-too-long )), - ('mjv_defaultSceneState', - FunctionDecl( - name='mjv_defaultSceneState', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState'), - ), - ), - ), - doc='Set default scene state.', - )), - ('mjv_makeSceneState', - FunctionDecl( - name='mjv_makeSceneState', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='m', - type=PointerType( - inner_type=ValueType(name='mjModel', is_const=True), - ), - ), - FunctionParameterDecl( - name='d', - type=PointerType( - inner_type=ValueType(name='mjData', is_const=True), - ), - ), - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState'), - ), - ), - FunctionParameterDecl( - name='maxgeom', - type=ValueType(name='int'), - ), - ), - doc='Allocate resources and initialize a scene state object.', - )), - ('mjv_freeSceneState', - FunctionDecl( - name='mjv_freeSceneState', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState'), - ), - ), - ), - doc='Free scene state.', - )), - ('mjv_updateSceneState', - FunctionDecl( - name='mjv_updateSceneState', - return_type=ValueType(name='void'), - parameters=( - FunctionParameterDecl( - name='m', - type=PointerType( - inner_type=ValueType(name='mjModel', is_const=True), - ), - ), - FunctionParameterDecl( - name='d', - type=PointerType( - inner_type=ValueType(name='mjData'), - ), - ), - FunctionParameterDecl( - name='opt', - type=PointerType( - inner_type=ValueType(name='mjvOption', is_const=True), - ), - ), - FunctionParameterDecl( - name='scnstate', - type=PointerType( - inner_type=ValueType(name='mjvSceneState'), - ), - ), - ), - doc='Update a scene state from model and data.', - )), ('mjv_addGeoms', FunctionDecl( name='mjv_addGeoms', diff --git a/python/mujoco/introspect/structs.py b/python/mujoco/introspect/structs.py index 4aac02a9..379cdc84 100644 --- a/python/mujoco/introspect/structs.py +++ b/python/mujoco/introspect/structs.py @@ -7345,1651 +7345,6 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), ), )), - ('mjvSceneState', - StructDecl( - name='mjvSceneState', - declname='struct mjvSceneState_', - fields=( - StructFieldDecl( - name='nbuffer', - type=ValueType(name='int'), - doc='size of the buffer in bytes', - ), - StructFieldDecl( - name='buffer', - type=PointerType( - inner_type=ValueType(name='void'), - ), - doc='heap-allocated memory for all arrays in this struct', - ), - StructFieldDecl( - name='maxgeom', - type=ValueType(name='int'), - doc='maximum number of mjvGeom supported by this state object', - ), - StructFieldDecl( - name='scratch', - type=ValueType(name='mjvScene'), - doc='scratch space for vis geoms inserted by the user and plugins', # pylint: disable=line-too-long - ), - StructFieldDecl( - name='model', - type=AnonymousStructDecl( - fields=( - StructFieldDecl( - name='nv', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nu', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='na', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nbody', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nbvh', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nbvhstatic', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='njnt', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='ngeom', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nsite', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='ncam', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nlight', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nmesh', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nskin', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nflex', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nflexvert', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nflextexcoord', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nskinvert', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nskinface', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nskinbone', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nskinbonevert', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nmat', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='neq', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='ntendon', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='ntree', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nwrap', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nsensor', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nnames', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='npaths', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nsensordata', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='narena', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='opt', - type=ValueType(name='mjOption'), - doc='', - ), - StructFieldDecl( - name='vis', - type=ValueType(name='mjVisual'), - doc='', - ), - StructFieldDecl( - name='stat', - type=ValueType(name='mjStatistic'), - doc='', - ), - StructFieldDecl( - name='body_parentid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_rootid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_weldid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_mocapid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_jntnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_jntadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_dofnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_dofadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_geomnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_geomadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_iquat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='body_mass', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='body_inertia', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='body_bvhadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='body_bvhnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='bvh_depth', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='bvh_child', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='bvh_nodeid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='bvh_aabb', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='jnt_type', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='jnt_bodyid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='jnt_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_type', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_bodyid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_contype', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_conaffinity', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_dataid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_matid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='geom_size', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='geom_aabb', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='geom_rbound', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='geom_rgba', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='site_type', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='site_bodyid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='site_matid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='site_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='site_size', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='site_rgba', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='cam_orthographic', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='cam_fovy', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='cam_ipd', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='cam_resolution', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='cam_sensorsize', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='cam_intrinsic', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_directional', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='light_castshadow', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='light_bulbradius', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_intensity', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_range', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_active', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='light_attenuation', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_cutoff', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_exponent', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_ambient', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_diffuse', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='light_specular', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='flex_flatskin', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='flex_dim', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_matid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_interp', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_nodeadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_nodenum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_nodebodyid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_vertadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_vertnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_elem', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_elemtexcoord', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_elemlayer', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_elemadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_elemnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_elemdataadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_shell', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_shellnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_shelldataadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_texcoordadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_bvhadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_bvhnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flex_centered', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='flex_node', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='flex_radius', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='flex_rgba', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='flex_texcoord', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='hfield_pathadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mesh_bvhadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mesh_bvhnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mesh_texcoordadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mesh_graphadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mesh_pathadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_matid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_rgba', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='skin_inflate', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='skin_vertadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_vertnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_texcoordadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_faceadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_facenum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_boneadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonenum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_vert', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='skin_face', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonevertadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonevertnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonebindpos', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonebindquat', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonebodyid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonevertid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='skin_bonevertweight', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='skin_pathadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='tex_pathadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mat_texid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='mat_texuniform', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='mat_texrepeat', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_emission', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_specular', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_shininess', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_reflectance', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_metallic', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_roughness', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='mat_rgba', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='eq_type', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='eq_obj1id', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='eq_obj2id', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='eq_objtype', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='eq_data', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_num', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_matid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_limited', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_actfrclimited', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_width', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_range', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_actfrcrange', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_stiffness', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_damping', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_frictionloss', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_lengthspring', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_rgba', - type=PointerType( - inner_type=ValueType(name='float'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_trntype', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_dyntype', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_trnid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_actadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_actnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_group', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_ctrllimited', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_actlimited', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_ctrlrange', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_actrange', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='actuator_cranklength', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='sensor_type', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='sensor_objid', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='sensor_adr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_bodyadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_jntadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_geomadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_siteadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_camadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_lightadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_eqadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_tendonadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='name_actuatoradr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='names', - type=PointerType( - inner_type=ValueType(name='char'), - ), - doc='', - ), - StructFieldDecl( - name='paths', - type=PointerType( - inner_type=ValueType(name='char'), - ), - doc='', - ), - ), - ), - doc='', - ), - StructFieldDecl( - name='data', - type=AnonymousStructDecl( - fields=( - StructFieldDecl( - name='warning', - type=ArrayType( - inner_type=ValueType(name='mjWarningStat'), - extents=(8,), - ), - doc='', - ), - StructFieldDecl( - name='nefc', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='ncon', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='nisland', - type=ValueType(name='int'), - doc='', - ), - StructFieldDecl( - name='time', - type=ValueType(name='mjtNum'), - doc='', - ), - StructFieldDecl( - name='act', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='ctrl', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xfrc_applied', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='eq_active', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='sensordata', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xquat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xmat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xipos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='ximat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xanchor', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='xaxis', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='geom_xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='geom_xmat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='site_xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='site_xmat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='cam_xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='cam_xmat', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='light_xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='light_xdir', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='subtree_com', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='ten_wrapadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='ten_wrapnum', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='wrap_obj', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='ten_length', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='wrap_xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='bvh_aabb_dyn', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='bvh_active', - type=PointerType( - inner_type=ValueType(name='mjtByte'), - ), - doc='', - ), - StructFieldDecl( - name='island_dofadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='dof_island', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='efc_island', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='tendon_efcadr', - type=PointerType( - inner_type=ValueType(name='int'), - ), - doc='', - ), - StructFieldDecl( - name='flexvert_xpos', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='contact', - type=PointerType( - inner_type=ValueType(name='mjContact'), - ), - doc='', - ), - StructFieldDecl( - name='efc_force', - type=PointerType( - inner_type=ValueType(name='mjtNum'), - ), - doc='', - ), - StructFieldDecl( - name='arena', - type=PointerType( - inner_type=ValueType(name='void'), - ), - doc='', - ), - ), - ), - doc='', - ), - ), - )), ('mjSDF', StructDecl( name='mjSDF', diff --git a/simulate/simulate.cc b/simulate/simulate.cc index bd255ce3..77db1a04 100644 --- a/simulate/simulate.cc +++ b/simulate/simulate.cc @@ -689,7 +689,7 @@ void UpdateWatch(mj::Simulate* sim, const mjModel* m, const mjData* d) { // make physics section of UI void MakePhysicsSection(mj::Simulate* sim) { - mjOption* opt = sim->is_passive_ ? &sim->scnstate_.model.opt : &sim->m_->opt; + mjOption* opt = sim->is_passive_ ? &sim->m_passive_->opt : &sim->m_->opt; mjuiDef defPhysics[] = { {mjITEM_SECTION, "Physics", mjPRESERVE, nullptr, "AP"}, {mjITEM_SELECT, "Integrator", 2, &(opt->integrator), "Euler\nRK4\nimplicit\nimplicitfast"}, @@ -873,8 +873,8 @@ void MakeRenderingSection(mj::Simulate* sim, const mjModel* m) { // make visualization section of UI void MakeVisualizationSection(mj::Simulate* sim, const mjModel* m) { - mjStatistic* stat = sim->is_passive_ ? &sim->scnstate_.model.stat : &sim->m_->stat; - mjVisual* vis = sim->is_passive_ ? &sim->scnstate_.model.vis : &sim->m_->vis; + mjStatistic* stat = sim->is_passive_ ? &sim->m_passive_->stat : &sim->m_->stat; + mjVisual* vis = sim->is_passive_ ? &sim->m_passive_->vis : &sim->m_->vis; mjuiDef defVisualization[] = { {mjITEM_SECTION, "Visualization", mjPRESERVE, nullptr, "AV"}, @@ -1503,7 +1503,7 @@ void UiEvent(mjuiState* state) { // physics section else if (it && it->sectionid==SECT_PHYSICS && sim->m_) { - mjOption* opt = sim->is_passive_ ? &sim->scnstate_.model.opt : &sim->m_->opt; + mjOption* opt = sim->is_passive_ ? &sim->m_passive_->opt : &sim->m_->opt; // update disable flags in mjOption opt->disableflags = 0; @@ -1765,15 +1765,14 @@ void UiEvent(mjuiState* state) { return; } + // local pointers used below + mjModel* model = sim->is_passive_ ? sim->m_passive_ : sim->m_; + mjData* data = sim->is_passive_ ? sim->d_passive_ : sim->d_; + // 3D scroll - if (state->type==mjEVENT_SCROLL && state->mouserect==3) { + if (state->type==mjEVENT_SCROLL && state->mouserect==3 && model) { // emulate vertical mouse motion = 2% of window height - if (sim->m_ && !sim->is_passive_) { - mjv_moveCamera(sim->m_, mjMOUSE_ZOOM, 0, -zoom_increment*state->sy, &sim->scn, &sim->cam); - } else { - mjv_moveCameraFromState( - &sim->scnstate_, mjMOUSE_ZOOM, 0, -zoom_increment*state->sy, &sim->scn, &sim->cam); - } + mjv_moveCamera(model, mjMOUSE_ZOOM, 0, -zoom_increment*state->sy, &sim->scn, &sim->cam); return; } @@ -1829,25 +1828,11 @@ void UiEvent(mjuiState* state) { // move perturb or camera mjrRect r = state->rect[3]; if (sim->pert.active) { - if (!sim->is_passive_) { - mjv_movePerturb( - sim->m_, sim->d_, action, state->dx / r.height, -state->dy / r.height, - &sim->scn, &sim->pert); - } else { - mjv_movePerturbFromState( - &sim->scnstate_, action, state->dx / r.height, -state->dy / r.height, - &sim->scn, &sim->pert); - } + mjv_movePerturb(model, data, action, state->dx / r.height, -state->dy / r.height, + &sim->scn, &sim->pert); } else { - if (!sim->is_passive_) { - mjv_moveCamera( - sim->m_, action, state->dx / r.height, -state->dy / r.height, - &sim->scn, &sim->cam); - } else { - mjv_moveCameraFromState( - &sim->scnstate_, action, state->dx / r.height, -state->dy / r.height, - &sim->scn, &sim->cam); - } + mjv_moveCamera(model, action, state->dx / r.height, -state->dy / r.height, + &sim->scn, &sim->cam); } return; } @@ -1881,10 +1866,11 @@ Simulate::Simulate(std::unique_ptr platform_ui, platform_ui(std::move(platform_ui)), uistate(this->platform_ui->state()) { mjv_defaultScene(&scn); - mjv_defaultSceneState(&scnstate_); } -// synchronize model and data + +//------------------------- Synchronize render and physics threads --------------------------------- + // operations which require holding the mutex, prevents racing with physics thread void Simulate::Sync() { MutexLock lock(this->mtx); @@ -1947,10 +1933,10 @@ void Simulate::Sync() { if (is_passive_) { // synchronize m_->opt with changes made via the UI -#define X(name) \ - if (IsDifferent(scnstate_.model.opt.name, mjopt_prev_.name)) { \ - pending_.ui_update_physics = true; \ - Copy(m_->opt.name, scnstate_.model.opt.name); \ +#define X(name) \ + if (IsDifferent(m_passive_->opt.name, mjopt_prev_.name)) { \ + pending_.ui_update_physics = true; \ + Copy(m_->opt.name, m_passive_->opt.name); \ } X(timestep); @@ -1984,9 +1970,9 @@ void Simulate::Sync() { #undef X // synchronize number of mjWARN_VGEOMFULL warnings - if (scnstate_.data.warning[mjWARN_VGEOMFULL].number > warn_vgeomfull_prev_) { + if (d_passive_->warning[mjWARN_VGEOMFULL].number > warn_vgeomfull_prev_) { d_->warning[mjWARN_VGEOMFULL].number += - scnstate_.data.warning[mjWARN_VGEOMFULL].number - warn_vgeomfull_prev_; + d_passive_->warning[mjWARN_VGEOMFULL].number - warn_vgeomfull_prev_; } } @@ -2135,25 +2121,19 @@ void Simulate::Sync() { pending_.select = false; } - // update scene + // update scene or sync data from user in passive mode if (!is_passive_) { mjv_updateScene(m_, d_, &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); } else { - mjv_updateSceneState(m_, d_, &this->opt, &scnstate_); + mjv_copyModel(m_passive_, m_); + mjv_copyData(d_passive_, m_passive_, d_); - // append geoms from user_scn to scnstate_ scratch space + // append geoms from user_scn to scratch space if (user_scn) { - int ngeom = user_scn->ngeom; - int maxgeom = scnstate_.scratch.maxgeom - scnstate_.scratch.ngeom; - if (ngeom > maxgeom) { - mj_warning(d_, mjWARN_VGEOMFULL, scnstate_.scratch.maxgeom); - ngeom = maxgeom; - } - if (ngeom > 0) { - std::memcpy(scnstate_.scratch.geoms + scnstate_.scratch.ngeom, - user_scn->geoms, - sizeof(mjvGeom) * ngeom); - scnstate_.scratch.ngeom += ngeom; + user_scn_geoms_.clear(); + user_scn_geoms_.reserve(user_scn->ngeom); + for (int i = 0; i < user_scn->ngeom; ++i) { + user_scn_geoms_.push_back(user_scn->geoms[i]); } } @@ -2169,8 +2149,8 @@ void Simulate::Sync() { Copy(user_scn_flags_prev_, user_scn->flags); } - mjopt_prev_ = scnstate_.model.opt; - warn_vgeomfull_prev_ = scnstate_.data.warning[mjWARN_VGEOMFULL].number; + mjopt_prev_ = m_passive_->opt; + warn_vgeomfull_prev_ = d_passive_->warning[mjWARN_VGEOMFULL].number; } // update settings @@ -2329,15 +2309,8 @@ void Simulate::LoadOnRenderThread() { } } - // re-create scene and context + // re-create scene mjv_makeScene(this->m_, &this->scn, kMaxGeom); - if (this->is_passive_) { - mjopt_prev_ = m_->opt; - opt_prev_ = opt; - cam_prev_ = cam; - warn_vgeomfull_prev_ = d_->warning[mjWARN_VGEOMFULL].number; - mjv_makeSceneState(this->m_, this->d_, &this->scnstate_, kMaxGeom); - } this->platform_ui->RefreshMjrContext(this->m_, 50*(this->font+1)); UiModify(&this->ui0, &this->uistate, &this->platform_ui->mjr_context()); @@ -2366,12 +2339,18 @@ void Simulate::LoadOnRenderThread() { mju::strcpy_arr(this->previous_filename, this->filename); } - // update scene + // update scene in managed mode, in passive mode copy data from user (update in RenderLoop) if (!is_passive_) { - mjv_updateScene(this->m_, this->d_, - &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); + mjv_updateScene(this->m_, this->d_, &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); } else { - mjv_updateSceneState(this->m_, this->d_, &this->opt, &this->scnstate_); + mjopt_prev_ = m_->opt; + opt_prev_ = opt; + cam_prev_ = cam; + warn_vgeomfull_prev_ = d_->warning[mjWARN_VGEOMFULL].number; + + // full copy on init + m_passive_ = mj_copyModel(nullptr, m_); + d_passive_ = mj_copyData(nullptr, m_passive_, d_); } // set window title to model name @@ -2793,11 +2772,22 @@ void Simulate::RenderLoop() { } // update scene, doing a full sync if in fully managed mode - if (!this->is_passive_) { + if (!is_passive_) { Sync(); - } else { - scnstate_.data.warning[mjWARN_VGEOMFULL].number += mjv_updateSceneFromState( - &scnstate_, &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); + } else if (m_passive_ && d_passive_) { + // the user has called Sync() in their code + mjv_updateScene(m_passive_, d_passive_, + &this->opt, &this->pert, &this->cam, mjCAT_ALL, &this->scn); + + // add user geoms to scene + int nusergeom = user_scn_geoms_.size(); + int ngeom = std::min(nusergeom, this->scn.maxgeom - this->scn.ngeom); + if (ngeom < nusergeom) { + mj_warning(d_passive_, mjWARN_VGEOMFULL, this->scn.maxgeom); + } + std::memcpy(this->scn.geoms + this->scn.ngeom, user_scn_geoms_.data(), + ngeom * sizeof(mjvGeom)); + this->scn.ngeom += ngeom; } } // MutexLock (unblocks simulation thread) @@ -2818,7 +2808,8 @@ void Simulate::RenderLoop() { const MutexLock lock(this->mtx); mjv_freeScene(&this->scn); if (is_passive_) { - mjv_freeSceneState(&scnstate_); + mj_deleteData(d_passive_); + mj_deleteModel(m_passive_); } this->exitrequest.store(2); diff --git a/simulate/simulate.h b/simulate/simulate.h index 717d1871..7e20d3c5 100644 --- a/simulate/simulate.h +++ b/simulate/simulate.h @@ -130,7 +130,12 @@ class Simulate { std::vector ctrl_; std::vector ctrl_prev_; - mjvSceneState scnstate_; + // in passive mode the user owns m_ and d_, these "passive" instances are + // owned by Simulate, updated from the user by the Sync() method + mjModel* m_passive_; + mjData* d_passive_; + std::vector user_scn_geoms_; + mjOption mjopt_prev_; mjvOption opt_prev_; mjvCamera cam_prev_; diff --git a/src/engine/CMakeLists.txt b/src/engine/CMakeLists.txt index 8957c4c6..ea4b2dd6 100644 --- a/src/engine/CMakeLists.txt +++ b/src/engine/CMakeLists.txt @@ -83,8 +83,6 @@ set(MUJOCO_ENGINE_SRCS engine_vis_init.h engine_vis_interact.c engine_vis_interact.h - engine_vis_state.c - engine_vis_state.h engine_vis_visualize.c engine_vis_visualize.h ) diff --git a/src/engine/engine_vis_state.c b/src/engine/engine_vis_state.c deleted file mode 100644 index ff305f05..00000000 --- a/src/engine/engine_vis_state.c +++ /dev/null @@ -1,409 +0,0 @@ -// Copyright 2023 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "engine/engine_vis_state.h" - -#include - -#include -#include -#include -#include -#include -#include "engine/engine_core_constraint.h" -#include "engine/engine_plugin.h" -#include "engine/engine_support.h" -#include "engine/engine_util_errmem.h" -#include "engine/engine_vis_init.h" -#include "engine/engine_vis_interact.h" -#include "engine/engine_vis_visualize.h" - -#ifdef MEMORY_SANITIZER - #include -#endif - -// this source file needs to treat XMJV differently from other X macros -#undef XMJV - - - -// round size up to multiples of 64-byte cache lines -static inline size_t roundUpToCacheLine(size_t n) { - return 64 * ((n / 64) + (n % 64 ? 1 : 0)); -} - - - -// set default scene -void mjv_defaultSceneState(mjvSceneState* scnstate) { - memset(scnstate, 0, sizeof(mjvSceneState)); - mjv_defaultScene(&scnstate->scratch); -} - - - -// allocate and init scene state -void mjv_makeSceneState(const mjModel* m, const mjData* d, mjvSceneState* scnstate, int maxgeom) { - mjv_freeScene(&scnstate->scratch); - mju_free(scnstate->buffer); - -#ifdef MEMORY_SANITIZER - __msan_allocated_memory(scnstate, sizeof(mjvSceneState)); - mjv_defaultScene(&scnstate->scratch); -#endif - - scnstate->nbuffer = 0; - scnstate->maxgeom = maxgeom; - -#define X(var) -#define XMJV(var) scnstate->model.var = m->var; - MJMODEL_INTS -#undef XMJV -#undef X - -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) \ - scnstate->nbuffer += roundUpToCacheLine(sizeof(dtype) * m->dim0 * dim1); - MJMODEL_POINTERS -#undef XMJV -#undef X - -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) \ - scnstate->nbuffer += roundUpToCacheLine(sizeof(dtype) * m->dim0 * dim1); - MJDATA_POINTERS -#undef XMJV -#undef X - - // create an arena in the scnstate, to allow visualization code to use the stack. - // TODO: Consider allocating way less than narena, since stack allocations in - // visualization code are much smaller than the arena space required by the model, - // typically. - scnstate->nbuffer += roundUpToCacheLine(m->narena); - // buffer space required for contacts - int condimmax = mj_isPyramidal(m) ? 10 : 6; - scnstate->nbuffer += roundUpToCacheLine(sizeof(*d->contact) * maxgeom); - scnstate->nbuffer += roundUpToCacheLine(sizeof(*d->efc_force) * maxgeom * condimmax); - - // buffer space required for islands - scnstate->nbuffer += roundUpToCacheLine(sizeof(*d->island_dofadr) * m->ntree); - scnstate->nbuffer += roundUpToCacheLine(sizeof(*d->dof_island) * m->nv); - scnstate->nbuffer += roundUpToCacheLine(sizeof(*d->efc_island) * maxgeom * condimmax); - scnstate->nbuffer += roundUpToCacheLine(sizeof(*d->tendon_efcadr) * m->ntendon); - - scnstate->buffer = mju_malloc(scnstate->nbuffer); - - char* ptr = scnstate->buffer; - -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) \ - scnstate->model.var = (dtype*)ptr; \ - ptr += roundUpToCacheLine(sizeof(dtype) * m->dim0 * dim1); - MJMODEL_POINTERS -#undef XMJV -#undef X - -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) \ - scnstate->data.var = (dtype*)ptr; \ - ptr += roundUpToCacheLine(sizeof(dtype) * m->dim0 * dim1); - MJDATA_POINTERS -#undef XMJV -#undef X - - scnstate->model.narena = m->narena; - scnstate->data.arena = (void*)ptr; - ptr += roundUpToCacheLine(m->narena); - - scnstate->data.contact = (mjContact*)ptr; - ptr += roundUpToCacheLine(sizeof(*scnstate->data.contact) * scnstate->maxgeom); - - scnstate->data.efc_force = (mjtNum*)ptr; - ptr += roundUpToCacheLine(sizeof(*scnstate->data.efc_force) * scnstate->maxgeom * condimmax); - - scnstate->data.island_dofadr = (int*)ptr; - ptr += roundUpToCacheLine(sizeof(*scnstate->data.island_dofadr) * scnstate->model.ntree); - - scnstate->data.dof_island = (int*)ptr; - ptr += roundUpToCacheLine(sizeof(*scnstate->data.dof_island) * scnstate->model.nv); - - scnstate->data.efc_island = (int*)ptr; - ptr += roundUpToCacheLine(sizeof(*scnstate->data.efc_island) * scnstate->maxgeom * condimmax); - - scnstate->data.tendon_efcadr = (int*)ptr; - ptr += roundUpToCacheLine(sizeof(*scnstate->data.tendon_efcadr) * m->ntendon); - - // should not occur - if (ptr - (char*)scnstate->buffer != scnstate->nbuffer) { - mjERROR("mjvSceneState buffer is not fully used"); - } - - mjv_makeScene(m, &scnstate->scratch, maxgeom); -} - - - -// free scene state -void mjv_freeSceneState(mjvSceneState* scnstate) { - mjv_freeScene(&scnstate->scratch); - mju_free(scnstate->buffer); - mjv_defaultSceneState(scnstate); -} - - - -// shallow copy scene state into model and data for use with mjv functions -void mjv_assignFromSceneState(const mjvSceneState* scnstate, mjModel* m, mjData* d) { - if (m) { - memset(m, 0, sizeof(mjModel)); - -#ifdef MEMORY_SANITIZER - // Tell msan to treat the entire buffer as uninitialized - __msan_allocated_memory(m, sizeof(mjModel)); -#endif - -#define X(var) -#define XMJV(var) m->var = scnstate->model.var; - MJMODEL_INTS -#undef XMJV -#undef X - - m->opt = scnstate->model.opt; - m->vis = scnstate->model.vis; - m->stat = scnstate->model.stat; - m->narena = scnstate->model.narena; - -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) m->var = scnstate->model.var; - MJMODEL_POINTERS -#undef XMJV -#undef X - } - - if (d) { - memset(d, 0, sizeof(mjData)); - -#ifdef MEMORY_SANITIZER - // Tell msan to treat the entire buffer as uninitialized - __msan_allocated_memory(d, sizeof(mjData)); -#endif - - memcpy(d->warning, scnstate->data.warning, sizeof(d->warning)); - d->threadpool = 0; - d->nefc = scnstate->data.nefc; - d->ncon = scnstate->data.ncon; - d->nisland = scnstate->data.nisland; - d->time = scnstate->data.time; - d->narena = scnstate->model.narena; - d->arena = scnstate->data.arena; - d->parena = 0; - d->pbase = 0; - d->pstack = 0; - - #define X(dtype, var, dim0, dim1) - #define XMJV(dtype, var, dim0, dim1) d->var = scnstate->data.var; - MJDATA_POINTERS - #undef XMJV - #undef X - - d->contact = scnstate->data.contact; - d->efc_force = scnstate->data.efc_force; - d->island_dofadr = scnstate->data.island_dofadr; - d->dof_island = scnstate->data.dof_island; - d->efc_island = scnstate->data.efc_island; - d->tendon_efcadr = scnstate->data.tendon_efcadr; - } -} - - - -// update entire scene from a scene state, return the number of new mjWARN_VGEOMFULL warnings -int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt, - const mjvPerturb* pert, mjvCamera* cam, int catmask, mjvScene* scn) { - // shallow-copy scnstate pointers into mjModel and mjData - mjModel m; - mjData d; - mjv_assignFromSceneState(scnstate, &m, &d); - - // save the number of mjWARN_VGEOMFULL warnings before the scene update - int warning_start = d.warning[mjWARN_VGEOMFULL].number; - - // copy mjvGeoms added by plugins - int nplugingeom = scnstate->scratch.ngeom; - if (nplugingeom > scn->maxgeom) { - mj_warning(&d, mjWARN_VGEOMFULL, scn->maxgeom); - scn->ngeom = scn->maxgeom; - } else { - scn->ngeom = nplugingeom; - } - memcpy(scn->geoms, scnstate->scratch.geoms, sizeof(mjvGeom) * scn->ngeom); - - // add all categories - mjv_addGeoms(&m, &d, opt, pert, catmask, scn); - - // update camera - mjv_updateCamera(&m, &d, cam, scn); - - // add lights - mjv_makeLights(&m, &d, scn); - - // update flexes - if (opt->flags[mjVIS_FLEXVERT] || opt->flags[mjVIS_FLEXEDGE] || - opt->flags[mjVIS_FLEXFACE] || opt->flags[mjVIS_FLEXSKIN]) { - mjv_updateActiveFlex(&m, &d, scn, opt); - } - - // update skins - if (opt->flags[mjVIS_SKIN]) { - mjv_updateActiveSkin(&m, &d, scn, opt); - } - - // return the number of new mjWARN_VGEOMFULL warnings generated - return d.warning[mjWARN_VGEOMFULL].number - warning_start; -} - - - -// update a scene state from model and data -void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt, - mjvSceneState* scnstate) { - // Check that mjModel sizes haven't changed. -#define X(var) -#define XMJV(var) \ - if (scnstate->model.var != m->var) { \ - mjERROR("m->%s changed: %d vs %d", #var, scnstate->model.var, m->var); \ - } - MJMODEL_INTS -#undef XMJV -#undef X - - // Update plugin visualization cache. - scnstate->scratch.ngeom = 0; - if (m->nplugin) { - const int nslot = mjp_pluginCount(); - // iterate over plugins, call visualize if defined - for (int i=0; i < m->nplugin; i++) { - const int slot = m->plugin[i]; - const mjpPlugin* plugin = mjp_getPluginAtSlotUnsafe(slot, nslot); - if (!plugin) { - mjERROR("invalid plugin slot: %d", slot); - } - if (plugin->visualize) { - plugin->visualize(m, d, opt, &scnstate->scratch, i); - } - } - } - - // Copy variable-sized arrays in mjModel. -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) \ - memcpy(scnstate->model.var, m->var, sizeof(dtype) * m->dim0 * dim1); - MJMODEL_POINTERS -#undef XMJV -#undef X - - scnstate->model.opt = m->opt; - scnstate->model.vis = m->vis; - scnstate->model.stat = m->stat; - - // Copy mjData variables. - memcpy(scnstate->data.warning, d->warning, sizeof(d->warning)); - scnstate->data.time = d->time; - - // Copy variable-sized arrays in mjData. -#define X(dtype, var, dim0, dim1) -#define XMJV(dtype, var, dim0, dim1) \ - memcpy(scnstate->data.var, d->var, sizeof(dtype) * m->dim0 * dim1); - MJDATA_POINTERS -#undef XMJV -#undef X - - // Copy contacts. - { - if (d->ncon > scnstate->maxgeom) { - mj_warning(d, mjWARN_VGEOMFULL, scnstate->maxgeom); - scnstate->data.ncon = scnstate->maxgeom; - } else { - scnstate->data.ncon = d->ncon; - } - memcpy(scnstate->data.contact, d->contact, sizeof(*d->contact) * scnstate->data.ncon); - } - - // Copy only the entries in efc_force and efc_island that correspond to contacts. - { - scnstate->data.nefc = 0; - for (int i = 0; i < scnstate->data.ncon; ++i) { - const mjContact* con = &d->contact[i]; - scnstate->data.nefc += con->dim; - } - scnstate->data.nefc += scnstate->model.ntendon; - - int efc_address = 0; - int ispyramid = mj_isPyramidal(m); - for (int i = 0; i < scnstate->data.ncon; ++i) { - mjContact* con = &scnstate->data.contact[i]; - int dim = con->dim; - if (ispyramid && dim > 1){ - dim = 2*(dim - 1); - } - for (int j = 0; j < dim; ++j) { - scnstate->data.efc_force[efc_address + j] = d->efc_force[con->efc_address + j]; - if (d->nisland) { - scnstate->data.efc_island[efc_address + j] = d->efc_island[con->efc_address + j]; - } - } - con->efc_address = efc_address; - efc_address += dim; - } - if (d->nisland) { - for (int i = 0; i < scnstate->model.ntendon; ++i) { - int efcadr = d->tendon_efcadr[i]; - if (efcadr != -1) { - scnstate->data.efc_island[efcadr] = d->efc_island[efcadr]; - } - } - } - } - - // Copy island data. - scnstate->data.nisland = d->nisland; - if (d->nisland) { - memcpy(scnstate->data.island_dofadr, d->island_dofadr, sizeof(*d->island_dofadr) * d->nisland); - memcpy(scnstate->data.dof_island, d->dof_island, sizeof(*d->dof_island) * m->nv); - memcpy(scnstate->data.tendon_efcadr, d->tendon_efcadr, sizeof(*d->tendon_efcadr) * m->ntendon); - } -} - - - -// move camera with mouse given a scene state; action is mjtMouse -void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvCamera* cam) { - mjModel m; - mjv_assignFromSceneState(scnstate, &m, NULL); - mjv_moveCamera(&m, action, reldx, reldy, scn, cam); -} - - - -// move perturb object with mouse given a scene state; action is mjtMouse -void mjv_movePerturbFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvPerturb* pert) { - mjModel m; - mjData d; - mjv_assignFromSceneState(scnstate, &m, &d); - mjv_movePerturb(&m, &d, action, reldx, reldy, scn, pert); -} diff --git a/src/engine/engine_vis_state.h b/src/engine/engine_vis_state.h deleted file mode 100644 index 7e1abfbe..00000000 --- a/src/engine/engine_vis_state.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2023 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef MUJOCO_SRC_ENGINE_ENGINE_VIS_STATE_H_ -#define MUJOCO_SRC_ENGINE_ENGINE_VIS_STATE_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -// set default scene state -MJAPI void mjv_defaultSceneState(mjvSceneState* scnstate); - -// allocate and init scene state -MJAPI void mjv_makeSceneState(const mjModel* m, const mjData* d, - mjvSceneState* scnstate, int maxgeom); - -// free scene state -MJAPI void mjv_freeSceneState(mjvSceneState* scnstate); - -// shallow copy scene state into model and data for use with mjv functions -void mjv_assignFromSceneState(const mjvSceneState* scnstate, mjModel* m, mjData* d); - -// update entire scene from a scene state, return the number of new mjWARN_VGEOMFULL warnings -MJAPI int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt, - const mjvPerturb* pert, mjvCamera* cam, int catmask, - mjvScene* scn); - -// update a scene state from model and data -MJAPI void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt, - mjvSceneState* scnstate); - -// move camera with mouse given a scene state; action is mjtMouse -MJAPI void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvCamera* cam); - -// move perturb object with mouse given a scene state; action is mjtMouse -MJAPI void mjv_movePerturbFromState(const mjvSceneState* scnstate, int action, - mjtNum reldx, mjtNum reldy, - const mjvScene* scn, mjvPerturb* pert); - -#ifdef __cplusplus -} -#endif - -#endif // MUJOCO_SRC_ENGINE_ENGINE_VIS_STATE_H_ diff --git a/test/engine/CMakeLists.txt b/test/engine/CMakeLists.txt index 2acdc4b9..1884ae05 100644 --- a/test/engine/CMakeLists.txt +++ b/test/engine/CMakeLists.txt @@ -67,11 +67,4 @@ mujoco_test(engine_util_solve_test) mujoco_test(engine_util_spatial_test) -mujoco_test( - engine_vis_state_test - PROPERTIES - ENVIRONMENT - "MUJOCO_PLUGIN_DIR=$" -) - mujoco_test(engine_vis_visualize_test) diff --git a/test/engine/engine_vis_state_test.cc b/test/engine/engine_vis_state_test.cc deleted file mode 100644 index 6fefde47..00000000 --- a/test/engine/engine_vis_state_test.cc +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2023 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include - -#include -#include -#include -#include -#include "test/fixture.h" - -namespace mujoco { -namespace { - -using ::testing::NotNull; -using MjvSceneStateTest = MujocoTest; - -constexpr int kMaxGeom = 10000; - -static const char* const kHammockPath = - "engine/testdata/hammock/hammock.xml"; -static const char* const kTendonPath = - "engine/testdata/island/tendon_wrap.xml"; -static const char* const kFrustumPath = - "engine/testdata/vis_visualize/frustum.xml"; -static const char* const kFlex = "testdata/flex.xml"; -static const char* const kModelPath = "testdata/model.xml"; - -#define EXPECT_ZERO(exp) EXPECT_EQ(0, exp); - -TEST_F(MjvSceneStateTest, CanUpdateFromState) { - for (const char* path : - {kHammockPath, kTendonPath, kModelPath, kFrustumPath, kFlex}) { - const std::string xml_path = GetTestDataFilePath(path); - mjModel* model = mj_loadXML(xml_path.c_str(), nullptr, 0, 0); - ASSERT_THAT(model, NotNull()) << "Failed to load model from " << path; - mjData* data = mj_makeData(model); - - while (data->time < 2) { - mj_step(model, data); - } - - mjvScene scn1; - mjv_defaultScene(&scn1); - mjv_makeScene(model, &scn1, kMaxGeom); - - mjvOption opt; - mjv_defaultOption(&opt); - - mjvPerturb pert; - mjv_defaultPerturb(&pert); - - mjvCamera cam; - mjv_defaultFreeCamera(model, &cam); - - // Enable all flags to exercise all code paths - for (int i = 0; i < mjNVISFLAG; ++i) { - opt.flags[i] = 1; - } - - mjv_updateScene(model, data, &opt, &pert, &cam, mjCAT_ALL, &scn1); - EXPECT_GT(scn1.ngeom, 0); - if (model->nskin) EXPECT_GT(scn1.nskin, 0); - EXPECT_GT(scn1.nlight, 0); - - mjvSceneState scnstate; - mjv_defaultSceneState(&scnstate); - mjv_makeSceneState(model, data, &scnstate, kMaxGeom); - mjv_updateSceneState(model, data, &opt, &scnstate); - - mjvScene scn2; - mjv_defaultScene(&scn2); - mjv_makeScene(model, &scn2, kMaxGeom); - mjv_updateSceneFromState(&scnstate, &opt, &pert, &cam, mjCAT_ALL, &scn2); - - EXPECT_EQ(scn1.ngeom, scn2.ngeom); - for (int i = 0; i < scn1.ngeom; ++i) { - EXPECT_ZERO(std::memcmp(&scn1.geoms[i], &scn2.geoms[i], sizeof(mjvGeom))); - } - // NB: scn->geomorder is a scratch space for use by mjr_render, so we don't - // need to compare them here. - - EXPECT_LE(scn1.nskin, scn2.nskin); - EXPECT_ZERO(std::memcmp(scn1.skinfacenum, scn2.skinfacenum, - sizeof(*scn2.skinfacenum) * scn2.nskin)); - EXPECT_ZERO(std::memcmp(scn1.skinvertadr, scn2.skinvertadr, - sizeof(*scn2.skinvertadr) * scn2.nskin)); - EXPECT_ZERO(std::memcmp(scn1.skinvertnum, scn2.skinvertnum, - sizeof(*scn2.skinvertnum) * scn2.nskin)); - EXPECT_ZERO(std::memcmp(scn1.skinvert, scn2.skinvert, - sizeof(*scn2.skinvert) * scn2.nskin)); - EXPECT_ZERO(std::memcmp(scn1.skinnormal, scn2.skinnormal, - sizeof(*scn2.skinnormal) * scn2.nskin)); - - auto scn1_cmp_begin = reinterpret_cast(&scn1.nlight); - auto scn2_cmp_begin = reinterpret_cast(&scn2.nlight); - auto cmp_bytes = - sizeof(mjvScene) - (scn2_cmp_begin - reinterpret_cast(&scn2)); - EXPECT_ZERO(std::memcmp(scn1_cmp_begin, scn2_cmp_begin, cmp_bytes)); - - mjv_freeScene(&scn1); - mjv_freeScene(&scn2); - mjv_freeSceneState(&scnstate); - - mj_deleteData(data); - mj_deleteModel(model); - } -} - -} // namespace -} // namespace mujoco diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index cdeeca54..dc7b8078 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -6276,270 +6276,6 @@ public unsafe struct mjvFigure_ { public fixed int yaxispixel[2]; public fixed float xaxisdata[2]; public fixed float yaxisdata[2]; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct model { - public int nv; - public int nu; - public int na; - public int nbody; - public int nbvh; - public int nbvhstatic; - public int njnt; - public int ngeom; - public int nsite; - public int ncam; - public int nlight; - public int nmesh; - public int nskin; - public int nflex; - public int nflexvert; - public int nflextexcoord; - public int nskinvert; - public int nskinface; - public int nskinbone; - public int nskinbonevert; - public int nmat; - public int neq; - public int ntendon; - public int ntree; - public int nwrap; - public int nsensor; - public int nnames; - public int npaths; - public int nsensordata; - public int narena; - public mjOption_ opt; - public mjVisual_ vis; - public mjStatistic_ stat; - public int* body_parentid; - public int* body_rootid; - public int* body_weldid; - public int* body_mocapid; - public int* body_jntnum; - public int* body_jntadr; - public int* body_dofnum; - public int* body_dofadr; - public int* body_geomnum; - public int* body_geomadr; - public double* body_iquat; - public double* body_mass; - public double* body_inertia; - public int* body_bvhadr; - public int* body_bvhnum; - public int* bvh_depth; - public int* bvh_child; - public int* bvh_nodeid; - public double* bvh_aabb; - public int* jnt_type; - public int* jnt_bodyid; - public int* jnt_group; - public int* geom_type; - public int* geom_bodyid; - public int* geom_contype; - public int* geom_conaffinity; - public int* geom_dataid; - public int* geom_matid; - public int* geom_group; - public double* geom_size; - public double* geom_aabb; - public double* geom_rbound; - public float* geom_rgba; - public int* site_type; - public int* site_bodyid; - public int* site_matid; - public int* site_group; - public double* site_size; - public float* site_rgba; - public int* cam_orthographic; - public double* cam_fovy; - public double* cam_ipd; - public int* cam_resolution; - public float* cam_sensorsize; - public float* cam_intrinsic; - public byte* light_directional; - public byte* light_castshadow; - public float* light_bulbradius; - public float* light_intensity; - public float* light_range; - public byte* light_active; - public float* light_attenuation; - public float* light_cutoff; - public float* light_exponent; - public float* light_ambient; - public float* light_diffuse; - public float* light_specular; - public byte* flex_flatskin; - public int* flex_dim; - public int* flex_matid; - public int* flex_group; - public int* flex_interp; - public int* flex_nodeadr; - public int* flex_nodenum; - public int* flex_nodebodyid; - public int* flex_vertadr; - public int* flex_vertnum; - public int* flex_elem; - public int* flex_elemtexcoord; - public int* flex_elemlayer; - public int* flex_elemadr; - public int* flex_elemnum; - public int* flex_elemdataadr; - public int* flex_shell; - public int* flex_shellnum; - public int* flex_shelldataadr; - public int* flex_texcoordadr; - public int* flex_bvhadr; - public int* flex_bvhnum; - public byte* flex_centered; - public double* flex_node; - public double* flex_radius; - public float* flex_rgba; - public float* flex_texcoord; - public int* hfield_pathadr; - public int* mesh_bvhadr; - public int* mesh_bvhnum; - public int* mesh_texcoordadr; - public int* mesh_graphadr; - public int* mesh_pathadr; - public int* skin_matid; - public int* skin_group; - public float* skin_rgba; - public float* skin_inflate; - public int* skin_vertadr; - public int* skin_vertnum; - public int* skin_texcoordadr; - public int* skin_faceadr; - public int* skin_facenum; - public int* skin_boneadr; - public int* skin_bonenum; - public float* skin_vert; - public int* skin_face; - public int* skin_bonevertadr; - public int* skin_bonevertnum; - public float* skin_bonebindpos; - public float* skin_bonebindquat; - public int* skin_bonebodyid; - public int* skin_bonevertid; - public float* skin_bonevertweight; - public int* skin_pathadr; - public int* tex_pathadr; - public int* mat_texid; - public byte* mat_texuniform; - public float* mat_texrepeat; - public float* mat_emission; - public float* mat_specular; - public float* mat_shininess; - public float* mat_reflectance; - public float* mat_metallic; - public float* mat_roughness; - public float* mat_rgba; - public int* eq_type; - public int* eq_obj1id; - public int* eq_obj2id; - public int* eq_objtype; - public double* eq_data; - public int* tendon_num; - public int* tendon_matid; - public int* tendon_group; - public byte* tendon_limited; - public byte* tendon_actfrclimited; - public double* tendon_width; - public double* tendon_range; - public double* tendon_actfrcrange; - public double* tendon_stiffness; - public double* tendon_damping; - public double* tendon_frictionloss; - public double* tendon_lengthspring; - public float* tendon_rgba; - public int* actuator_trntype; - public int* actuator_dyntype; - public int* actuator_trnid; - public int* actuator_actadr; - public int* actuator_actnum; - public int* actuator_group; - public byte* actuator_ctrllimited; - public byte* actuator_actlimited; - public double* actuator_ctrlrange; - public double* actuator_actrange; - public double* actuator_cranklength; - public int* sensor_type; - public int* sensor_objid; - public int* sensor_adr; - public int* name_bodyadr; - public int* name_jntadr; - public int* name_geomadr; - public int* name_siteadr; - public int* name_camadr; - public int* name_lightadr; - public int* name_eqadr; - public int* name_tendonadr; - public int* name_actuatoradr; - public char* names; - public char* paths; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct data { - public mjWarningStat_ warning0; - public mjWarningStat_ warning1; - public mjWarningStat_ warning2; - public mjWarningStat_ warning3; - public mjWarningStat_ warning4; - public mjWarningStat_ warning5; - public mjWarningStat_ warning6; - public mjWarningStat_ warning7; - public int nefc; - public int ncon; - public int nisland; - public double time; - public double* act; - public double* ctrl; - public double* xfrc_applied; - public byte* eq_active; - public double* sensordata; - public double* xpos; - public double* xquat; - public double* xmat; - public double* xipos; - public double* ximat; - public double* xanchor; - public double* xaxis; - public double* geom_xpos; - public double* geom_xmat; - public double* site_xpos; - public double* site_xmat; - public double* cam_xpos; - public double* cam_xmat; - public double* light_xpos; - public double* light_xdir; - public double* subtree_com; - public int* ten_wrapadr; - public int* ten_wrapnum; - public int* wrap_obj; - public double* ten_length; - public double* wrap_xpos; - public double* bvh_aabb_dyn; - public byte* bvh_active; - public int* island_dofadr; - public int* dof_island; - public int* efc_island; - public int* tendon_efcadr; - public double* flexvert_xpos; - public mjContact_* contact; - public double* efc_force; - public void* arena; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct mjvSceneState_ { - public int nbuffer; - public void* buffer; - public int maxgeom; - public mjvScene_ scratch; - public model model; - public data data; }public struct mjuiItem_ {}public struct mjfItemEnable {} // ----------------------------Function declarations---------------------------- @@ -6979,15 +6715,9 @@ public static unsafe extern void mjv_alignToCamera(double* res, double* vec, dou [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjv_moveCamera(mjModel_* m, int action, double reldx, double reldy, mjvScene_* scn, mjvCamera_* cam); -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mjv_moveCameraFromState(mjvSceneState_* scnstate, int action, double reldx, double reldy, mjvScene_* scn, mjvCamera_* cam); - [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjv_movePerturb(mjModel_* m, mjData_* d, int action, double reldx, double reldy, mjvScene_* scn, mjvPerturb_* pert); -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mjv_movePerturbFromState(mjvSceneState_* scnstate, int action, double reldx, double reldy, mjvScene_* scn, mjvPerturb_* pert); - [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjv_moveModel(mjModel_* m, int action, double reldx, double reldy, double* roomup, mjvScene_* scn); @@ -7030,24 +6760,9 @@ public static unsafe extern void mjv_freeScene(mjvScene_* scn); [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjv_updateScene(mjModel_* m, mjData_* d, mjvOption_* opt, mjvPerturb_* pert, mjvCamera_* cam, int catmask, mjvScene_* scn); -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern int mjv_updateSceneFromState(mjvSceneState_* scnstate, mjvOption_* opt, mjvPerturb_* pert, mjvCamera_* cam, int catmask, mjvScene_* scn); - [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjv_copyModel(mjModel_* dest, mjModel_* src); -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mjv_defaultSceneState(mjvSceneState_* scnstate); - -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mjv_makeSceneState(mjModel_* m, mjData_* d, mjvSceneState_* scnstate, int maxgeom); - -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mjv_freeSceneState(mjvSceneState_* scnstate); - -[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] -public static unsafe extern void mjv_updateSceneState(mjModel_* m, mjData_* d, mjvOption_* opt, mjvSceneState_* scnstate); - [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mjv_addGeoms(mjModel_* m, mjData_* d, mjvOption_* opt, mjvPerturb_* pert, int catmask, mjvScene_* scn);