Add renderer info query API

This commit is contained in:
devshahofficial
2026-06-13 15:58:30 -07:00
parent c4c2cad503
commit d23ff84c59
15 changed files with 194 additions and 1 deletions
+8
View File
@@ -125,6 +125,14 @@ class MuJoCoBindingsTest(parameterized.TestCase):
self.model: mujoco.MjModel = mujoco.MjModel.from_xml_string(TEST_XML)
self.data = mujoco.MjData(self.model)
def test_renderer_info_binding(self):
info = mujoco.MjrRendererInfo()
mujoco.mjr_getRendererInfo(info)
self.assertIn(info.renderer, ('classic', 'filament', 'noop'))
self.assertIn(info.backend, ('', 'opengl', 'vulkan', 'unknown'))
self.assertIsInstance(info.backend_version, str)
def test_load_xml_can_handle_name_clash(self):
xml_1 = r"""
<mujoco>
+28
View File
@@ -5480,6 +5480,34 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
),
doc='Set default mjrContext.',
)),
('mjr_defaultRendererInfo',
FunctionDecl(
name='mjr_defaultRendererInfo',
return_type=ValueType(name='void'),
parameters=(
FunctionParameterDecl(
name='info',
type=PointerType(
inner_type=ValueType(name='mjrRendererInfo'),
),
),
),
doc='Set default mjrRendererInfo.',
)),
('mjr_getRendererInfo',
FunctionDecl(
name='mjr_getRendererInfo',
return_type=ValueType(name='void'),
parameters=(
FunctionParameterDecl(
name='info',
type=PointerType(
inner_type=ValueType(name='mjrRendererInfo'),
),
),
),
doc='Get active renderer information.',
)),
('mjr_makeContext',
FunctionDecl(
name='mjr_makeContext',
+28
View File
@@ -10995,6 +10995,34 @@ STRUCTS: Mapping[str, StructDecl] = dict([
),
),
)),
('mjrRendererInfo',
StructDecl(
name='mjrRendererInfo',
declname='struct mjrRendererInfo_',
fields=(
StructFieldDecl(
name='renderer',
type=PointerType(
inner_type=ValueType(name='char', is_const=True),
),
doc='renderer family: classic, filament, noop',
),
StructFieldDecl(
name='backend',
type=PointerType(
inner_type=ValueType(name='char', is_const=True),
),
doc='graphics backend: opengl, vulkan; empty if uninitialized',
),
StructFieldDecl(
name='backend_version',
type=PointerType(
inner_type=ValueType(name='char', is_const=True),
),
doc='backend version string, empty if unknown',
),
),
)),
('mjrVertexAttribute',
StructDecl(
name='mjrVertexAttribute',
+1
View File
@@ -79,6 +79,7 @@ using MjLogMessage = ::mjLogMessage;
// From mjrender.h
using MjrRect = ::mjrRect;
using MjrRendererInfo = ::mjrRendererInfo;
using MjrContext = ::mjrContext;
using MjrVertexAttribute = ::mjrVertexAttribute;
+2
View File
@@ -245,6 +245,8 @@ PYBIND11_MODULE(_render, pymodule, pybind11::mod_gil_not_used()) {
using EigenFloatVectorX = Eigen::Vector<float, Eigen::Dynamic>;
// Skipped: mjr_defaultContext (have MjrContext.__init__)
Def<traits::mjr_defaultRendererInfo>(pymodule);
Def<traits::mjr_getRendererInfo>(pymodule);
// Skipped: mjr_makeContext (have MjrContext.__init__)
Def<traits::mjr_changeFont>(pymodule);
Def<traits::mjr_addAux>(pymodule);
+30
View File
@@ -1049,6 +1049,36 @@ This is useful for example when the MJB is not available as a file on disk.)"));
X(height);
#undef X
// ==================== MJRRENDERERINFO ======================================
py::class_<raw::MjrRendererInfo> mjrRendererInfo(m, "MjrRendererInfo");
mjrRendererInfo.def(py::init([]() {
raw::MjrRendererInfo info;
mjr_defaultRendererInfo(&info);
return info;
}));
mjrRendererInfo.def("__copy__", [](const raw::MjrRendererInfo& other) {
return raw::MjrRendererInfo(other);
});
mjrRendererInfo.def("__deepcopy__",
[](const raw::MjrRendererInfo& other, py::dict) {
return raw::MjrRendererInfo(other);
});
DefineStructFunctions(mjrRendererInfo);
mjrRendererInfo.def_property_readonly("renderer",
[](const raw::MjrRendererInfo& info) {
return info.renderer ? info.renderer
: "";
});
mjrRendererInfo.def_property_readonly("backend",
[](const raw::MjrRendererInfo& info) {
return info.backend ? info.backend
: "";
});
mjrRendererInfo.def_property_readonly(
"backend_version", [](const raw::MjrRendererInfo& info) {
return info.backend_version ? info.backend_version : "";
});
// ==================== MJRVERTEXATTRIBUTE ===================================
py::class_<raw::MjrVertexAttribute> mjrVertexAttribute(m,
"MjrVertexAttribute");