Rename RenderTargetAndTextures to RenderTarget.

Also rename render_target_util to render_target.

PiperOrigin-RevId: 896033907
Change-Id: I123cf98dc308f7cc4916f7b79dcc59a05564022d
This commit is contained in:
Haroon Qureshi
2026-04-07 12:29:53 -07:00
committed by Copybara-Service
parent 382474bb9d
commit f7fd5fc58b
9 changed files with 54 additions and 53 deletions
+2 -2
View File
@@ -53,8 +53,8 @@ target_sources(${MUJOCO_FILAMENT_TARGET_NAME}
filament/model_util.h filament/model_util.h
filament/object_manager.cc filament/object_manager.cc
filament/object_manager.h filament/object_manager.h
filament/render_target_util.cc filament/render_target.cc
filament/render_target_util.h filament/render_target.h
filament/renderables.cc filament/renderables.cc
filament/renderables.h filament/renderables.h
filament/scene_view.cc filament/scene_view.cc
@@ -43,7 +43,7 @@
#include "experimental/filament/filament/imgui_editor.h" #include "experimental/filament/filament/imgui_editor.h"
#include "experimental/filament/filament/model_util.h" #include "experimental/filament/filament/model_util.h"
#include "experimental/filament/filament/object_manager.h" #include "experimental/filament/filament/object_manager.h"
#include "experimental/filament/filament/render_target_util.h" #include "experimental/filament/filament/render_target.h"
#include "experimental/filament/filament/scene_view.h" #include "experimental/filament/filament/scene_view.h"
#include "experimental/filament/filament/texture.h" #include "experimental/filament/filament/texture.h"
#include "experimental/filament/render_context_filament.h" #include "experimental/filament/render_context_filament.h"
@@ -185,12 +185,12 @@ void FilamentContext::SetFrameBuffer(int framebuffer) {
} }
void FilamentContext::PrepareRenderTargets(int width, int height) { void FilamentContext::PrepareRenderTargets(int width, int height) {
color_target_ = std::make_unique<RenderTargetAndTextures>( color_target_ = std::make_unique<RenderTarget>(
engine_, RenderTargetTextureType::kColor, engine_, RenderTargetTextureType::kColor,
RenderTargetTextureType::kDepth); RenderTargetTextureType::kDepth);
color_target_->Prepare(width, height); color_target_->Prepare(width, height);
depth_target_ = std::make_unique<RenderTargetAndTextures>( depth_target_ = std::make_unique<RenderTarget>(
engine_, RenderTargetTextureType::kDepthColor, engine_, RenderTargetTextureType::kDepthColor,
RenderTargetTextureType::kDepth); RenderTargetTextureType::kDepth);
depth_target_->Prepare(width, height); depth_target_->Prepare(width, height);
@@ -202,23 +202,25 @@ void FilamentContext::DestroyRenderTargets() {
} }
static void ReadColorPixels(filament::Renderer* renderer, static void ReadColorPixels(filament::Renderer* renderer,
filament::RenderTarget* target, mjrRect viewport, RenderTarget* target, mjrRect viewport,
unsigned char* buffer, size_t num_bytes) { unsigned char* buffer, size_t num_bytes) {
filament::backend::PixelBufferDescriptor descriptor( filament::backend::PixelBufferDescriptor descriptor(
buffer, num_bytes, filament::backend::PixelDataFormat::RGB, buffer, num_bytes, filament::backend::PixelDataFormat::RGB,
filament::backend::PixelDataType::UBYTE); filament::backend::PixelDataType::UBYTE);
renderer->readPixels(target, viewport.left, viewport.bottom, viewport.width, renderer->readPixels(target->GetFilamentRenderTarget(), viewport.left,
viewport.height, std::move(descriptor)); viewport.bottom, viewport.width, viewport.height,
std::move(descriptor));
} }
static void ReadDepthPixels(filament::Renderer* renderer, static void ReadDepthPixels(filament::Renderer* renderer,
filament::RenderTarget* target, mjrRect viewport, RenderTarget* target, mjrRect viewport,
float* buffer, size_t num_bytes) { float* buffer, size_t num_bytes) {
filament::backend::PixelBufferDescriptor descriptor( filament::backend::PixelBufferDescriptor descriptor(
buffer, num_bytes, filament::backend::PixelDataFormat::R, buffer, num_bytes, filament::backend::PixelDataFormat::R,
filament::backend::PixelDataType::FLOAT); filament::backend::PixelDataType::FLOAT);
renderer->readPixels(target, viewport.left, viewport.bottom, viewport.width, renderer->readPixels(target->GetFilamentRenderTarget(), viewport.left,
viewport.height, std::move(descriptor)); viewport.bottom, viewport.width, viewport.height,
std::move(descriptor));
} }
void FilamentContext::ReadPixels(mjrRect viewport, unsigned char* rgb, void FilamentContext::ReadPixels(mjrRect viewport, unsigned char* rgb,
@@ -238,17 +240,15 @@ void FilamentContext::ReadPixels(mjrRect viewport, unsigned char* rgb,
if (rgb) { if (rgb) {
if (renderer_->beginFrame(offscreen_swap_chain_)) { if (renderer_->beginFrame(offscreen_swap_chain_)) {
scene_view_->Render(renderer_, last_render_mode_, scene_view_->Render(renderer_, last_render_mode_, color_target_.get());
color_target_->GetRenderTarget());
// Render the GUI to the texture as well if requested. // Render the GUI to the texture as well if requested.
if (gui_view_ && gui_swap_chain_target_ == kOffscreenSwapChain) { if (gui_view_ && gui_swap_chain_target_ == kOffscreenSwapChain) {
gui_view_->Render(renderer_, color_target_->GetRenderTarget()); gui_view_->Render(renderer_, color_target_.get());
} }
const size_t num_bytes = viewport.width * viewport.height * 3; const size_t num_bytes = viewport.width * viewport.height * 3;
ReadColorPixels(renderer_, color_target_->GetRenderTarget(), viewport, ReadColorPixels(renderer_, color_target_.get(), viewport, rgb, num_bytes);
rgb, num_bytes);
renderer_->endFrame(); renderer_->endFrame();
} }
@@ -257,11 +257,11 @@ void FilamentContext::ReadPixels(mjrRect viewport, unsigned char* rgb,
if (depth) { if (depth) {
if (renderer_->beginFrame(offscreen_swap_chain_)) { if (renderer_->beginFrame(offscreen_swap_chain_)) {
scene_view_->Render(renderer_, SceneView::DrawMode::kDepth, scene_view_->Render(renderer_, SceneView::DrawMode::kDepth,
depth_target_->GetRenderTarget()); depth_target_.get());
const size_t num_bytes = viewport.width * viewport.height * sizeof(float); const size_t num_bytes = viewport.width * viewport.height * sizeof(float);
ReadDepthPixels(renderer_, depth_target_->GetRenderTarget(), viewport, ReadDepthPixels(renderer_, depth_target_.get(), viewport, depth,
depth, num_bytes); num_bytes);
renderer_->endFrame(); renderer_->endFrame();
} }
@@ -26,7 +26,7 @@
#include <mujoco/mjvisualize.h> #include <mujoco/mjvisualize.h>
#include "experimental/filament/filament/gui_view.h" #include "experimental/filament/filament/gui_view.h"
#include "experimental/filament/filament/object_manager.h" #include "experimental/filament/filament/object_manager.h"
#include "experimental/filament/filament/render_target_util.h" #include "experimental/filament/filament/render_target.h"
#include "experimental/filament/filament/scene_view.h" #include "experimental/filament/filament/scene_view.h"
#include "experimental/filament/render_context_filament.h" #include "experimental/filament/render_context_filament.h"
@@ -82,8 +82,8 @@ class FilamentContext {
SceneView::DrawMode last_render_mode_ = SceneView::DrawMode::kNormal; SceneView::DrawMode last_render_mode_ = SceneView::DrawMode::kNormal;
SwapChainType scene_swap_chain_target_ = kWindowSwapChain; SwapChainType scene_swap_chain_target_ = kWindowSwapChain;
SwapChainType gui_swap_chain_target_ = kWindowSwapChain; SwapChainType gui_swap_chain_target_ = kWindowSwapChain;
std::unique_ptr<RenderTargetAndTextures> color_target_; std::unique_ptr<RenderTarget> color_target_;
std::unique_ptr<RenderTargetAndTextures> depth_target_; std::unique_ptr<RenderTarget> depth_target_;
std::unique_ptr<ObjectManager> object_manager_; std::unique_ptr<ObjectManager> object_manager_;
std::unique_ptr<SceneView> scene_view_; std::unique_ptr<SceneView> scene_view_;
std::unique_ptr<GuiView> gui_view_; std::unique_ptr<GuiView> gui_view_;
@@ -32,6 +32,7 @@
#include <mujoco/mjrender.h> #include <mujoco/mjrender.h>
#include <mujoco/mujoco.h> #include <mujoco/mujoco.h>
#include "experimental/filament/filament/mesh.h" #include "experimental/filament/filament/mesh.h"
#include "experimental/filament/filament/render_target.h"
#include "experimental/filament/filament/texture.h" #include "experimental/filament/filament/texture.h"
namespace mujoco { namespace mujoco {
@@ -352,13 +353,12 @@ filament::MaterialInstance* GuiView::GetMaterialInstance(int index,
return instance; return instance;
} }
void GuiView::Render(filament::Renderer* renderer, void GuiView::Render(filament::Renderer* renderer, RenderTarget* target) {
filament::RenderTarget* target) {
if (num_elements_ == 0) { if (num_elements_ == 0) {
return; return;
} }
view_->setRenderTarget(target); view_->setRenderTarget(target ? target->GetFilamentRenderTarget() : nullptr);
renderer->render(view_); renderer->render(view_);
view_->setRenderTarget(nullptr); view_->setRenderTarget(nullptr);
} }
@@ -30,6 +30,7 @@
#include <filament/View.h> #include <filament/View.h>
#include <mujoco/mjrender.h> #include <mujoco/mjrender.h>
#include "experimental/filament/filament/mesh.h" #include "experimental/filament/filament/mesh.h"
#include "experimental/filament/filament/render_target.h"
#include "experimental/filament/filament/texture.h" #include "experimental/filament/filament/texture.h"
namespace mujoco { namespace mujoco {
@@ -45,8 +46,7 @@ class GuiView {
// correctly synced. // correctly synced.
void UpdateRenderable(); void UpdateRenderable();
void Render(filament::Renderer* renderer, void Render(filament::Renderer* renderer, RenderTarget* target = nullptr);
filament::RenderTarget* target = nullptr);
// Uploads texture to be used with ImGui's Image and ImageButton functions. // Uploads texture to be used with ImGui's Image and ImageButton functions.
uintptr_t UploadImage(uintptr_t tex_id, const uint8_t* pixels, int width, uintptr_t UploadImage(uintptr_t tex_id, const uint8_t* pixels, int width,
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#include "experimental/filament/filament/render_target_util.h" #include "experimental/filament/filament/render_target.h"
#include <memory> #include <memory>
@@ -23,16 +23,16 @@
namespace mujoco { namespace mujoco {
RenderTargetAndTextures::RenderTargetAndTextures(filament::Engine* engine, RenderTarget::RenderTarget(filament::Engine* engine,
RenderTargetTextureType color, RenderTargetTextureType color,
RenderTargetTextureType depth) RenderTargetTextureType depth)
: engine_(engine), color_type_(color), depth_type_(depth) {} : engine_(engine), color_type_(color), depth_type_(depth) {}
RenderTargetAndTextures::~RenderTargetAndTextures() noexcept { RenderTarget::~RenderTarget() noexcept {
Destroy(); Destroy();
} }
void RenderTargetAndTextures::Prepare(int width, int height) { void RenderTarget::Prepare(int width, int height) {
if (width == width_ && height == height_) { if (width == width_ && height == height_) {
return; return;
} }
@@ -53,7 +53,7 @@ void RenderTargetAndTextures::Prepare(int width, int height) {
render_target_ = builder.build(*engine_); render_target_ = builder.build(*engine_);
} }
void RenderTargetAndTextures::Destroy() { void RenderTarget::Destroy() {
if (render_target_) { if (render_target_) {
engine_->destroy(render_target_); engine_->destroy(render_target_);
render_target_ = nullptr; render_target_ = nullptr;
@@ -62,15 +62,15 @@ void RenderTargetAndTextures::Destroy() {
depth_texture_.reset(); depth_texture_.reset();
} }
Texture* RenderTargetAndTextures::GetColorTexture() const { Texture* RenderTarget::GetColorTexture() const {
return color_texture_.get(); return color_texture_.get();
} }
Texture* RenderTargetAndTextures::GetDepthTexture() const { Texture* RenderTarget::GetDepthTexture() const {
return depth_texture_.get(); return depth_texture_.get();
} }
filament::RenderTarget* RenderTargetAndTextures::GetRenderTarget() const { filament::RenderTarget* RenderTarget::GetFilamentRenderTarget() const {
return render_target_; return render_target_;
} }
@@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_UTIL_H_ #ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_H_
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_UTIL_H_ #define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_H_
#include <memory> #include <memory>
@@ -24,17 +24,17 @@
namespace mujoco { namespace mujoco {
// Manages a filament RenderTarget and the textures which are bound to it. // Manages a filament RenderTarget and the textures which are bound to it.
class RenderTargetAndTextures { class RenderTarget {
public: public:
// Defines the types of textures to create for the color and depth // Defines the types of textures to create for the color and depth
// attachments. // attachments.
RenderTargetAndTextures(filament::Engine* engine, RenderTarget(filament::Engine* engine,
RenderTargetTextureType color, RenderTargetTextureType color,
RenderTargetTextureType depth); RenderTargetTextureType depth);
~RenderTargetAndTextures() noexcept; ~RenderTarget() noexcept;
RenderTargetAndTextures(const RenderTargetAndTextures&) = delete; RenderTarget(const RenderTarget&) = delete;
RenderTargetAndTextures& operator=(const RenderTargetAndTextures&) = delete; RenderTarget& operator=(const RenderTarget&) = delete;
// Creates the textures and render target if the width of height differ from // Creates the textures and render target if the width of height differ from
// the last time the render target was prepared. // the last time the render target was prepared.
@@ -46,8 +46,8 @@ class RenderTargetAndTextures {
// Returns the depth texture. // Returns the depth texture.
Texture* GetDepthTexture() const; Texture* GetDepthTexture() const;
// Returns the render target. // Returns the underlying filament render target.
filament::RenderTarget* GetRenderTarget() const; filament::RenderTarget* GetFilamentRenderTarget() const;
private: private:
void Destroy(); void Destroy();
@@ -64,4 +64,4 @@ class RenderTargetAndTextures {
} // namespace mujoco } // namespace mujoco
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_UTIL_H_ #endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_H_
@@ -49,7 +49,7 @@
#include "experimental/filament/filament/model_objects.h" #include "experimental/filament/filament/model_objects.h"
#include "experimental/filament/filament/model_util.h" #include "experimental/filament/filament/model_util.h"
#include "experimental/filament/filament/object_manager.h" #include "experimental/filament/filament/object_manager.h"
#include "experimental/filament/filament/render_target_util.h" #include "experimental/filament/filament/render_target.h"
#include "experimental/filament/filament/texture.h" #include "experimental/filament/filament/texture.h"
namespace mujoco { namespace mujoco {
@@ -253,7 +253,7 @@ SceneView::~SceneView() {
} }
void SceneView::Render(filament::Renderer* renderer, DrawMode draw_mode, void SceneView::Render(filament::Renderer* renderer, DrawMode draw_mode,
filament::RenderTarget* target) { RenderTarget* target) {
filament::View* view = PrepareRenderView(draw_mode); filament::View* view = PrepareRenderView(draw_mode);
filament::MultiSampleAntiAliasingOptions options = filament::MultiSampleAntiAliasingOptions options =
view->getMultiSampleAntiAliasingOptions(); view->getMultiSampleAntiAliasingOptions();
@@ -274,7 +274,8 @@ void SceneView::Render(filament::Renderer* renderer, DrawMode draw_mode,
drawable->SetLayerMask(0x00); drawable->SetLayerMask(0x00);
// Render the reflection to its render target. // Render the reflection to its render target.
reflect_view_->setRenderTarget(reflect_targets_[i]->GetRenderTarget()); reflect_view_->setRenderTarget(
reflect_targets_[i]->GetFilamentRenderTarget());
renderer->render(reflect_view_); renderer->render(reflect_view_);
// Unhide the reflective surface. // Unhide the reflective surface.
@@ -282,7 +283,7 @@ void SceneView::Render(filament::Renderer* renderer, DrawMode draw_mode,
} }
} }
view->setRenderTarget(target); view->setRenderTarget(target ? target->GetFilamentRenderTarget() : nullptr);
renderer->render(view); renderer->render(view);
view->setRenderTarget(nullptr); view->setRenderTarget(nullptr);
@@ -516,7 +517,7 @@ void SceneView::AddReflectiveDrawable(Drawable* drawable) {
// drawables. // drawables.
filament::Engine* engine = object_mgr_->GetEngine(); filament::Engine* engine = object_mgr_->GetEngine();
while (reflect_targets_.size() < reflectives_.size()) { while (reflect_targets_.size() < reflectives_.size()) {
reflect_targets_.push_back(std::make_unique<RenderTargetAndTextures>( reflect_targets_.push_back(std::make_unique<RenderTarget>(
engine, RenderTargetTextureType::kReflectionColor, engine, RenderTargetTextureType::kReflectionColor,
RenderTargetTextureType::kDepth)); RenderTargetTextureType::kDepth));
} }
@@ -38,7 +38,7 @@
#include "experimental/filament/filament/material.h" #include "experimental/filament/filament/material.h"
#include "experimental/filament/filament/model_objects.h" #include "experimental/filament/filament/model_objects.h"
#include "experimental/filament/filament/object_manager.h" #include "experimental/filament/filament/object_manager.h"
#include "experimental/filament/filament/render_target_util.h" #include "experimental/filament/filament/render_target.h"
namespace mujoco { namespace mujoco {
@@ -71,7 +71,7 @@ class SceneView {
using DrawMode = Material::DrawMode; using DrawMode = Material::DrawMode;
void Render(filament::Renderer* renderer, DrawMode draw_mode, void Render(filament::Renderer* renderer, DrawMode draw_mode,
filament::RenderTarget* target = nullptr); RenderTarget* target = nullptr);
void UploadMesh(const mjModel* model, int id); void UploadMesh(const mjModel* model, int id);
void UploadTexture(const mjModel* model, int id); void UploadTexture(const mjModel* model, int id);
@@ -128,7 +128,7 @@ class SceneView {
// Each reflective drawable has its own render target which is used to render // Each reflective drawable has its own render target which is used to render
// the reflected image. // the reflected image.
std::vector<std::unique_ptr<RenderTargetAndTextures>> reflect_targets_; std::vector<std::unique_ptr<RenderTarget>> reflect_targets_;
}; };
} // namespace mujoco } // namespace mujoco