Fixes for using the DebugDisplayRequestBus in game mode
This commit is contained in:
+31
-7
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user