Expose mju resource functions to public header.
Many of these functions are useful when writing a custom decoder. PiperOrigin-RevId: 868321921 Change-Id: I7e0dd285e0559b6f486acf8cbf4376ff8d91943d
This commit is contained in:
committed by
Copybara-Service
parent
210cf86486
commit
6715a0ceaa
@@ -29,6 +29,7 @@ API function can be classified as:
|
|||||||
- :ref:`Printing<Printing>` of various quantities.
|
- :ref:`Printing<Printing>` of various quantities.
|
||||||
- :ref:`Virtual file system<Virtualfilesystem>`, used to load assets from memory.
|
- :ref:`Virtual file system<Virtualfilesystem>`, used to load assets from memory.
|
||||||
- :ref:`Asset cache<Assetcache>`, used to speed up model compilation.
|
- :ref:`Asset cache<Assetcache>`, used to speed up model compilation.
|
||||||
|
- :ref:`Resources<Resources>`, interfacing with resource providers to load assets.
|
||||||
- :ref:`Initialization<Initialization>` of data structures.
|
- :ref:`Initialization<Initialization>` of data structures.
|
||||||
- :ref:`Error and memory<Errorandmemory>`.
|
- :ref:`Error and memory<Errorandmemory>`.
|
||||||
- :ref:`Miscellaneous<Miscellaneous>` functions.
|
- :ref:`Miscellaneous<Miscellaneous>` functions.
|
||||||
|
|||||||
@@ -1551,6 +1551,77 @@ Get the internal asset cache used by the compiler.
|
|||||||
|
|
||||||
Clear the asset cache.
|
Clear the asset cache.
|
||||||
|
|
||||||
|
.. _Resources:
|
||||||
|
|
||||||
|
Resources
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
Resources are the interface between :ref:`resource providers <exProvider>` and MuJoCo model compilation code.
|
||||||
|
These functions provide the means to query the resource provider and obtain resources.
|
||||||
|
.. _mju_openResource:
|
||||||
|
|
||||||
|
`mju_openResource <#mju_openResource>`__
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. mujoco-include:: mju_openResource
|
||||||
|
|
||||||
|
Open a resource; if the name doesn't have a prefix matching a registered resource provider,
|
||||||
|
then the OS filesystem is used.
|
||||||
|
|
||||||
|
*Nullable:* ``dir``, ``vfs``, ``error``
|
||||||
|
|
||||||
|
.. _mju_closeResource:
|
||||||
|
|
||||||
|
`mju_closeResource <#mju_closeResource>`__
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. mujoco-include:: mju_closeResource
|
||||||
|
|
||||||
|
Close a resource; no-op if resource is NULL.
|
||||||
|
|
||||||
|
.. _mju_readResource:
|
||||||
|
|
||||||
|
`mju_readResource <#mju_readResource>`__
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. mujoco-include:: mju_readResource
|
||||||
|
|
||||||
|
Set buffer to bytes read from the resource and return number of bytes in buffer;
|
||||||
|
return negative value if error.
|
||||||
|
|
||||||
|
.. _mju_getResourceDir:
|
||||||
|
|
||||||
|
`mju_getResourceDir <#mju_getResourceDir>`__
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. mujoco-include:: mju_getResourceDir
|
||||||
|
|
||||||
|
For a resource with a name partitioned as {dir}{filename}, get the dir and ndir pointers.
|
||||||
|
|
||||||
|
.. _mju_isModifiedResource:
|
||||||
|
|
||||||
|
`mju_isModifiedResource <#mju_isModifiedResource>`__
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. mujoco-include:: mju_isModifiedResource
|
||||||
|
|
||||||
|
Compare resource timestamp to provided timestamp.
|
||||||
|
|
||||||
|
Return 0 if timestamps match, >0 if resource is newer, <0 if resource is older.
|
||||||
|
|
||||||
|
.. _mju_decodeResource:
|
||||||
|
|
||||||
|
`mju_decodeResource <#mju_decodeResource>`__
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. mujoco-include:: mju_decodeResource
|
||||||
|
|
||||||
|
Find the decoder for a resource and return the decoded spec.
|
||||||
|
|
||||||
|
The caller takes ownership of the spec and is responsible for cleaning it up.
|
||||||
|
|
||||||
|
*Nullable:* ``vfs``
|
||||||
|
|
||||||
.. _Initialization:
|
.. _Initialization:
|
||||||
|
|
||||||
Initialization
|
Initialization
|
||||||
|
|||||||
@@ -816,3 +816,8 @@ Note that derivatives depend only on :math:`h` and :math:`v` (in fact, on :math:
|
|||||||
All outputs are optional.
|
All outputs are optional.
|
||||||
|
|
||||||
*Nullable:* ``Dquat``, ``Dvel``, ``Dscale``
|
*Nullable:* ``Dquat``, ``Dvel``, ``Dscale``
|
||||||
|
|
||||||
|
.. _Resources:
|
||||||
|
|
||||||
|
Resources are the interface between :ref:`resource providers <exProvider>` and MuJoCo model compilation code.
|
||||||
|
These functions provide the means to query the resource provider and obtain resources.
|
||||||
|
|||||||
@@ -3579,6 +3579,14 @@ const mjpResourceProvider* mjp_getResourceProviderAtSlot(int slot);
|
|||||||
void mjp_registerDecoder(const mjpDecoder* decoder);
|
void mjp_registerDecoder(const mjpDecoder* decoder);
|
||||||
void mjp_defaultDecoder(mjpDecoder* decoder);
|
void mjp_defaultDecoder(mjpDecoder* decoder);
|
||||||
const mjpDecoder* mjp_findDecoder(const mjResource* resource, const char* content_type);
|
const mjpDecoder* mjp_findDecoder(const mjResource* resource, const char* content_type);
|
||||||
|
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);
|
||||||
|
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,
|
||||||
|
const mjVFS* vfs);
|
||||||
mjThreadPool* mju_threadPoolCreate(size_t number_of_threads);
|
mjThreadPool* mju_threadPoolCreate(size_t number_of_threads);
|
||||||
void mju_bindThreadPool(mjData* d, void* thread_pool);
|
void mju_bindThreadPool(mjData* d, void* thread_pool);
|
||||||
void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task);
|
void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task);
|
||||||
|
|||||||
@@ -1522,6 +1522,36 @@ MJAPI void mjp_defaultDecoder(mjpDecoder* decoder);
|
|||||||
// If no match, return NULL.
|
// If no match, return NULL.
|
||||||
MJAPI const mjpDecoder* mjp_findDecoder(const mjResource* resource, const char* content_type);
|
MJAPI const mjpDecoder* mjp_findDecoder(const mjResource* resource, const char* content_type);
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------- Resources -----------------------------------------------------
|
||||||
|
|
||||||
|
// Open a resource; if the name doesn't have a prefix matching a registered resource provider,
|
||||||
|
// then the OS filesystem is used.
|
||||||
|
// Nullable: dir, vfs, error
|
||||||
|
MJAPI mjResource* mju_openResource(const char* dir, const char* name,
|
||||||
|
const mjVFS* vfs, char* error, size_t nerror);
|
||||||
|
|
||||||
|
// Close a resource; no-op if resource is NULL.
|
||||||
|
MJAPI void mju_closeResource(mjResource* resource);
|
||||||
|
|
||||||
|
// Set buffer to bytes read from the resource and return number of bytes in buffer;
|
||||||
|
// return negative value if error.
|
||||||
|
MJAPI int mju_readResource(mjResource* resource, const void** buffer);
|
||||||
|
|
||||||
|
// For a resource with a name partitioned as {dir}{filename}, get the dir and ndir pointers.
|
||||||
|
MJAPI void mju_getResourceDir(mjResource* resource, const char** dir, int* ndir);
|
||||||
|
|
||||||
|
// Compare resource timestamp to provided timestamp.
|
||||||
|
// Return 0 if timestamps match, >0 if resource is newer, <0 if resource is older.
|
||||||
|
MJAPI int mju_isModifiedResource(const mjResource* resource, const char* timestamp);
|
||||||
|
|
||||||
|
// Find the decoder for a resource and return the decoded spec.
|
||||||
|
// The caller takes ownership of the spec and is responsible for cleaning it up.
|
||||||
|
// Nullable: vfs
|
||||||
|
MJAPI mjSpec* mju_decodeResource(mjResource* resource, const char* content_type,
|
||||||
|
const mjVFS* vfs);
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------- Threads -------------------------------------------------------
|
//---------------------------------- Threads -------------------------------------------------------
|
||||||
|
|
||||||
// Create a thread pool with the specified number of threads running.
|
// Create a thread pool with the specified number of threads running.
|
||||||
|
|||||||
@@ -9600,6 +9600,160 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
|
|||||||
),
|
),
|
||||||
doc='Return the resource provider with the prefix that matches against the resource name. If no match, return NULL.', # pylint: disable=line-too-long
|
doc='Return the resource provider with the prefix that matches against the resource name. If no match, return NULL.', # pylint: disable=line-too-long
|
||||||
)),
|
)),
|
||||||
|
('mju_openResource',
|
||||||
|
FunctionDecl(
|
||||||
|
name='mju_openResource',
|
||||||
|
return_type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjResource'),
|
||||||
|
),
|
||||||
|
parameters=(
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='dir',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='char', is_const=True),
|
||||||
|
),
|
||||||
|
nullable=True,
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='name',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='char', is_const=True),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='vfs',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjVFS', is_const=True),
|
||||||
|
),
|
||||||
|
nullable=True,
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='error',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='char'),
|
||||||
|
),
|
||||||
|
nullable=True,
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='nerror',
|
||||||
|
type=ValueType(name='size_t'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
doc="Open a resource; if the name doesn't have a prefix matching a registered resource provider, then the OS filesystem is used.", # pylint: disable=line-too-long
|
||||||
|
)),
|
||||||
|
('mju_closeResource',
|
||||||
|
FunctionDecl(
|
||||||
|
name='mju_closeResource',
|
||||||
|
return_type=ValueType(name='void'),
|
||||||
|
parameters=(
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='resource',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjResource'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
doc='Close a resource; no-op if resource is NULL.',
|
||||||
|
)),
|
||||||
|
('mju_readResource',
|
||||||
|
FunctionDecl(
|
||||||
|
name='mju_readResource',
|
||||||
|
return_type=ValueType(name='int'),
|
||||||
|
parameters=(
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='resource',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjResource'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='buffer',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=PointerType(
|
||||||
|
inner_type=ValueType(name='void', is_const=True),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
doc='Set buffer to bytes read from the resource and return number of bytes in buffer; return negative value if error.', # pylint: disable=line-too-long
|
||||||
|
)),
|
||||||
|
('mju_getResourceDir',
|
||||||
|
FunctionDecl(
|
||||||
|
name='mju_getResourceDir',
|
||||||
|
return_type=ValueType(name='void'),
|
||||||
|
parameters=(
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='resource',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjResource'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='dir',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=PointerType(
|
||||||
|
inner_type=ValueType(name='char', is_const=True),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='ndir',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='int'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
doc='For a resource with a name partitioned as {dir}{filename}, get the dir and ndir pointers.', # pylint: disable=line-too-long
|
||||||
|
)),
|
||||||
|
('mju_isModifiedResource',
|
||||||
|
FunctionDecl(
|
||||||
|
name='mju_isModifiedResource',
|
||||||
|
return_type=ValueType(name='int'),
|
||||||
|
parameters=(
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='resource',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjResource', is_const=True),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='timestamp',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='char', is_const=True),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
doc='Compare resource timestamp to provided timestamp. Return 0 if timestamps match, >0 if resource is newer, <0 if resource is older.', # pylint: disable=line-too-long
|
||||||
|
)),
|
||||||
|
('mju_decodeResource',
|
||||||
|
FunctionDecl(
|
||||||
|
name='mju_decodeResource',
|
||||||
|
return_type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjSpec'),
|
||||||
|
),
|
||||||
|
parameters=(
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='resource',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjResource'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='content_type',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='char', is_const=True),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
FunctionParameterDecl(
|
||||||
|
name='vfs',
|
||||||
|
type=PointerType(
|
||||||
|
inner_type=ValueType(name='mjVFS', is_const=True),
|
||||||
|
),
|
||||||
|
nullable=True,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
doc='Find the decoder for a resource and return the decoded spec. The caller takes ownership of the spec and is responsible for cleaning it up.', # pylint: disable=line-too-long
|
||||||
|
)),
|
||||||
('mju_threadPoolCreate',
|
('mju_threadPoolCreate',
|
||||||
FunctionDecl(
|
FunctionDecl(
|
||||||
name='mju_threadPoolCreate',
|
name='mju_threadPoolCreate',
|
||||||
|
|||||||
@@ -185,7 +185,13 @@ _SKIPPED_GETTERS_AND_SETTERS: tuple[str, ...] = (
|
|||||||
_SKIPPED_UTILITY_FUNCTIONS: tuple[str, ...] = (
|
_SKIPPED_UTILITY_FUNCTIONS: tuple[str, ...] = (
|
||||||
# go/keep-sorted start
|
# go/keep-sorted start
|
||||||
"mj_readSensor",
|
"mj_readSensor",
|
||||||
|
"mju_closeResource",
|
||||||
|
"mju_decodeResource",
|
||||||
|
"mju_getResourceDir",
|
||||||
"mju_getXMLDependencies",
|
"mju_getXMLDependencies",
|
||||||
|
"mju_isModifiedResource",
|
||||||
|
"mju_openResource",
|
||||||
|
"mju_readResource",
|
||||||
# go/keep-sorted end
|
# go/keep-sorted end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user