瀏覽代碼

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 年之前
父節點
當前提交
f89f3fad21
共有 1 個文件被更改,包括 19 次插入1 次删除
  1. 19 1
      spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp

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