Add pluggable resource writing to MuJoCo
Extend mjpResourceProvider with an optional write callback (write) so that mj_encode, mj_saveXML, and mj_saveModel can write to any registered provider. PiperOrigin-RevId: 945202741 Change-Id: I37903425260932e555f4a8c2392c4ff8c2e6cc06
This commit is contained in:
committed by
Copybara-Service
parent
bdeb7e7c4d
commit
dc7581acfa
@@ -1639,6 +1639,17 @@ Close a resource; no-op if resource is NULL.
|
||||
Set buffer to bytes read from the resource and return number of bytes in buffer;
|
||||
return negative value if error.
|
||||
|
||||
.. _mju_writeResource:
|
||||
|
||||
`mju_writeResource <#mju_writeResource>`__
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. mujoco-include:: mju_writeResource
|
||||
|
||||
Write resource data via its resource provider, return bytes written or -1 on error.
|
||||
|
||||
*Nullable:* ``vfs``, ``error``
|
||||
|
||||
.. _mju_getResourceDir:
|
||||
|
||||
`mju_getResourceDir <#mju_getResourceDir>`__
|
||||
|
||||
@@ -20,6 +20,7 @@ General
|
||||
- Fixed loading of ``.mjz`` archives in :ref:`simulate<saSimulate>`: the archive was unmounted before model compilation,
|
||||
so assets contained in it failed to load. Failures in the ``mjz`` decoder now emit a warning with the underlying
|
||||
error instead of the generic "could not decode content" message.
|
||||
- Added support for resource writing via :ref:`mju_writeResource` and the ``write`` callback in :ref:`mjpResourceProvider`.
|
||||
|
||||
.. admonition:: Breaking API changes
|
||||
:class: attention
|
||||
|
||||
@@ -1218,6 +1218,7 @@ typedef struct mjpResourceProvider {
|
||||
mjfMountResource mount; // mounting callback (optional)
|
||||
mjfUnmountResource unmount; // unmounting callback (optional)
|
||||
mjfResourceModified modified; // resource modified callback (optional)
|
||||
mjfWriteResource write; // writing callback (optional)
|
||||
void* data; // opaque data pointer (resource invariant)
|
||||
} mjpResourceProvider;
|
||||
typedef struct mjpDecoder {
|
||||
@@ -3684,6 +3685,8 @@ mjResource* mju_openResource(const char* dir, const char* name,
|
||||
const mjVFS* vfs, char* error, size_t nerror);
|
||||
void mju_closeResource(mjResource* resource);
|
||||
int mju_readResource(mjResource* resource, const void** buffer);
|
||||
mjtSize mju_writeResource(const char* name, const void* buffer, mjtSize nbytes,
|
||||
const mjVFS* vfs, char* error, size_t nerror);
|
||||
void mju_getResourceDir(mjResource* resource, const char** dir, int* ndir);
|
||||
int mju_isModifiedResource(const mjResource* resource, const char* timestamp);
|
||||
mjSpec* mju_decodeResource(mjResource* resource, const char* content_type,
|
||||
|
||||
Reference in New Issue
Block a user