123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h
- index 487205062..52297cd78 100644
- --- a/thirdparty/vhacd/inc/btScalar.h
- +++ b/thirdparty/vhacd/inc/btScalar.h
- @@ -535,6 +535,29 @@ struct btTypedObject {
- }
- };
-
- +// -- GODOT start --
- +// Cherry-picked from Bullet 2.88 to fix GH-27926
- +///align a pointer to the provided alignment, upwards
- +template <typename T>
- +T *btAlignPointer(T *unalignedPtr, size_t alignment)
- +{
- + struct btConvertPointerSizeT
- + {
- + union {
- + T *ptr;
- + size_t integer;
- + };
- + };
- + btConvertPointerSizeT converter;
- +
- + const size_t bit_mask = ~(alignment - 1);
- + converter.ptr = unalignedPtr;
- + converter.integer += alignment - 1;
- + converter.integer &= bit_mask;
- + return converter.ptr;
- +}
- +// -- GODOT end --
- +
- // -- GODOT start --
- }; // namespace VHACD
- // -- GODOT end --
- diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp
- index ce0e7f26f..8dee31e7e 100644
- --- a/thirdparty/vhacd/src/btAlignedAllocator.cpp
- +++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp
- @@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment)
-
- real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1));
- if (real) {
- - offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
- - ret = (void*)((real + sizeof(void*)) + offset);
- + // -- GODOT start --
- + // Synced with Bullet 2.88 to fix GH-27926
- + //offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
- + //ret = (void*)((real + sizeof(void*)) + offset);
- + ret = btAlignPointer(real + sizeof(void *), alignment);
- + // -- GODOT end --
- *((void**)(ret)-1) = (void*)(real);
- }
- else {
|