Upgrade CollisionCooking to use new MeshAccessor

This commit is contained in:
Wojtek Figat
2025-02-24 23:46:44 +01:00
parent 754d321ef0
commit 21047ac8ac
3 changed files with 107 additions and 19 deletions

View File

@@ -4,8 +4,10 @@
#include "CollisionCooking.h"
#include "Engine/Threading/Task.h"
#include "Engine/Graphics/GPUBuffer.h"
#include "Engine/Graphics/Async/GPUTask.h"
#include "Engine/Graphics/Models/MeshBase.h"
#include "Engine/Graphics/Models/MeshAccessor.h"
#include "Engine/Threading/Threading.h"
#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Core/Log.h"
@@ -216,21 +218,11 @@ bool CollisionCooking::CookCollision(const Argument& arg, CollisionData::Seriali
const int32 vertexCount = vertexCounts[i];
if (vertexCount == 0)
continue;
const int32 vStride = vData.Length() / vertexCount;
if (vStride == sizeof(Float3))
Platform::MemoryCopy(finalVertexData.Get() + firstVertexIndex, vData.Get(), vertexCount * sizeof(Float3));
else
{
// This assumes that each vertex structure contains position as Float3 in the beginning
auto dst = finalVertexData.Get() + firstVertexIndex;
auto src = vData.Get();
for (int32 j = 0; j < vertexCount; j++)
{
*dst++ = *(Float3*)src;
src += vStride;
}
}
MeshAccessor accessor;
if (accessor.LoadBuffer(MeshBufferType::Vertex0, Span<byte>(vData), mesh.GetVertexBuffer(0)->GetVertexLayout()))
continue;
auto positionStream = accessor.Position();
positionStream.CopyTo(Span<Float3>(finalVertexData.Get() + firstVertexIndex, vertexCount));
vertexCounter += vertexCount;
if (needIndexBuffer)
@@ -242,9 +234,7 @@ bool CollisionCooking::CookCollision(const Argument& arg, CollisionData::Seriali
auto dst = finalIndexData.Get() + indexCounter;
auto src = iData.Get<uint16>();
for (int32 j = 0; j < indexCount; j++)
{
*dst++ = firstVertexIndex + *src++;
}
indexCounter += indexCount;
}
else
@@ -252,9 +242,7 @@ bool CollisionCooking::CookCollision(const Argument& arg, CollisionData::Seriali
auto dst = finalIndexData.Get() + indexCounter;
auto src = iData.Get<uint32>();
for (int32 j = 0; j < indexCount; j++)
{
*dst++ = firstVertexIndex + *src++;
}
indexCounter += indexCount;
}
}