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:
Sam Haves
2026-07-09 10:47:01 -07:00
committed by Copybara-Service
parent bdeb7e7c4d
commit dc7581acfa
18 changed files with 324 additions and 83 deletions
@@ -265,6 +265,7 @@ _OMITTED_FUNCTIONS = [
'mju_openResource',
'mju_closeResource',
'mju_readResource',
'mju_writeResource',
'mju_getResourceDir',
'mju_isModifiedResource',
'mj_compile',
+42
View File
@@ -9929,6 +9929,48 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
),
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_writeResource',
FunctionDecl(
name='mju_writeResource',
return_type=ValueType(name='mjtSize'),
parameters=(
FunctionParameterDecl(
name='name',
type=PointerType(
inner_type=ValueType(name='char', is_const=True),
),
),
FunctionParameterDecl(
name='buffer',
type=PointerType(
inner_type=ValueType(name='void', is_const=True),
),
),
FunctionParameterDecl(
name='nbytes',
type=ValueType(name='mjtSize'),
),
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='Write resource data via its resource provider, return bytes written or -1 on error.', # pylint: disable=line-too-long
)),
('mju_getResourceDir',
FunctionDecl(
name='mju_getResourceDir',