Physics3D/ConvexCollider3D: Replace pointer with stride parameters by a SparsePtr
This commit is contained in:
parent
4c6f049e0d
commit
c221d53839
|
|
@ -13,6 +13,7 @@
|
||||||
#include <Nazara/Core/ObjectRef.hpp>
|
#include <Nazara/Core/ObjectRef.hpp>
|
||||||
#include <Nazara/Core/RefCounted.hpp>
|
#include <Nazara/Core/RefCounted.hpp>
|
||||||
#include <Nazara/Core/Signal.hpp>
|
#include <Nazara/Core/Signal.hpp>
|
||||||
|
#include <Nazara/Core/SparsePtr.hpp>
|
||||||
#include <Nazara/Math/Box.hpp>
|
#include <Nazara/Math/Box.hpp>
|
||||||
#include <Nazara/Math/Quaternion.hpp>
|
#include <Nazara/Math/Quaternion.hpp>
|
||||||
#include <Nazara/Math/Vector3.hpp>
|
#include <Nazara/Math/Vector3.hpp>
|
||||||
|
|
@ -180,8 +181,8 @@ namespace Nz
|
||||||
class NAZARA_PHYSICS3D_API ConvexCollider3D : public Collider3D
|
class NAZARA_PHYSICS3D_API ConvexCollider3D : public Collider3D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ConvexCollider3D(const void* vertices, unsigned int vertexCount, unsigned int stride = sizeof(Vector3f), float tolerance = 0.002f, const Matrix4f& transformMatrix = Matrix4f::Identity());
|
ConvexCollider3D(SparsePtr<const Vector3f> vertices, unsigned int vertexCount, 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<const Vector3f> vertices, unsigned int vertexCount, float tolerance, const Vector3f& translation, const Quaternionf& rotation = Quaternionf::Identity());
|
||||||
|
|
||||||
ColliderType3D GetType() const override;
|
ColliderType3D GetType() const override;
|
||||||
|
|
||||||
|
|
@ -193,7 +194,6 @@ namespace Nz
|
||||||
std::vector<Vector3f> m_vertices;
|
std::vector<Vector3f> m_vertices;
|
||||||
Matrix4f m_matrix;
|
Matrix4f m_matrix;
|
||||||
float m_tolerance;
|
float m_tolerance;
|
||||||
unsigned int m_vertexStride;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CylinderCollider3D;
|
class CylinderCollider3D;
|
||||||
|
|
|
||||||
|
|
@ -313,25 +313,22 @@ namespace Nz
|
||||||
|
|
||||||
/****************************** ConvexCollider3D *******************************/
|
/****************************** ConvexCollider3D *******************************/
|
||||||
|
|
||||||
ConvexCollider3D::ConvexCollider3D(const void* vertices, unsigned int vertexCount, unsigned int stride, float tolerance, const Matrix4f& transformMatrix) :
|
ConvexCollider3D::ConvexCollider3D(SparsePtr<const Vector3f> vertices, unsigned int vertexCount, float tolerance, const Matrix4f& transformMatrix) :
|
||||||
m_matrix(transformMatrix),
|
m_matrix(transformMatrix),
|
||||||
m_tolerance(tolerance),
|
m_tolerance(tolerance)
|
||||||
m_vertexStride(stride)
|
|
||||||
{
|
{
|
||||||
const UInt8* ptr = static_cast<const UInt8*>(vertices);
|
|
||||||
|
|
||||||
m_vertices.resize(vertexCount);
|
m_vertices.resize(vertexCount);
|
||||||
if (stride != sizeof(Vector3f))
|
if (vertices.GetStride() != sizeof(Vector3f))
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < vertexCount; ++i)
|
for (unsigned int i = 0; i < vertexCount; ++i)
|
||||||
m_vertices[i] = *reinterpret_cast<const Vector3f*>(ptr + stride*i);
|
m_vertices[i] = *vertices++;
|
||||||
}
|
}
|
||||||
else // Fast path
|
else // Fast path
|
||||||
std::memcpy(m_vertices.data(), vertices, vertexCount*sizeof(Vector3f));
|
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::ConvexCollider3D(SparsePtr<const Vector3f> vertices, unsigned int vertexCount, float tolerance, const Vector3f& translation, const Quaternionf& rotation) :
|
||||||
ConvexCollider3D(vertices, vertexCount, stride, tolerance, Matrix4f::Transform(translation, rotation))
|
ConvexCollider3D(vertices, vertexCount, tolerance, Matrix4f::Transform(translation, rotation))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue