diff --git a/include/Nazara/Physics3D/Collider3D.hpp b/include/Nazara/Physics3D/Collider3D.hpp index 52bf5e552..89e0a4879 100644 --- a/include/Nazara/Physics3D/Collider3D.hpp +++ b/include/Nazara/Physics3D/Collider3D.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -180,8 +181,8 @@ namespace Nz class NAZARA_PHYSICS3D_API ConvexCollider3D : public Collider3D { public: - ConvexCollider3D(const void* vertices, unsigned int vertexCount, unsigned int stride = sizeof(Vector3f), float tolerance = 0.002f, const Matrix4f& transformMatrix = Matrix4f::Identity()); - ConvexCollider3D(const void* vertices, unsigned int vertexCount, unsigned int stride, float tolerance, const Vector3f& translation, const Quaternionf& rotation = Quaternionf::Identity()); + ConvexCollider3D(SparsePtr vertices, unsigned int vertexCount, float tolerance = 0.002f, const Matrix4f& transformMatrix = Matrix4f::Identity()); + ConvexCollider3D(SparsePtr vertices, unsigned int vertexCount, float tolerance, const Vector3f& translation, const Quaternionf& rotation = Quaternionf::Identity()); ColliderType3D GetType() const override; @@ -193,7 +194,6 @@ namespace Nz std::vector m_vertices; Matrix4f m_matrix; float m_tolerance; - unsigned int m_vertexStride; }; class CylinderCollider3D; diff --git a/src/Nazara/Physics3D/Collider3D.cpp b/src/Nazara/Physics3D/Collider3D.cpp index f61f64efc..7cddffdbe 100644 --- a/src/Nazara/Physics3D/Collider3D.cpp +++ b/src/Nazara/Physics3D/Collider3D.cpp @@ -313,25 +313,22 @@ namespace Nz /****************************** ConvexCollider3D *******************************/ - ConvexCollider3D::ConvexCollider3D(const void* vertices, unsigned int vertexCount, unsigned int stride, float tolerance, const Matrix4f& transformMatrix) : + ConvexCollider3D::ConvexCollider3D(SparsePtr vertices, unsigned int vertexCount, float tolerance, const Matrix4f& transformMatrix) : m_matrix(transformMatrix), - m_tolerance(tolerance), - m_vertexStride(stride) + m_tolerance(tolerance) { - const UInt8* ptr = static_cast(vertices); - m_vertices.resize(vertexCount); - if (stride != sizeof(Vector3f)) + if (vertices.GetStride() != sizeof(Vector3f)) { for (unsigned int i = 0; i < vertexCount; ++i) - m_vertices[i] = *reinterpret_cast(ptr + stride*i); + m_vertices[i] = *vertices++; } else // Fast path std::memcpy(m_vertices.data(), vertices, vertexCount*sizeof(Vector3f)); } - ConvexCollider3D::ConvexCollider3D(const void* vertices, unsigned int vertexCount, unsigned int stride, float tolerance, const Vector3f& translation, const Quaternionf& rotation) : - ConvexCollider3D(vertices, vertexCount, stride, tolerance, Matrix4f::Transform(translation, rotation)) + ConvexCollider3D::ConvexCollider3D(SparsePtr vertices, unsigned int vertexCount, float tolerance, const Vector3f& translation, const Quaternionf& rotation) : + ConvexCollider3D(vertices, vertexCount, tolerance, Matrix4f::Transform(translation, rotation)) { }