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
+32
View File
@@ -55,6 +55,30 @@ void mjr_defaultContext(mjrContext* con) {
memset(con, 0, sizeof(mjrContext));
}
static int context_count = 0;
static int contextHasResources(const mjrContext* con) {
return con->ntexture || con->offColor || con->offDepthStencil || con->offFBO ||
con->shadowTex || con->shadowFBO || con->rangePlane || con->rangeMesh ||
con->rangeHField || con->rangeBuiltin || con->rangeFont || con->nskin;
}
// set default mjrRendererInfo
void mjr_defaultRendererInfo(mjrRendererInfo* info) {
memset(info, 0, sizeof(mjrRendererInfo));
info->renderer = "classic";
info->backend = "";
info->backend_version = "";
}
// get active renderer information
void mjr_getRendererInfo(mjrRendererInfo* info) {
mjr_defaultRendererInfo(info);
if (context_count > 0) {
info->backend = "opengl";
}
}
// allocate lists
@@ -1608,6 +1632,7 @@ void mjr_makeContext_offSize(const mjModel* m, mjrContext* con, int fontscale,
// try to bind window (bind offscreen if no window)
mjr_setBuffer(mjFB_WINDOW, con);
context_count++;
return;
}
@@ -1667,6 +1692,7 @@ void mjr_makeContext_offSize(const mjModel* m, mjrContext* con, int fontscale,
// set default depth mapping for mjr_readPixels
con->readDepthMap = mjDEPTH_ZERONEAR;
context_count++;
}
@@ -1811,6 +1837,8 @@ void mjr_addAux(int index, int width, int height, int samples, mjrContext* con)
// free resources in custom OpenGL context
void mjr_freeContext(mjrContext* con) {
int had_resources = contextHasResources(con);
// save flags
int glInitialized = con->glInitialized;
int windowAvailable = con->windowAvailable;
@@ -1867,6 +1895,10 @@ void mjr_freeContext(mjrContext* con) {
con->windowSamples = windowSamples;
con->windowStereo = windowStereo;
con->windowDoublebuffer = windowDoublebuffer;
if (had_resources && context_count > 0) {
context_count--;
}
}
+2 -1
View File
@@ -49,6 +49,7 @@ namespace mujoco {
FilamentContext::FilamentContext(const mjrfContextConfig* config)
: config_(*config) {
FilamentPlatformSetup setup = CreateFilamentPlatform(config_);
backend_ = setup.backend;
platform_ = std::move(setup.platform);
filament::Engine::Config engine_config;
@@ -58,7 +59,7 @@ FilamentContext::FilamentContext(const mjrfContextConfig* config)
filament::Engine::Builder engine_builder;
engine_builder.config(&engine_config);
engine_builder.backend(setup.backend);
engine_builder.backend(backend_);
engine_builder.platform(platform_.get());
engine_builder.feature("backend.disable_parallel_shader_compile",
setup.disable_parallel_shader_compile);
@@ -59,6 +59,8 @@ class FilamentContext : public mjrfContext {
filament::Engine* GetEngine() const { return engine_; }
filament::Engine::Backend GetBackend() const { return backend_; }
ObjectManager* GetObjectManager() const { return object_manager_.get(); }
MaterialManager* GetMaterialManager() const {
@@ -76,6 +78,7 @@ class FilamentContext : public mjrfContext {
void ValidateSwapChains(std::span<const mjrfRenderRequest> render_requests);
mjrfContextConfig config_;
filament::Engine::Backend backend_;
filament::Engine* engine_ = nullptr;
filament::Renderer* renderer_ = nullptr;
filament::SwapChain* window_swap_chain_ = nullptr;
+18
View File
@@ -37,6 +37,17 @@ static void setf(float (&arr)[N], const std::array<float, N>& values) {
}
}
static const char* BackendName(filament::Engine::Backend backend) {
switch (backend) {
case filament::Engine::Backend::OPENGL:
return "opengl";
case filament::Engine::Backend::VULKAN:
return "vulkan";
default:
return "unknown";
}
}
extern "C" {
void mjrf_defaultContextConfig(mjrfContextConfig* config) {
@@ -124,6 +135,13 @@ void mjrf_destroyContext(mjrfContext* ctx) {
delete mujoco::FilamentContext::downcast(ctx);
}
void mjrf_getRendererInfo(mjrfContext* ctx, mjrRendererInfo* info) {
memset(info, 0, sizeof(mjrRendererInfo));
info->renderer = "filament";
info->backend = ctx ? BackendName(mujoco::FilamentContext::downcast(ctx)->GetBackend()) : "";
info->backend_version = "";
}
mjrfTexture* mjrf_createTexture(mjrfContext* ctx,
const mjrfTextureConfig* config) {
return new mujoco::Texture(
+10
View File
@@ -13,6 +13,7 @@
// limitations under the License.
#include <mujoco/mujoco.h>
#include <string.h>
// This library implements the entirety of mujoco's mjr API as fast-fail stubs.
// You can link this library with your application (instead of standard renderer
@@ -22,6 +23,15 @@
void mjr_defaultContext(mjrContext* con) {
mju_error("mjr_defaultContext not implemented.");
}
void mjr_defaultRendererInfo(mjrRendererInfo* info) {
memset(info, 0, sizeof(mjrRendererInfo));
info->renderer = "noop";
info->backend = "";
info->backend_version = "";
}
void mjr_getRendererInfo(mjrRendererInfo* info) {
mjr_defaultRendererInfo(info);
}
void mjr_makeContext(const mjModel* m, mjrContext* con, int fontscale) {
mju_error("mjr_makeContext not implemented.");
}