@Override public void postFrame() { objManager.deleteUnused(this); OpenCLObjectManager.getInstance().deleteUnusedObjects(); gl.resetStats(); }
public void cleanup() { logger.log(Level.FINE, "Deleting objects and invalidating state"); objManager.deleteAllObjects(this); OpenCLObjectManager.getInstance().deleteAllObjects(); statistics.clearMemory(); invalidateState(); }
private void updateFilter(Filter f) { int id = f.getId(); if (id == -1) { ib.position(0).limit(1); efx.alGenFilters(1, ib); id = ib.get(0); f.setId(id); objManager.registerObject(f); } if (f instanceof LowPassFilter) { LowPassFilter lpf = (LowPassFilter) f; efx.alFilteri(id, EFX.AL_FILTER_TYPE, EFX.AL_FILTER_LOWPASS); efx.alFilterf(id, EFX.AL_LOWPASS_GAIN, lpf.getVolume()); efx.alFilterf(id, EFX.AL_LOWPASS_GAINHF, lpf.getHighFreqVolume()); } else { throw new UnsupportedOperationException("Filter type unsupported: " + f.getClass().getName()); } f.clearUpdateNeeded(); }
/** * (Internal use only) Deletes all objects. * Must only be called when display is destroyed. */ public void deleteAllObjects(Object rendererObject){ deleteUnused(rendererObject); ArrayList<NativeObjectRef> refMapCopy = new ArrayList<NativeObjectRef>(refMap.values()); for (NativeObjectRef ref : refMapCopy) { deleteNativeObject(rendererObject, ref.objClone, ref, true, false); } assert refMap.size() == 0; }
public void resetGLObjects() { logger.log(Level.FINE, "Reseting objects and invalidating state"); objManager.resetObjects(); statistics.clearMemory(); invalidateState(); }
/** * Reclaims native resources used by this NativeObject. * It should be safe to call this method or even use the object * after it has been reclaimed, unless {@link NativeObjectManager#UNSAFE} is * set to true, in that case native buffers are also reclaimed which may * introduce instability. */ public void dispose() { if (objectManager != null) { objectManager.enqueueUnusedObject(this); } } }
/** * (Internal use only) Deletes unused NativeObjects. * Will delete at most {@link #MAX_REMOVES_PER_FRAME} objects. * * @param rendererObject The renderer object. * For graphics objects, {@link Renderer} is used, for audio, {#link AudioRenderer} is used. */ public void deleteUnused(Object rendererObject){ int removed = 0; while (removed < MAX_REMOVES_PER_FRAME && !userDeletionQueue.isEmpty()) { // Remove user requested objects. NativeObject obj = userDeletionQueue.pop(); deleteNativeObject(rendererObject, obj, null, true, true); removed++; } while (removed < MAX_REMOVES_PER_FRAME) { // Remove objects reclaimed by GC. NativeObjectRef ref = (NativeObjectRef) refQueue.poll(); if (ref == null) { break; } deleteNativeObject(rendererObject, ref.objClone, ref, true, false); removed++; } if (removed >= 1) { logger.log(Level.FINE, "NativeObjectManager: {0} native objects were removed from native", removed); } }
/** * (Internal use only) Deletes all objects. * Must only be called when display is destroyed. */ public void deleteAllObjects(Object rendererObject){ deleteUnused(rendererObject); ArrayList<NativeObjectRef> refMapCopy = new ArrayList<NativeObjectRef>(refMap.values()); for (NativeObjectRef ref : refMapCopy) { deleteNativeObject(rendererObject, ref.objClone, ref, true, false); } assert refMap.size() == 0; }
public void resetGLObjects() { logger.log(Level.FINE, "Reseting objects and invalidating state"); objManager.resetObjects(); statistics.clearMemory(); invalidateState(); }
/** * Reclaims native resources used by this NativeObject. * It should be safe to call this method or even use the object * after it has been reclaimed, unless {@link NativeObjectManager#UNSAFE} is * set to true, in that case native buffers are also reclaimed which may * introduce instability. */ public void dispose() { if (objectManager != null) { objectManager.enqueueUnusedObject(this); } } }
/** * (Internal use only) Deletes unused NativeObjects. * Will delete at most {@link #MAX_REMOVES_PER_FRAME} objects. * * @param rendererObject The renderer object. * For graphics objects, {@link Renderer} is used, for audio, {#link AudioRenderer} is used. */ public void deleteUnused(Object rendererObject){ int removed = 0; while (removed < MAX_REMOVES_PER_FRAME && !userDeletionQueue.isEmpty()) { // Remove user requested objects. NativeObject obj = userDeletionQueue.pop(); deleteNativeObject(rendererObject, obj, null, true, true); removed++; } while (removed < MAX_REMOVES_PER_FRAME) { // Remove objects reclaimed by GC. NativeObjectRef ref = (NativeObjectRef) refQueue.poll(); if (ref == null) { break; } deleteNativeObject(rendererObject, ref.objClone, ref, true, false); removed++; } if (removed >= 1) { logger.log(Level.FINE, "NativeObjectManager: {0} native objects were removed from native", removed); } }
private void updateAudioBuffer(AudioBuffer ab) { int id = ab.getId(); if (ab.getId() == -1) { ib.position(0).limit(1); al.alGenBuffers(1, ib); id = ib.get(0); ab.setId(id); objManager.registerObject(ab); } ab.getData().clear(); al.alBufferData(id, convertFormat(ab), ab.getData(), ab.getData().capacity(), ab.getSampleRate()); ab.clearUpdateNeeded(); }
objManager.deleteUnused(this);
private void destroyOpenAL() { if (audioDisabled) { alc.destroyALC(); return; } // stop any playing channels for (int i = 0; i < chanSrcs.length; i++) { if (chanSrcs[i] != null) { clearChannel(i); } } // delete channel-based sources ib.clear(); ib.put(channels); ib.flip(); al.alDeleteSources(channels.length, ib); // delete audio buffers and filters objManager.deleteAllObjects(this); if (supportEfx) { ib.position(0).limit(1); ib.put(0, reverbFx); efx.alDeleteEffects(1, ib); // If this is not allocated, why is it deleted? // Commented out to fix native crash in OpenAL. ib.position(0).limit(1); ib.put(0, reverbFxSlot); efx.alDeleteAuxiliaryEffectSlots(1, ib); } alc.destroyALC(); }
public void resetGLObjects() { logger.log(Level.FINE, "Reseting objects and invalidating state"); objManager.resetObjects(); statistics.clearMemory(); invalidateState(); }
objManager.registerObject(bo);
public void postFrame() { objManager.deleteUnused(this); // statistics.clearFrame(); }
public void cleanup() { logger.log(Level.FINE, "Deleting objects and invalidating state"); objManager.deleteAllObjects(this); statistics.clearMemory(); invalidateState(); }
public void updateFrameBuffer(FrameBuffer fb) { if (fb.getNumColorBuffers() == 0 && fb.getDepthBuffer() == null) { throw new IllegalArgumentException("The framebuffer: " + fb + "\nDoesn't have any color/depth buffers"); } int id = fb.getId(); if (id == -1) { glfbo.glGenFramebuffersEXT(intBuf1); id = intBuf1.get(0); fb.setId(id); objManager.registerObject(fb); statistics.onNewFrameBuffer(); } bindFrameBuffer(fb); FrameBuffer.RenderBuffer depthBuf = fb.getDepthBuffer(); if (depthBuf != null) { updateFrameBufferAttachment(fb, depthBuf); } for (int i = 0; i < fb.getNumColorBuffers(); i++) { FrameBuffer.RenderBuffer colorBuf = fb.getColorBuffer(i); updateFrameBufferAttachment(fb, colorBuf); } setReadDrawBuffers(fb); checkFrameBufferError(); fb.clearUpdateNeeded(); }
/** * 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(); }