diff --git a/Source/Engine/Physics/CollisionCooking.cpp b/Source/Engine/Physics/CollisionCooking.cpp index 070f49936..6769e50fc 100644 --- a/Source/Engine/Physics/CollisionCooking.cpp +++ b/Source/Engine/Physics/CollisionCooking.cpp @@ -10,6 +10,8 @@ #include #include +#define CONVEX_VERTEX_MIN 8 +#define CONVEX_VERTEX_MAX 255 #define ENSURE_CAN_COOK \ if (Physics::GetCooking() == nullptr) \ { \ @@ -27,7 +29,10 @@ bool CollisionCooking::CookConvexMesh(CookingInput& input, BytesContainer& outpu desc.points.stride = sizeof(Vector3); desc.points.data = input.VertexData; desc.flags = PxConvexFlag::eCOMPUTE_CONVEX; - desc.vertexLimit = input.ConvexVertexLimit; + if (input.ConvexVertexLimit == 0) + desc.vertexLimit = CONVEX_VERTEX_MAX; + else + desc.vertexLimit = (PxU16)Math::Clamp(input.ConvexVertexLimit, CONVEX_VERTEX_MIN, CONVEX_VERTEX_MAX); if (input.ConvexFlags & ConvexMeshGenerationFlags::SkipValidation) desc.flags |= PxConvexFlag::Enum::eDISABLE_MESH_VALIDATION; if (input.ConvexFlags & ConvexMeshGenerationFlags::UsePlaneShifting) @@ -83,9 +88,9 @@ bool CollisionCooking::CookTriangleMesh(CookingInput& input, BytesContainer& out bool CollisionCooking::CookCollision(const Argument& arg, CollisionData::SerializedOptions& outputOptions, BytesContainer& outputData) { - int32 convexVertexLimit = Math::Clamp(arg.ConvexVertexLimit, 8, 255); + int32 convexVertexLimit = Math::Clamp(arg.ConvexVertexLimit, CONVEX_VERTEX_MIN, CONVEX_VERTEX_MAX); if (arg.ConvexVertexLimit == 0) - convexVertexLimit = 255; + convexVertexLimit = CONVEX_VERTEX_MAX; DataContainer finalVertexData; DataContainer finalIndexData; @@ -106,19 +111,19 @@ bool CollisionCooking::CookCollision(const Argument& arg, CollisionData::Seriali auto lod = &arg.OverrideModelData->LODs[lodIndex]; const int32 meshesCount = lod->Meshes.Count(); - // Count vertex/index buffer sizes - int32 vCount = 0; - int32 iCount = 0; - for (int32 i = 0; i < meshesCount; i++) - { - const auto mesh = lod->Meshes[i]; - vCount += mesh->Positions.Count(); + // Count vertex/index buffer sizes + int32 vCount = 0; + int32 iCount = 0; + for (int32 i = 0; i < meshesCount; i++) + { + const auto mesh = lod->Meshes[i]; + vCount += mesh->Positions.Count(); - if (needIndexBuffer) - { - iCount += mesh->Indices.Count() * 3; - } + if (needIndexBuffer) + { + iCount += mesh->Indices.Count() * 3; } + } if (meshesCount == 1) { diff --git a/Source/Engine/Physics/CollisionCooking.h b/Source/Engine/Physics/CollisionCooking.h index b368af547..658f88428 100644 --- a/Source/Engine/Physics/CollisionCooking.h +++ b/Source/Engine/Physics/CollisionCooking.h @@ -24,13 +24,13 @@ public: struct CookingInput { - int32 VertexCount; - Vector3* VertexData; - int32 IndexCount; - void* IndexData; - bool Is16bitIndexData; - ConvexMeshGenerationFlags ConvexFlags; - int32 ConvexVertexLimit; + int32 VertexCount = 0; + Vector3* VertexData = nullptr; + int32 IndexCount = 0; + void* IndexData = nullptr; + bool Is16bitIndexData = false; + ConvexMeshGenerationFlags ConvexFlags = ConvexMeshGenerationFlags::None; + int32 ConvexVertexLimit = 255; }; /// @@ -38,21 +38,12 @@ public: /// struct Argument { - CollisionDataType Type; - ModelData* OverrideModelData; + CollisionDataType Type = CollisionDataType::None; + ModelData* OverrideModelData = nullptr; AssetReference Model; - int32 ModelLodIndex; - ConvexMeshGenerationFlags ConvexFlags; - int32 ConvexVertexLimit; - - Argument() - { - Type = CollisionDataType::None; - OverrideModelData = nullptr; - ModelLodIndex = 0; - ConvexFlags = ConvexMeshGenerationFlags::None; - ConvexVertexLimit = 255; - } + int32 ModelLodIndex = 0; + ConvexMeshGenerationFlags ConvexFlags = ConvexMeshGenerationFlags::None; + int32 ConvexVertexLimit = 255; }; ///