Prechádzať zdrojové kódy

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.
Pieter Vantorre 7 rokov pred
rodič
commit
f89f3fad21

+ 19 - 1
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() { }