diff --git a/jme3-core/src/main/java/com/jme3/util/ReflectionAllocator.java b/jme3-core/src/main/java/com/jme3/util/ReflectionAllocator.java index 6ddc5fb87..7bb8a6040 100644 --- a/jme3-core/src/main/java/com/jme3/util/ReflectionAllocator.java +++ b/jme3-core/src/main/java/com/jme3/util/ReflectionAllocator.java @@ -149,10 +149,21 @@ public final class ReflectionAllocator implements BufferAllocator { // first Object viewedBuffer = localViewedBufferMethod.invoke(toBeDestroyed); if (viewedBuffer != null) { - destroyDirectBuffer((Buffer) viewedBuffer); - } else { - Logger.getLogger(BufferUtils.class.getName()).log(Level.SEVERE, - "Buffer cannot be destroyed: {0}", toBeDestroyed); + if (viewedBuffer instanceof Buffer) { + destroyDirectBuffer((Buffer) viewedBuffer); + } else { + //on android there is an internal MemoryRef class that is returned and has a "free" method. + Method freeMethod = loadMethod(viewedBuffer.getClass().getName(), "free"); + if (freeMethod != null) { + freeMethod.invoke(viewedBuffer); + } else { + Logger.getLogger(BufferUtils.class.getName()).log(Level.SEVERE, + "Buffer cannot be destroyed: {0}, {1}", new Object[]{toBeDestroyed, viewedBuffer}); + } + } + } else { + Logger.getLogger(BufferUtils.class.getName()).log(Level.SEVERE, + "Buffer cannot be destroyed: {0}", toBeDestroyed); } } }