|
|
|
@ -51,6 +51,12 @@ public class NativeObjectManager { |
|
|
|
|
|
|
|
|
|
private static final Logger logger = Logger.getLogger(NativeObjectManager.class.getName()); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* The maximum number of objects that should be removed per frame. |
|
|
|
|
* If the limit is reached, no more objects will be removed for that frame. |
|
|
|
|
*/ |
|
|
|
|
private static final int MAX_REMOVES_PER_FRAME = 100; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* The queue will receive notifications of {@link NativeObject}s which are no longer |
|
|
|
|
* referenced. |
|
|
|
@ -91,15 +97,19 @@ public class NativeObjectManager { |
|
|
|
|
* Deletes unused GLObjects |
|
|
|
|
*/ |
|
|
|
|
public void deleteUnused(Object rendererObject){ |
|
|
|
|
while (true){ |
|
|
|
|
int removed = 0; |
|
|
|
|
while (removed < MAX_REMOVES_PER_FRAME) { |
|
|
|
|
NativeObjectRef ref = (NativeObjectRef) refQueue.poll(); |
|
|
|
|
if (ref == null) |
|
|
|
|
return; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
refList.remove(ref); |
|
|
|
|
ref.objClone.deleteObject(rendererObject); |
|
|
|
|
if (logger.isLoggable(Level.FINEST)) |
|
|
|
|
logger.log(Level.FINEST, "Deleted: {0}", ref.objClone); |
|
|
|
|
removed++; |
|
|
|
|
} |
|
|
|
|
if (removed >= 1) { |
|
|
|
|
//System.out.println("NativeObjectManager: " + removed + " native objects were removed from GL");
|
|
|
|
|
logger.log(Level.FINE, "NativeObjectManager: {0} native objects were removed from GL", removed); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|