Skip to content

Commit e2c6686

Browse files
GLTF Viewer: render transparent primitives after the environment map
1 parent c473cee commit e2c6686

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

Samples/GLTFViewer/src/GLTFViewer.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,21 +1039,31 @@ void GLTFViewer::Render()
10391039
if (m_pResourceMgr)
10401040
{
10411041
m_GLTFRenderer->Begin(m_pDevice, m_pImmediateContext, m_CacheUseInfo, m_CacheBindings, m_FrameAttribsCB);
1042-
m_GLTFRenderer->Render(m_pImmediateContext, *m_Model, CurrTransforms, &PrevTransforms, m_RenderParams, nullptr, &m_CacheBindings);
10431042
}
10441043
else
10451044
{
10461045
m_GLTFRenderer->Begin(m_pImmediateContext);
1047-
m_GLTFRenderer->Render(m_pImmediateContext, *m_Model, CurrTransforms, &PrevTransforms, m_RenderParams, &m_ModelResourceBindings);
10481046
}
10491047

1050-
if (m_BoundBoxMode != BoundBoxMode::None)
1051-
{
1052-
m_pImmediateContext->SetPipelineState(m_BoundBoxPSO);
1053-
m_pImmediateContext->CommitShaderResources(m_BoundBoxSRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
1054-
DrawAttribs DrawAttrs{24, DRAW_FLAG_VERIFY_ALL};
1055-
m_pImmediateContext->Draw(DrawAttrs);
1056-
}
1048+
auto RenderModel = [&](GLTF_PBR_Renderer::RenderInfo::ALPHA_MODE_FLAGS AlphaModes) {
1049+
const auto OrigAlphaModes = m_RenderParams.AlphaModes;
1050+
1051+
m_RenderParams.AlphaModes &= AlphaModes;
1052+
if (m_RenderParams.AlphaModes != GLTF_PBR_Renderer::RenderInfo::ALPHA_MODE_FLAG_NONE)
1053+
{
1054+
if (m_pResourceMgr)
1055+
{
1056+
m_GLTFRenderer->Render(m_pImmediateContext, *m_Model, CurrTransforms, &PrevTransforms, m_RenderParams, nullptr, &m_CacheBindings);
1057+
}
1058+
else
1059+
{
1060+
m_GLTFRenderer->Render(m_pImmediateContext, *m_Model, CurrTransforms, &PrevTransforms, m_RenderParams, &m_ModelResourceBindings);
1061+
}
1062+
}
1063+
1064+
m_RenderParams.AlphaModes = OrigAlphaModes;
1065+
};
1066+
RenderModel(GLTF_PBR_Renderer::RenderInfo::ALPHA_MODE_FLAG_OPAQUE | GLTF_PBR_Renderer::RenderInfo::ALPHA_MODE_FLAG_MASK);
10571067

10581068
if (m_BackgroundMode != BackgroundMode::None)
10591069
{
@@ -1094,6 +1104,16 @@ void GLTFViewer::Render()
10941104
m_EnvMapRenderer->Render(EnvMapAttribs, TMAttribs);
10951105
}
10961106

1107+
RenderModel(GLTF_PBR_Renderer::RenderInfo::ALPHA_MODE_FLAG_BLEND);
1108+
1109+
if (m_BoundBoxMode != BoundBoxMode::None)
1110+
{
1111+
m_pImmediateContext->SetPipelineState(m_BoundBoxPSO);
1112+
m_pImmediateContext->CommitShaderResources(m_BoundBoxSRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
1113+
DrawAttribs DrawAttrs{24, DRAW_FLAG_VERIFY_ALL};
1114+
m_pImmediateContext->Draw(DrawAttrs);
1115+
}
1116+
10971117
if (m_bEnablePostProcessing)
10981118
{
10991119
{

0 commit comments

Comments
 (0)