Skip to content

Commit 42d9a8a

Browse files
committed
fix viewport bug when switching devices using non-default color formats
1 parent 69abc43 commit 42d9a8a

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

tsd/src/tsd/ui/imgui/windows/Viewport.cpp

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -408,12 +408,13 @@ void Viewport::imagePipeline_populate(tsd::rendering::ImagePipeline &p)
408408
m_visualizeAOVPass = p.emplace_back<tsd::rendering::VisualizeAOVPass>();
409409
m_visualizeAOVPass->setEnabled(false);
410410
m_visualizeAOVPass->setEdgeInvert(m_edgeInvert);
411-
updateDisplayPassState();
412411

413412
m_outlinePass = p.emplace_back<tsd::rendering::OutlineRenderPass>();
414413

415414
m_outputPass = p.emplace_back<tsd::rendering::CopyToSDLTexturePass>(
416415
m_app->sdlRenderer());
416+
417+
syncImagePassState();
417418
}
418419

419420
void Viewport::camera_resetView(bool resetAzEl)
@@ -599,6 +600,36 @@ void Viewport::updateImage()
599600
m_maxFL = std::max(m_maxFL, m_latestAnariFL);
600601
}
601602

603+
void Viewport::syncImagePassState()
604+
{
605+
if (!m_anariPass)
606+
return;
607+
608+
m_anariPass->setColorFormat(m_colorFormat);
609+
610+
if (m_visualizeAOVPass) {
611+
m_visualizeAOVPass->setAOVType(m_visualizeAOV);
612+
m_visualizeAOVPass->setDepthRange(
613+
m_depthVisualMinimum, m_depthVisualMaximum);
614+
m_visualizeAOVPass->setEdgeInvert(m_edgeInvert);
615+
}
616+
617+
m_anariPass->setEnableAlbedo(m_visualizeAOV == tsd::rendering::AOVType::ALBEDO);
618+
m_anariPass->setEnableNormals(m_visualizeAOV == tsd::rendering::AOVType::NORMAL);
619+
m_anariPass->setEnablePrimitiveId(
620+
m_visualizeAOV == tsd::rendering::AOVType::PRIMITIVE_ID);
621+
m_anariPass->setEnableInstanceId(
622+
m_visualizeAOV == tsd::rendering::AOVType::INSTANCE_ID);
623+
624+
const auto selectedNode = appContext()->getFirstSelected();
625+
const bool needIDs = selectedNode.valid()
626+
|| m_visualizeAOV == tsd::rendering::AOVType::EDGES
627+
|| m_visualizeAOV == tsd::rendering::AOVType::OBJECT_ID;
628+
m_anariPass->setEnableIDs(needIDs);
629+
630+
updateDisplayPassState();
631+
}
632+
602633
void Viewport::updateDisplayPassState()
603634
{
604635
if (!m_toneMapPass || !m_outputTransformPass)
@@ -665,9 +696,8 @@ void Viewport::ui_menubar_Viewport()
665696
format = ANARI_FLOAT32_VEC4;
666697

667698
if (format != m_colorFormat) {
668-
m_anariPass->setColorFormat(format);
669699
m_colorFormat = format;
670-
updateDisplayPassState();
700+
syncImagePassState();
671701
}
672702
ImGui::Unindent(INDENT_AMOUNT);
673703
}
@@ -727,19 +757,7 @@ void Viewport::ui_menubar_Viewport()
727757
ImGui::Combo("AOV", &aov, aovItems, IM_ARRAYSIZE(aovItems))) {
728758
if (aov != int(m_visualizeAOV)) {
729759
m_visualizeAOV = static_cast<tsd::rendering::AOVType>(aov);
730-
m_visualizeAOVPass->setAOVType(m_visualizeAOV);
731-
updateDisplayPassState();
732-
m_anariPass->setEnableAlbedo(
733-
m_visualizeAOV == tsd::rendering::AOVType::ALBEDO);
734-
m_anariPass->setEnableNormals(
735-
m_visualizeAOV == tsd::rendering::AOVType::NORMAL);
736-
m_anariPass->setEnableIDs(
737-
m_visualizeAOV == tsd::rendering::AOVType::EDGES
738-
|| m_visualizeAOV == tsd::rendering::AOVType::OBJECT_ID);
739-
m_anariPass->setEnablePrimitiveId(
740-
m_visualizeAOV == tsd::rendering::AOVType::PRIMITIVE_ID);
741-
m_anariPass->setEnableInstanceId(
742-
m_visualizeAOV == tsd::rendering::AOVType::INSTANCE_ID);
760+
syncImagePassState();
743761
}
744762
}
745763

tsd/src/tsd/ui/imgui/windows/Viewport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ struct Viewport : public BaseViewport
6666

6767
void updateFrame();
6868
void updateImage();
69+
void syncImagePassState();
6970
void updateDisplayPassState();
7071

7172
void ui_menubar();

0 commit comments

Comments
 (0)