From fef53bf4bef749893418d5848445e3199efae887 Mon Sep 17 00:00:00 2001 From: amzn-sj Date: Wed, 16 Feb 2022 10:08:17 -0800 Subject: [PATCH] Update ProcessFromListOfVector2 API functions to use bulk queries. (#7658) --- .../Source/TerrainSystem/TerrainSystem.cpp | 58 +++++++++---------- .../Code/Source/TerrainSystem/TerrainSystem.h | 2 + 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp index 182cb84541..27c47b70c8 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp @@ -252,6 +252,20 @@ AZStd::vector TerrainSystem::GenerateInputPositionsFromRegion( return inPositions; } +AZStd::vector TerrainSystem::GenerateInputPositionsFromListOfVector2( + const AZStd::span& inPositionsVec2) const +{ + AZStd::vector inPositions; + inPositions.reserve(inPositionsVec2.size()); + + for (auto& pos : inPositionsVec2) + { + inPositions.emplace_back(AZ::Vector3(pos.GetX(), pos.GetY(), 0.0f)); + } + + return inPositions; +} + void TerrainSystem::MakeBulkQueries( const AZStd::span inPositions, AZStd::span outPositions, @@ -1043,14 +1057,9 @@ void TerrainSystem::ProcessHeightsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - surfacePoint.m_position.SetZ(GetHeightFromVector2(position, sampleFilter, &terrainExists)); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessHeightsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } void TerrainSystem::ProcessNormalsFromListOfVector2( @@ -1063,14 +1072,9 @@ void TerrainSystem::ProcessNormalsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - surfacePoint.m_normal = GetNormalFromVector2(position, sampleFilter, &terrainExists); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessNormalsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } void TerrainSystem::ProcessSurfaceWeightsFromListOfVector2( @@ -1083,14 +1087,9 @@ void TerrainSystem::ProcessSurfaceWeightsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - GetSurfaceWeightsFromVector2(position, surfacePoint.m_surfaceTags, sampleFilter, &terrainExists); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessSurfaceWeightsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } void TerrainSystem::ProcessSurfacePointsFromListOfVector2( @@ -1103,14 +1102,9 @@ void TerrainSystem::ProcessSurfacePointsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - GetSurfacePointFromVector2(position, surfacePoint, sampleFilter, &terrainExists); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessSurfacePointsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } AZStd::pair TerrainSystem::GetNumSamplesFromRegion( diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h index 502a89f711..cfc805fdce 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h @@ -321,6 +321,8 @@ namespace Terrain AZStd::vector GenerateInputPositionsFromRegion( const AZ::Aabb& inRegion, const AZ::Vector2& stepSize) const; + AZStd::vector GenerateInputPositionsFromListOfVector2( + const AZStd::span& inPositionsVec2) const; // AZ::TickBus::Handler overrides ... void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;