Use viewport instead of width/height.

PiperOrigin-RevId: 911942457
Change-Id: I2d6d52a8bb6b1b10d69956cce9e5d7f62e7d1f1c
This commit is contained in:
Haroon Qureshi
2026-05-07 07:06:02 -07:00
committed by Copybara-Service
parent ec50260e26
commit d5c5a989f2
4 changed files with 12 additions and 16 deletions
@@ -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;
@@ -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) {
@@ -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);
@@ -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