fix placement new[], see discussion here:
http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=1787&p=10252#p10252
This commit is contained in:
@@ -52,7 +52,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ATTRIBUTE_ALIGNED16(class) Handle : public btBroadphaseProxy
|
class Handle : public btBroadphaseProxy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BT_DECLARE_ALIGNED_ALLOCATOR();
|
BT_DECLARE_ALIGNED_ALLOCATOR();
|
||||||
@@ -274,6 +274,7 @@ m_invalidPair(0)
|
|||||||
// allocate handles buffer and put all handles on free list
|
// allocate handles buffer and put all handles on free list
|
||||||
m_pHandlesRawPtr = btAlignedAlloc(sizeof(Handle)*maxHandles,16);
|
m_pHandlesRawPtr = btAlignedAlloc(sizeof(Handle)*maxHandles,16);
|
||||||
m_pHandles = new(m_pHandlesRawPtr) Handle[maxHandles];
|
m_pHandles = new(m_pHandlesRawPtr) Handle[maxHandles];
|
||||||
|
btAssert(m_pHandlesRawPtr==m_pHandles); //placement new[] should just return the same pointer
|
||||||
|
|
||||||
m_maxHandles = maxHandles;
|
m_maxHandles = maxHandles;
|
||||||
m_numHandles = 0;
|
m_numHandles = 0;
|
||||||
|
|||||||
@@ -145,11 +145,16 @@ typedef float btScalar;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BT_DECLARE_ALIGNED_ALLOCATOR() \
|
#define BT_DECLARE_ALIGNED_ALLOCATOR() \
|
||||||
SIMD_FORCE_INLINE void* operator new(size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes,16); } \
|
SIMD_FORCE_INLINE void* operator new(size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes,16); } \
|
||||||
SIMD_FORCE_INLINE void operator delete(void* ptr) { btAlignedFree(ptr); } \
|
SIMD_FORCE_INLINE void operator delete(void* ptr) { btAlignedFree(ptr); } \
|
||||||
SIMD_FORCE_INLINE void* operator new(size_t, void* ptr) { return ptr; } \
|
SIMD_FORCE_INLINE void* operator new(size_t, void* ptr) { return ptr; } \
|
||||||
SIMD_FORCE_INLINE void operator delete(void*, void*) { } \
|
SIMD_FORCE_INLINE void operator delete(void*, void*) { } \
|
||||||
|
SIMD_FORCE_INLINE void* operator new[](size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes,16); } \
|
||||||
|
SIMD_FORCE_INLINE void operator delete[](void* ptr) { btAlignedFree(ptr); } \
|
||||||
|
SIMD_FORCE_INLINE void* operator new[](size_t, void* ptr) { return ptr; } \
|
||||||
|
SIMD_FORCE_INLINE void operator delete[](void*, void*) { } \
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user