From ea965dc78aa2a0922e2594cf9a84cbab5740f9c4 Mon Sep 17 00:00:00 2001 From: bosnichd Date: Thu, 22 Apr 2021 16:07:20 -0600 Subject: [PATCH] Fix for "GameLauncher crashes silently after any interaction within it" Fix for "GameLauncher crashes silently after any interaction within it" --- Gems/Gestures/Code/CMakeLists.txt | 3 +++ .../Include/Gestures/IGestureRecognizer.h | 27 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Gems/Gestures/Code/CMakeLists.txt b/Gems/Gestures/Code/CMakeLists.txt index fe0fd9d98b..c05b39b72c 100644 --- a/Gems/Gestures/Code/CMakeLists.txt +++ b/Gems/Gestures/Code/CMakeLists.txt @@ -20,6 +20,9 @@ ly_add_target( PUBLIC Include BUILD_DEPENDENCIES + PUBLIC + Gem::Atom_RPI.Public + AZ::AtomCore PRIVATE Legacy::CryCommon ) diff --git a/Gems/Gestures/Code/Include/Gestures/IGestureRecognizer.h b/Gems/Gestures/Code/Include/Gestures/IGestureRecognizer.h index 3f71cd4b62..4b5b7726d8 100644 --- a/Gems/Gestures/Code/Include/Gestures/IGestureRecognizer.h +++ b/Gems/Gestures/Code/Include/Gestures/IGestureRecognizer.h @@ -19,6 +19,9 @@ #include #include +#include +#include + //////////////////////////////////////////////////////////////////////////////////////////////////// namespace Gestures { @@ -184,8 +187,16 @@ namespace Gestures return; } - const AZ::Vector2 eventScreenPositionPixels = positionData2D->ConvertToScreenSpaceCoordinates(static_cast(gEnv->pRenderer->GetWidth()), - static_cast(gEnv->pRenderer->GetHeight())); + auto atomViewportRequests = AZ::Interface::Get(); + AZ::RPI::ViewportContextPtr viewportContext = atomViewportRequests->GetDefaultViewportContext(); + if (viewportContext == nullptr) + { + return; + } + + AzFramework::WindowSize windowSize = viewportContext->GetViewportSize(); + const AZ::Vector2 eventScreenPositionPixels = positionData2D->ConvertToScreenSpaceCoordinates(static_cast(windowSize.m_width), + static_cast(windowSize.m_height)); if (inputChannel.IsStateBegan()) { o_hasBeenConsumed = OnPressedEvent(eventScreenPositionPixels, pointerIndex); @@ -225,8 +236,16 @@ namespace Gestures //////////////////////////////////////////////////////////////////////////////////////////////// inline void IRecognizer::UpdateNormalizedPositionAndDeltaFromScreenPosition(const AZ::Vector2& screenPositionPixels) { - const AZ::Vector2 normalizedPosition(screenPositionPixels.GetX() / static_cast(gEnv->pRenderer->GetWidth()), - screenPositionPixels.GetY() / static_cast(gEnv->pRenderer->GetHeight())); + auto atomViewportRequests = AZ::Interface::Get(); + AZ::RPI::ViewportContextPtr viewportContext = atomViewportRequests->GetDefaultViewportContext(); + if (viewportContext == nullptr) + { + return; + } + + AzFramework::WindowSize windowSize = viewportContext->GetViewportSize(); + const AZ::Vector2 normalizedPosition(screenPositionPixels.GetX() / static_cast(windowSize.m_width), + screenPositionPixels.GetY() / static_cast(windowSize.m_height)); AzFramework::InputChannel::PositionData2D::UpdateNormalizedPositionAndDelta(normalizedPosition); } }