Skip to content

Commit 097fef6

Browse files
Michael Saunderstheodoregoetz
authored andcommitted
Fixed handling of viewport state when the scissor and viewport are different
1 parent 8dab6d2 commit 097fef6

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/vsg/app/CompileTraversal.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)