/** * Causes our shared texture renderer - used to draw cached versions of all frames - to be recreated on the next * render loop. */ public static void resetTextureRenderer(final Object queueKey) { final Callable<Void> exe = new Callable<Void>() { public Void call() { if (UIContainer._textureRenderer != null) { UIContainer._textureRenderer.cleanup(); } UIContainer._textureRenderer = null; return null; } }; GameTaskQueueManager.getManager(queueKey).render(exe); }
/** * This method adds <code>callable</code> to the queue to be invoked in the render() method in the OpenGL thread. * The Future returned may be utilized to cancel the task or wait for the return object. * * @param callable * @return Future<V> */ public <V> Future<V> render(final Callable<V> callable) { return getQueue(GameTaskQueue.RENDER).enqueue(callable); } }
public static GameTaskQueueManager getManager(final Object key) { synchronized (MAP_LOCK) { GameTaskQueueManager manager = _managers.get(key); if (manager == null) { manager = new GameTaskQueueManager(); _managers.put(key, manager); } return manager; } }
@Override public boolean render(final Renderer renderer) { // Execute renderQueue item GameTaskQueueManager.getManager(ContextManager.getCurrentContext()).getQueue(GameTaskQueue.RENDER) .execute(renderer); // Clean up card garbage such as textures, vbos, etc. ContextGarbageCollector.doRuntimeCleanup(renderer); _root.onDraw(renderer); return true; } }
@Override public boolean render(final Renderer renderer) { if (Constants.stats && labGraph == null) { setupStatGraphs(renderer); setupStats(); } // Execute renderQueue items GameTaskQueueManager.getManager(ParticleEditorFrame.GLOBAL_CONTEXT).getQueue(GameTaskQueue.RENDER) .execute(renderer); // Clean up card garbage such as textures, vbos, etc. ContextGarbageCollector.doRuntimeCleanup(renderer); rootNode.draw(renderer); if (Constants.stats) { StatCollector.update(); statNode.draw(renderer); } return true; }
/** * Causes our shared texture renderer - used to draw cached versions of all containers - to be recreated on the next * render loop. */ public static void resetTextureRenderer(final Object queueKey) { final Callable<Void> exe = new Callable<Void>() { public Void call() { if (UIContainer._textureRenderer != null) { UIContainer._textureRenderer.cleanup(); } UIContainer._textureRenderer = null; return null; } }; GameTaskQueueManager.getManager(queueKey).render(exe); }
public void update(final ReadOnlyTimer timer) { final double tpf = timer.getTimePerFrame(); // Execute update queue items GameTaskQueueManager.getManager(ParticleEditorFrame.GLOBAL_CONTEXT).getQueue(GameTaskQueue.UPDATE).execute(); _logicalLayer.checkTriggers(tpf); rootNode.updateGeometricState(tpf); if (Constants.stats) { final Camera cam = Camera.getCurrentCamera(); if (cam != null) { labGraph.setTranslation((cam.getWidth() - .5f * labGraph.getWidth()), (.5f * labGraph.getHeight()), 0); } statNode.updateGeometricState(tpf); } }
/** * This method adds <code>callable</code> to the queue to be invoked in the update() method in the OpenGL thread. * The Future returned may be utilized to cancel the task or wait for the return object. * * @param callable * @return Future<V> */ public <V> Future<V> update(final Callable<V> callable) { return getQueue(GameTaskQueue.UPDATE).enqueue(callable); }
public static GameTaskQueueManager getManager(final Object key) { synchronized (MAP_LOCK) { GameTaskQueueManager manager = _managers.get(key); if (manager == null) { manager = new GameTaskQueueManager(); _managers.put(key, manager); } return manager; } }
private void changeTexture() { try { final int result = _textureChooser.showOpenDialog(this); if (result == JFileChooser.CANCEL_OPTION) { return; } final File textFile = _textureChooser.getSelectedFile(); _prefs.put("texture_dir", textFile.getParent()); _newTexture = textFile; GameTaskQueueManager.getManager(ParticleEditorFrame.GLOBAL_CONTEXT).render(new Callable<Object>() { public Object call() throws Exception { loadApplyTexture(); return null; } }); final ImageIcon icon = new ImageIcon(getToolkit().createImage(textFile.getAbsolutePath())); _imageLabel.setIcon(icon); validate(); } catch (final Exception ex) { logger.logp(Level.SEVERE, this.getClass().toString(), "changeTexture()", "Exception", ex); } }
/** * This method adds <code>callable</code> to the queue to be invoked in the update() method in the OpenGL thread. * The Future returned may be utilized to cancel the task or wait for the return object. * * @param callable * @return Future<V> */ public <V> Future<V> update(final Callable<V> callable) { return getQueue(GameTaskQueue.UPDATE).enqueue(callable); }
private static void handleVBODelete(final Renderer deleter, final Multimap<Object, Integer> idMap) { Object currentGLRef = null; // Grab the current context, if any. if (deleter != null && ContextManager.getCurrentContext() != null) { currentGLRef = ContextManager.getCurrentContext().getGlContextRep(); } // For each affected context... for (final Object glref : idMap.keySet()) { // If we have a deleter and the context is current, immediately delete if (deleter != null && glref.equals(currentGLRef)) { deleter.deleteVBOs(idMap.get(glref)); } // Otherwise, add a delete request to that context's render task queue. else { GameTaskQueueManager.getManager(ContextManager.getContextForRef(glref)).render( new RendererCallable<Void>() { public Void call() throws Exception { getRenderer().deleteVBOs(idMap.get(glref)); return null; } }); } } }
/** * This method adds <code>callable</code> to the queue to be invoked in the render() method in the OpenGL thread. * The Future returned may be utilized to cancel the task or wait for the return object. * * @param callable * @return Future<V> */ public <V> Future<V> render(final Callable<V> callable) { return getQueue(GameTaskQueue.RENDER).enqueue(callable); } }
private static void handleVAODelete(final IShaderUtils utils, final Multimap<RenderContextRef, Integer> idMap) { RenderContextRef currentGLRef = null; // Grab the current context, if any. if (utils != null && ContextManager.getCurrentContext() != null) { currentGLRef = ContextManager.getCurrentContext().getGlContextRef(); } // For each affected context... for (final RenderContextRef ref : idMap.keySet()) { // If we have a deleter and the context is current, immediately delete if (utils != null && ref.equals(currentGLRef)) { utils.deleteVertexArrays(idMap.get(ref)); } // Otherwise, add a delete request to that context's render task queue. else { GameTaskQueueManager.getManager(ContextManager.getContextForRef(ref)) .render(new RendererCallable<Void>() { public Void call() throws Exception { getRenderer().getShaderUtils().deleteVertexArrays(idMap.get(ref)); return null; } }); } } }
public void moveTasksTo(final GameTaskQueueManager manager) { for (final String key : _managedQueues.keySet()) { final GameTaskQueue q = manager.getQueue(key); final GameTaskQueue mq = _managedQueues.get(key); if (q != null && mq.size() > 0) { q.enqueueAll(mq); } } }
private static void handleDisplayListDelete(final Renderer deleter, final Multimap<Object, Integer> idMap) { Object currentGLRef = null; // Grab the current context, if any. if (deleter != null && ContextManager.getCurrentContext() != null) { currentGLRef = ContextManager.getCurrentContext().getGlContextRep(); } // For each affected context... for (final Object glref : idMap.keySet()) { // If we have a deleter and the context is current, immediately delete if (deleter != null && glref.equals(currentGLRef)) { deleter.deleteDisplayLists(idMap.get(glref)); } // Otherwise, add a delete request to that context's render task queue. else { GameTaskQueueManager.getManager(ContextManager.getContextForRef(glref)).render( new RendererCallable<Void>() { public Void call() throws Exception { getRenderer().deleteDisplayLists(idMap.get(glref)); return null; } }); } } } }
public void moveTasksTo(final GameTaskQueueManager manager) { for (final String key : _managedQueues.keySet()) { final GameTaskQueue q = manager.getQueue(key); final GameTaskQueue mq = _managedQueues.get(key); if (q != null && mq.size() > 0) { q.enqueueAll(mq); } } }
private static void handleTextureDelete(final Renderer deleter, final Multimap<Object, Integer> idMap, final Map<Object, Future<Void>> futureStore) { Object currentGLRef = null; // Grab the current context, if any. if (deleter != null && ContextManager.getCurrentContext() != null) { currentGLRef = ContextManager.getCurrentContext().getGlContextRep(); } // For each affected context... for (final Object glref : idMap.keySet()) { // If we have a deleter and the context is current, immediately delete if (currentGLRef != null && (!Constants.useMultipleContexts || glref.equals(currentGLRef))) { deleter.deleteTextureIds(idMap.get(glref)); } // Otherwise, add a delete request to that context's render task queue. else { final Future<Void> future = GameTaskQueueManager.getManager(ContextManager.getContextForRef(glref)) .render(new RendererCallable<Void>() { public Void call() throws Exception { getRenderer().deleteTextureIds(idMap.get(glref)); return null; } }); if (futureStore != null) { futureStore.put(glref, future); } } } }