From f28bcc43468ec124634219ee971e41922502b86d Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Tue, 25 Nov 2025 05:25:14 -0800 Subject: [PATCH] Allow binding to arbitrary textures. PiperOrigin-RevId: 836625847 Change-Id: If02ea708f49bdfd9be5be7d9a273340ba2f082f0 --- src/experimental/filament/filament/gui_view.cc | 10 +++++++--- src/experimental/filament/filament/gui_view.h | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/experimental/filament/filament/gui_view.cc b/src/experimental/filament/filament/gui_view.cc index ff98b757..33f05c4f 100644 --- a/src/experimental/filament/filament/gui_view.cc +++ b/src/experimental/filament/filament/gui_view.cc @@ -165,9 +165,10 @@ bool GuiView::PrepareRenderable() { clip_height = height; } + const intptr_t tex_id = reinterpret_cast(command.GetTexID()); mjrRect clip_rect{clip_left, clip_bottom, clip_width, clip_height}; builder.material(drawable_index, - GetMaterialInstance(drawable_index, clip_rect)); + GetMaterialInstance(drawable_index, clip_rect, tex_id)); builder.geometry(drawable_index, kTriangles, buffer.vertex_buffer, buffer.index_buffer, index_offset, command.ElemCount); @@ -186,11 +187,14 @@ bool GuiView::PrepareRenderable() { } filament::MaterialInstance* GuiView::GetMaterialInstance(int index, - mjrRect rect) { + mjrRect rect, + intptr_t texture_id) { while (index >= instances_.size()) { + const filament::Texture* texture = object_mgr_->GetFont(texture_id); + filament::TextureSampler sampler; filament::MaterialInstance* instance = material_->createInstance(); - instance->setParameter("glyph", object_mgr_->GetFont(0), sampler); + instance->setParameter("glyph", texture, sampler); instances_.push_back(instance); } diff --git a/src/experimental/filament/filament/gui_view.h b/src/experimental/filament/filament/gui_view.h index 236903e9..a65ec43e 100644 --- a/src/experimental/filament/filament/gui_view.h +++ b/src/experimental/filament/filament/gui_view.h @@ -49,7 +49,8 @@ class GuiView { private: // Returns the filament::MaterialInstance configured to draw into the given // scissor rect. - filament::MaterialInstance* GetMaterialInstance(int index, mjrRect rect); + filament::MaterialInstance* GetMaterialInstance(int index, mjrRect rect, + intptr_t texture_id); // Clears the filament::Scene of the UX renderable and releases all buffers. void ResetRenderable();