From f89f3fad21bcb369fc0f0bec13686b48ee0355f4 Mon Sep 17 00:00:00 2001 From: Pieter Vantorre Date: Tue, 20 Mar 2018 09:21:47 +0100 Subject: [PATCH] Use UE4's memory management functions. This fixes unexpected behavior on certain platforms for which UE4 specifically limits the maximum allocation size of malloc in favor of using optimized allocation schemes. --- .../SpinePlugin/Private/SpinePlugin.cpp | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp index c0dc79974..2de39adff 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp @@ -37,8 +37,26 @@ class FSpinePlugin : public SpinePlugin { IMPLEMENT_MODULE( FSpinePlugin, SpinePlugin ) -void FSpinePlugin::StartupModule() { } +// These should be filled with UE4's specific allocator functions. +extern "C" { + void _spSetMalloc( void* ( *_malloc ) ( size_t size ) ); + void _spSetFree( void( *_free ) ( void* ptr ) ); + void _spSetRealloc( void* ( *_realloc ) ( void* ptr, size_t size ) ); +} +static void * SpineMalloc( size_t size ) { + return FMemory::Malloc( size ); +} + +static void * SpineRealloc( void* ptr, size_t size ) { + return FMemory::Realloc( ptr, size ); +} + +void FSpinePlugin::StartupModule() { + _spSetMalloc( &SpineMalloc ); + _spSetRealloc( &SpineRealloc ); + _spSetFree( FMemory::Free ); +} void FSpinePlugin::ShutdownModule() { }