diff --git a/src/experimental/filament/compat/mjr_filament_renderer.cc b/src/experimental/filament/compat/mjr_filament_renderer.cc index 3046c9f3..a23de31b 100644 --- a/src/experimental/filament/compat/mjr_filament_renderer.cc +++ b/src/experimental/filament/compat/mjr_filament_renderer.cc @@ -17,7 +17,9 @@ #include #include #include +#include +#include #include #include #include @@ -39,6 +41,7 @@ MjrFilamentRenderer::MjrFilamentRenderer(const mjrFilamentConfig* config) { void MjrFilamentRenderer::Init(const mjModel* model) { scene_bridge_ = std::make_unique(filament_context_.get(), model); imgui_bridge_ = std::make_unique(filament_context_.get()); + scene_bridge_->SetDrawTextFunction(DrawTextAt); mjr_defaultRenderRequest(&render_requests_[0]); mjr_defaultRenderRequest(&render_requests_[1]); diff --git a/src/experimental/filament/compat/scene_bridge.cc b/src/experimental/filament/compat/scene_bridge.cc index 616cc726..a7e6a5e7 100644 --- a/src/experimental/filament/compat/scene_bridge.cc +++ b/src/experimental/filament/compat/scene_bridge.cc @@ -26,7 +26,6 @@ #include #include #include -#include "experimental/filament/compat/imgui_bridge.h" #include "experimental/filament/compat/model_objects.h" #include "experimental/filament/compat/scene_geom_util.h" #include "experimental/filament/filament/filament_context.h" @@ -302,9 +301,9 @@ void SceneBridge::Update(const mjrRect& viewport, const mjvScene* scene) { for (int i = 0; i < scene->ngeom; ++i) { const mjvGeom* geom = scene->geoms + i; - if (geom->label[0] != 0) { + if (draw_text_callback_ && geom->label[0] != 0) { if (auto pos = ClipFromWorld(ReadFloat3(geom->pos))) { - DrawTextAt(geom->label, pos->x, pos->y, pos->z); + draw_text_callback_(geom->label, pos->x, pos->y, pos->z); } } @@ -361,4 +360,9 @@ void SceneBridge::UploadTexture(const mjModel* model, int id) { void SceneBridge::UploadHeightField(const mjModel* model, int id) { model_objects_->UploadHeightField(model, id); } + +void SceneBridge::SetDrawTextFunction(DrawTextAtFn fn) { + draw_text_callback_ = std::move(fn); +} + } // namespace mujoco diff --git a/src/experimental/filament/compat/scene_bridge.h b/src/experimental/filament/compat/scene_bridge.h index ce6911b6..3de3f2f0 100644 --- a/src/experimental/filament/compat/scene_bridge.h +++ b/src/experimental/filament/compat/scene_bridge.h @@ -15,6 +15,7 @@ #ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_COMPAT_SCENE_BRIDGE_H_ #define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_COMPAT_SCENE_BRIDGE_H_ +#include #include #include #include @@ -51,6 +52,9 @@ class SceneBridge { void UploadTexture(const mjModel* model, int id); void UploadHeightField(const mjModel* model, int id); + using DrawTextAtFn = std::function; + void SetDrawTextFunction(DrawTextAtFn fn); + // Returns the managed scene. mjrScene* GetScene() const { return scene_.get(); } @@ -67,6 +71,7 @@ class SceneBridge { mjrfContext* ctx_ = nullptr; std::unique_ptr model_objects_; + DrawTextAtFn draw_text_callback_; UniquePtr scene_{nullptr, nullptr}; UniquePtr fallback_ibl_{nullptr, nullptr}; UniquePtr fallback_ibl_texture_{nullptr, nullptr};