Fixes for using the DebugDisplayRequestBus in game mode

This commit is contained in:
rgba16f
2021-05-03 11:48:48 -05:00
parent 1d371da5ed
commit d115c89043
6 changed files with 1595 additions and 12 deletions
@@ -244,9 +244,6 @@ namespace AZ::AtomBridge
}
////////////////////////////////////////////////////////////////////////
// Partial implementation of the DebugDisplayRequestBus on Atom.
// Commented out function prototypes are waiting to be implemented.
// work tracked in [ATOM-3459]
AtomDebugDisplayViewportInterface::AtomDebugDisplayViewportInterface(AZ::RPI::ViewportContextPtr viewportContextPtr)
{
ResetRenderState();
@@ -272,9 +269,8 @@ namespace AZ::AtomBridge
InitInternal(scene, nullptr);
}
void AtomDebugDisplayViewportInterface::InitInternal(RPI::Scene* scene, AZ::RPI::ViewportContextPtr viewportContextPtr)
void AtomDebugDisplayViewportInterface::UpdateAuxGeom(RPI::Scene* scene, AZ::RPI::View* view)
{
AzFramework::DebugDisplayRequestBus::Handler::BusDisconnect(m_viewportId);
if (!scene)
{
m_auxGeomPtr = nullptr;
@@ -286,20 +282,48 @@ namespace AZ::AtomBridge
m_auxGeomPtr = nullptr;
return;
}
if (m_defaultInstance)
if (m_defaultInstance || !view)
{
m_auxGeomPtr = auxGeomFP->GetDrawQueue();
}
else
{
m_auxGeomPtr = auxGeomFP->GetOrCreateDrawQueueForView(viewportContextPtr->GetDefaultView().get());
m_auxGeomPtr = auxGeomFP->GetOrCreateDrawQueueForView(view);
}
}
void AtomDebugDisplayViewportInterface::InitInternal(RPI::Scene* scene, AZ::RPI::ViewportContextPtr viewportContextPtr)
{
AzFramework::DebugDisplayRequestBus::Handler::BusDisconnect(m_viewportId);
UpdateAuxGeom(scene, viewportContextPtr ? viewportContextPtr->GetDefaultView().get() : nullptr);
AzFramework::DebugDisplayRequestBus::Handler::BusConnect(m_viewportId);
if (!m_defaultInstance)
{
AZ::RPI::ViewportContextIdNotificationBus::Handler::BusConnect(viewportContextPtr->GetId());
}
}
void AtomDebugDisplayViewportInterface::OnViewportDefaultViewChanged(AZ::RPI::ViewPtr view)
{
ResetRenderState();
if (m_defaultInstance)
{
RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
UpdateAuxGeom(scene, nullptr);
}
else
{
auto viewportContextManager = AZ::Interface<AZ::RPI::ViewportContextRequestsInterface>::Get();
AZ::RPI::ViewportContextPtr viewportContextPtr = viewportContextManager->GetViewportContextById(m_viewportId);
UpdateAuxGeom(viewportContextPtr->GetRenderScene().get(), viewportContextPtr->GetDefaultView().get());
}
}
AtomDebugDisplayViewportInterface::~AtomDebugDisplayViewportInterface()
{
AzFramework::DebugDisplayRequestBus::Handler::BusDisconnect(m_viewportId);
AZ::RPI::ViewportContextIdNotificationBus::Handler::BusDisconnect();
m_viewportId = AzFramework::InvalidViewportId;
m_auxGeomPtr = nullptr;
}