public void setMultipleTargets(final boolean force) { if (force) { logger.fine("Copy Texture Pbuffer used!"); _useDirectRender = false; _texture = null; if (_pbuffer != null) { try { giveBackContext(); } catch (final LWJGLException ex) { } ContextManager.removeContext(_pbuffer); } } else { if ((Pbuffer.getCapabilities() & Pbuffer.RENDER_TEXTURE_SUPPORTED) != 0) { logger.fine("Render to Texture Pbuffer supported!"); if (_texture == null) { logger.fine("No RenderTexture used in init, falling back to Copy Texture PBuffer."); _useDirectRender = false; } else { _useDirectRender = true; } } else { logger.fine("Copy Texture Pbuffer supported!"); _texture = null; } } }
private void initPbuffer() { try { if (_pbuffer != null) { giveBackContext(); ContextManager.removeContext(_pbuffer); } final PixelFormat format = new PixelFormat( _settings.getAlphaBits(), _settings.getDepthBits(), _settings.getStencilBits()) .withSamples(_settings.getSamples()) .withBitsPerPixel(_settings.getColorDepth()) .withStereo(_settings.isStereo()); _pbuffer = new Pbuffer(_width, _height, format, _texture, null); final Object contextKey = _pbuffer; try { _pbuffer.makeCurrent(); } catch (final LWJGLException e) { throw new RuntimeException(e); } final LwjglContextCapabilities caps = new LwjglContextCapabilities(GLContext.getCapabilities()); ContextManager.addContext( contextKey, new RenderContext(contextKey, caps, ContextManager.getCurrentContext())); } catch (final Exception e) { logger.logp(Level.SEVERE, this.getClass().toString(), "initPbuffer()", "Exception", e); if (_texture != null && _useDirectRender) { logger.warning( "Your card claims to support Render to Texture but fails to enact it. Updating your driver might solve this problem."); logger.warning("Attempting to fall back to Copy Texture."); _texture = null; _useDirectRender = false; initPbuffer(); return; } logger.log(Level.WARNING, "Failed to create Pbuffer.", e); return; } try { activate(); _width = _pbuffer.getWidth(); _height = _pbuffer.getHeight(); deactivate(); } catch (final Exception e) { logger.log(Level.WARNING, "Failed to initialize created Pbuffer.", e); return; } }
public void cleanup() { ContextManager.removeContext(_pbuffer); _pbuffer.destroy(); }