@@ -388,8 +388,12 @@ void CompileTraversal::apply(RenderGraph& renderGraph)
388388
389389 context->renderPass = renderGraph.getRenderPass ();
390390 auto const & ra = renderGraph.renderArea ;
391- mergeGraphicsPipelineStates (context->mask , context->defaultPipelineStates ,
392- ViewportState::create (ra.offset .x , ra.offset .y , ra.extent .width , ra.extent .height ));
391+ auto viewportState = ViewportState::create (ra.offset .x , ra.offset .y , ra.extent .width , ra.extent .height );
392+ if (auto view{context->view .ref_ptr ()}; view && view->camera )
393+ {
394+ viewportState->viewports [0 ] = view->camera ->viewportState ->viewports [0 ];
395+ }
396+ mergeGraphicsPipelineStates (context->mask , context->defaultPipelineStates , viewportState);
393397
394398 if (context->renderPass )
395399 {
@@ -416,11 +420,13 @@ void CompileTraversal::apply(View& view)
416420 if (context_view && context_view.get () != &view) continue ;
417421
418422 // save previous states
423+ auto previous_view = context->view ;
419424 auto previous_viewID = context->viewID ;
420425 auto previous_mask = context->mask ;
421426 auto previous_overridePipelineStates = context->overridePipelineStates ;
422427 auto previous_defaultPipelineStates = context->defaultPipelineStates ;
423428
429+ context->view = &view;
424430 context->viewID = view.viewID ;
425431 context->mask = view.mask ;
426432 context->viewDependentState = view.viewDependentState .get ();
@@ -437,6 +443,7 @@ void CompileTraversal::apply(View& view)
437443 view.traverse (*this );
438444
439445 // restore previous states
446+ context->view = previous_view;
440447 context->viewID = previous_viewID;
441448 context->mask = previous_mask;
442449 context->defaultPipelineStates = previous_defaultPipelineStates;
0 commit comments