From d5c5a989f21eaabc06ec9753d4a1804ff02936b5 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Thu, 7 May 2026 07:06:02 -0700 Subject: [PATCH] Use viewport instead of width/height. PiperOrigin-RevId: 911942457 Change-Id: I2d6d52a8bb6b1b10d69956cce9e5d7f62e7d1f1c --- .../filament/compat/mjr_filament_renderer.cc | 12 ++++-------- .../filament/filament/filament_context.cc | 7 ++++--- src/experimental/filament/filament/scene_view.cc | 4 ++-- src/experimental/filament/render_context_filament.h | 5 ++--- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/experimental/filament/compat/mjr_filament_renderer.cc b/src/experimental/filament/compat/mjr_filament_renderer.cc index f01d3f5a..b94fa596 100644 --- a/src/experimental/filament/compat/mjr_filament_renderer.cc +++ b/src/experimental/filament/compat/mjr_filament_renderer.cc @@ -54,15 +54,13 @@ void MjrFilamentRenderer::Render(const mjrRect& viewport, reqs[0].scene = scene_bridge_->GetScene(); reqs[0].draw_mode = scene_bridge_->GetDrawMode(); reqs[0].camera = scene_bridge_->GetCamera(); - reqs[0].width = viewport.width; - reqs[0].height = viewport.height; + reqs[0].viewport = viewport; mjr_defaultRenderRequest(&reqs[1]); reqs[1].scene = imgui_bridge_->GetScene(); reqs[1].draw_mode = mjDRAW_MODE_COLOR; reqs[1].camera = imgui_bridge_->GetCamera(viewport.width, viewport.height); - reqs[1].width = viewport.width; - reqs[1].height = viewport.height; + reqs[1].viewport = viewport; filament_context_->Render(reqs); } } @@ -95,15 +93,13 @@ void MjrFilamentRenderer::ReadPixels(mjrRect viewport, unsigned char* rgb, reqs[0].scene = scene_bridge_->GetScene(); reqs[0].draw_mode = scene_bridge_->GetDrawMode(); reqs[0].camera = scene_bridge_->GetCamera(); - reqs[0].width = viewport.width; - reqs[0].height = viewport.height; + reqs[0].viewport = viewport; mjr_defaultRenderRequest(&reqs[1]); reqs[1].scene = imgui_bridge_->GetScene(); reqs[1].draw_mode = mjDRAW_MODE_COLOR; reqs[1].camera = imgui_bridge_->GetCamera(viewport.width, viewport.height); - reqs[1].width = viewport.width; - reqs[1].height = viewport.height; + reqs[1].viewport = viewport; if (rgb) { mjrRenderTargetConfig config; diff --git a/src/experimental/filament/filament/filament_context.cc b/src/experimental/filament/filament/filament_context.cc index e55db060..d7f81cb4 100644 --- a/src/experimental/filament/filament/filament_context.cc +++ b/src/experimental/filament/filament/filament_context.cc @@ -110,13 +110,14 @@ mjrFrameHandle FilamentContext::Render( } // If the window size has changed, we need to reacquire the swap chain. - if (request.width != window_width_ || request.height != window_height_) { + if (request.viewport.width != window_width_ || + request.viewport.height != window_height_) { if (window_width_ != 0 && window_height_ != 0) { engine_->destroy(window_swap_chain_); window_swap_chain_ = engine_->createSwapChain(config_.native_window); } - window_width_ = request.width; - window_height_ = request.height; + window_width_ = request.viewport.width; + window_height_ = request.viewport.height; } if (!render_began) { diff --git a/src/experimental/filament/filament/scene_view.cc b/src/experimental/filament/filament/scene_view.cc index c3f132ab..3a217c59 100644 --- a/src/experimental/filament/filament/scene_view.cc +++ b/src/experimental/filament/filament/scene_view.cc @@ -486,7 +486,7 @@ void SceneView::Configure(const mjModel* model) { void DoRender(filament::Renderer* renderer, const mjrRenderRequest& request) { SceneView::RenderRequest scene_view_request; scene_view_request.draw_mode = request.draw_mode; - scene_view_request.viewport = {0, 0, request.width, request.height}; + scene_view_request.viewport = request.viewport; scene_view_request.camera = request.camera; SceneView* scene_view = SceneView::downcast(request.scene); scene_view->Render(renderer, scene_view_request); @@ -499,7 +499,7 @@ void DoReadPixels(filament::Renderer* renderer, SceneView::RenderRequest scene_view_request; scene_view_request.draw_mode = request.draw_mode; - scene_view_request.viewport = {0, 0, request.width, request.height}; + scene_view_request.viewport = request.viewport; scene_view_request.camera = request.camera; scene_view_request.target = render_target; SceneView* scene_view = SceneView::downcast(request.scene); diff --git a/src/experimental/filament/render_context_filament.h b/src/experimental/filament/render_context_filament.h index 03cbecbe..b960244d 100644 --- a/src/experimental/filament/render_context_filament.h +++ b/src/experimental/filament/render_context_filament.h @@ -370,9 +370,8 @@ struct mjrRenderRequest { // The camera from which to render the scene. mjrCamera camera; - // The dimensions of the output image. - int width; - int height; + // The viewport into which to render the image. + mjrRect viewport; // The render target into which to render the image. If nullptr, the image // will be rendered to the window (as previously configured in