@Override public void clearUpdateNeeded(){ super.clearUpdateNeeded(); dataSizeChanged = false; }
/** * @return A shallow clone of this image. The data is not cloned. */ @Override public Image clone(){ Image clone = (Image) super.clone(); clone.mipMapSizes = mipMapSizes != null ? mipMapSizes.clone() : null; clone.data = data != null ? new ArrayList<ByteBuffer>(data) : null; clone.lastTextureState = new LastTextureState(); clone.setUpdateNeeded(); return clone; }
public NativeObjectRef(ReferenceQueue<Object> refQueue, NativeObject obj){ super(obj.handleRef, refQueue); assert obj.handleRef != null; this.realObj = new WeakReference<NativeObject>(obj); this.objClone = obj.createDestructableClone(); assert objClone.getId() == obj.getId(); } }
/** * (Internal use only) Register a <code>NativeObject</code> with the manager. */ public void registerObject(NativeObject obj) { if (obj.getId() <= 0) { throw new IllegalArgumentException("object id must be greater than zero"); } NativeObjectRef ref = new NativeObjectRef(refQueue, obj); refMap.put(obj.getUniqueId(), ref); obj.setNativeObjectManager(this); if (logger.isLoggable(Level.FINEST)) { logger.log(Level.FINEST, "Registered: {0}", new String[]{obj.toString()}); } }
obj; assert realObj == null || obj.getId() == realObj.getId(); if (obj.getId() <= 0) { logger.log(Level.WARNING, "Object already deleted: {0}", obj.getClass().getSimpleName() + "/" + obj.getId()); } else { NativeObjectRef ref2 = refMap.remove(obj.getUniqueId()); if (ref2 == null) { throw new IllegalArgumentException("The " + obj + " NativeObject is not " int id = obj.getId(); obj.deleteObject(rendererObject); assert obj.getId() == NativeObject.INVALID_ID; realObj.resetObject(); realObj.deleteNativeBuffersInternal();
/** * Deletes all objects. Must only be called when display is destroyed. */ public void deleteAllObjects(Object rendererObject){ deleteUnused(rendererObject); for (NativeObjectRef ref : refList){ ref.objClone.deleteObject(rendererObject); NativeObject realObj = ref.realObj.get(); if (realObj != null){ // Note: make sure to reset them as well // They may get used in a new renderer in the future realObj.resetObject(); } } refList.clear(); }
@Override public void setUpdateNeeded(){ super.setUpdateNeeded(); resetLocations(); }
/** * (Internal use only) Resets all {@link NativeObject}s. * This is typically called when the context is restarted. */ public void resetObjects(){ for (NativeObjectRef ref : refMap.values()) { // Must use the real object here, for this to be effective. NativeObject realObj = ref.realObj.get(); if (realObj == null) { continue; } realObj.resetObject(); if (logger.isLoggable(Level.FINEST)) { logger.log(Level.FINEST, "Reset: {0}", realObj); } } refMap.clear(); refQueue = new ReferenceQueue<Object>(); }
public NativeObjectRef(NativeObject obj){ super(obj.handleRef, refQueue); assert obj.handleRef != null; this.realObj = new WeakReference<NativeObject>(obj); this.objClone = obj.createDestructableClone(); } }
/** * Deletes unused GLObjects */ public void deleteUnused(Object rendererObject){ while (true){ NativeObjectRef ref = (NativeObjectRef) refQueue.poll(); if (ref == null) return; refList.remove(ref); ref.objClone.deleteObject(rendererObject); if (logger.isLoggable(Level.FINEST)) logger.log(Level.FINEST, "Deleted: {0}", ref.objClone); } }
/** * Register a GLObject with the manager. */ public void registerForCleanup(NativeObject obj){ NativeObjectRef ref = new NativeObjectRef(obj); refList.add(ref); if (logger.isLoggable(Level.FINEST)) logger.log(Level.FINEST, "Registered: {0}", new String[]{obj.toString()}); }
/** * Package-private version of {@link #deleteNativeBuffers() }, to be used * from the {@link NativeObjectManager}. */ void deleteNativeBuffersInternal() { deleteNativeBuffers(); }
obj; assert realObj == null || obj.getId() == realObj.getId(); if (obj.getId() <= 0) { logger.log(Level.WARNING, "Object already deleted: {0}", obj.getClass().getSimpleName() + "/" + obj.getId()); } else { NativeObjectRef ref2 = refMap.remove(obj.getUniqueId()); if (ref2 == null) { throw new IllegalArgumentException("The " + obj + " NativeObject is not " int id = obj.getId(); obj.deleteObject(rendererObject); assert obj.getId() == NativeObject.INVALID_ID; realObj.resetObject(); realObj.deleteNativeBuffersInternal();
/** * (Internal use only) Register a <code>NativeObject</code> with the manager. */ public void registerObject(NativeObject obj) { if (obj.getId() <= 0) { throw new IllegalArgumentException("object id must be greater than zero"); } NativeObjectRef ref = new NativeObjectRef(refQueue, obj); refMap.put(obj.getUniqueId(), ref); obj.setNativeObjectManager(this); if (logger.isLoggable(Level.FINEST)) { logger.log(Level.FINEST, "Registered: {0}", new String[]{obj.toString()}); } }
/** * Sets the update needed flag, while also checking if mipmaps * need to be regenerated. */ @Override public void setUpdateNeeded() { super.setUpdateNeeded(); if (isGeneratedMipmapsRequired() && !hasMipmaps()) { // Mipmaps are no longer valid, since the image was changed. setMipmapsGenerated(false); } }
/** * Resets all {@link NativeObject}s. */ public void resetObjects(){ for (NativeObjectRef ref : refList){ // here we use the actual obj not the clone, // otherwise its useless NativeObject realObj = ref.realObj.get(); if (realObj == null) continue; realObj.resetObject(); if (logger.isLoggable(Level.FINEST)) logger.log(Level.FINEST, "Reset: {0}", realObj); } refList.clear(); }
@Override protected void deleteNativeBuffers() { super.deleteNativeBuffers(); if (previousData != null) { BufferUtils.destroyDirectBuffer(previousData); previousData = null; } }
/** * Creates a deep clone of the {@link VertexBuffer}. * * @return Deep clone of this buffer */ @Override public VertexBuffer clone(){ // NOTE: Superclass GLObject automatically creates shallow clone // e.g re-use ID. VertexBuffer vb = (VertexBuffer) super.clone(); vb.handleRef = new Object(); vb.id = -1; if (data != null) { // Make sure to pass a read-only buffer to clone so that // the position information doesn't get clobbered by another // reading thread during cloning (and vice versa) since this is // a purely read-only operation. vb.updateData(BufferUtils.clone(getDataReadOnly())); } return vb; }
public NativeObjectRef(ReferenceQueue<Object> refQueue, NativeObject obj){ super(obj.handleRef, refQueue); assert obj.handleRef != null; this.realObj = new WeakReference<NativeObject>(obj); this.objClone = obj.createDestructableClone(); assert objClone.getId() == obj.getId(); } }
@Override public void setUpdateNeeded(){ super.setUpdateNeeded(); resetLocations(); }