List of usage examples for org.lwjgl.opengl EXTFramebufferObject GL_FRAMEBUFFER_EXT
int GL_FRAMEBUFFER_EXT
To view the source code for org.lwjgl.opengl EXTFramebufferObject GL_FRAMEBUFFER_EXT.
Click Source Link
From source file:a1.gui.GUI_Map.java
License:Open Source License
public void CreateLightMap() { //Coord screen_size = new Coord(Config.getScreenWidth(), Config.getScreenHeight()); //Coord screen_coord = new Coord(GUI.map.mc).sub(screen_size.div(2)); List<Coord> lst = new ArrayList<Coord>(); for (RenderPart p : render_parts) { Drawable d = p.owner.getattr(Drawable.class); if (d != null) { if (d.name.contains("fir")) { lst.add(p.dc);//from ww w . j a v a 2s .c om } if (d.name.contains("player")) { lst.add(p.dc); } } } // for (Obj o : ObjCache.objs.values()) { // Drawable d = o.getattr(Drawable.class); // if (d != null) { // if (d.name.contains("tree")) { // if (o.getpos().in_rect(screen_coord, screen_size)) // lst.add(o.getpos()); // } // } // } if (first) { first = false; boolean FBOEnabled = GLContext.getCapabilities().GL_EXT_framebuffer_object; if (!FBOEnabled) Log.info("No FBO"); myFBOId = EXTFramebufferObject.glGenFramebuffersEXT(); //LightMap = GL11.glGenTextures(); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, myFBOId); EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, GL11.GL_TEXTURE_2D, LightMap, 0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); } //ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 4); //GL11.glReadPixels(0, 0, 1024, 768, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, bb); // ? FBO ? ? EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, myFBOId); // GL11.glPushAttrib(GL11.GL_VIEWPORT_BIT); // ? // GL11.glViewport( 0, 0, 1024, 1024 ); // // ? // ? GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glClearColor(0.3f, 0.3f, 0.4f, 1.0f); GL11.glClear(GL_COLOR_BUFFER_BIT); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); // ? ? ? for (Coord c : lst) DrawLight(c, 100, 100); /*GL11.glTranslatef(0, 0, -6f); GL11.glBegin(GL11.GL_QUADS); GL11.glVertex3f(0, 0, 0); GL11.glVertex3f(200, 0, 0); GL11.glVertex3f(200, 200, 0); GL11.glVertex3f(0, 200, 0); GL11.glEnd();*/ // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); // GL11.glPopAttrib(); // GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); // // //GL11.glBindTexture(GL11.GL_TEXTURE_2D, LightMap); //Render2D.CheckError(); // ? - ? //GL11.glCopyTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, 0, 0, 1024, 1024, 0); //GL11.glCopyTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1024, 1024); //Render2D.CheckError(); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); }
From source file:com.ardor3d.framework.lwjgl.LwjglHeadlessCanvas.java
License:Open Source License
protected void init() { final int width = _settings.getWidth(); final int height = _settings.getHeight(); try {/* w ww . j a v a 2 s. c o m*/ // Create a Pbuffer so we can have a valid gl context to work with final PixelFormat format = new PixelFormat(_settings.getAlphaBits(), _settings.getDepthBits(), _settings.getStencilBits()); _buff = new Pbuffer(1, 1, format, null); _buff.makeCurrent(); } catch (final LWJGLException ex) { ex.printStackTrace(); } // Set up our Ardor3D context and capabilities objects final LwjglContextCapabilities caps = new LwjglContextCapabilities(GLContext.getCapabilities()); final RenderContext currentContext = new RenderContext(this, caps, null); if (!caps.isFBOSupported()) { throw new Ardor3dException("Headless requires FBO support."); } if (caps.isFBOMultisampleSupported() && caps.isFBOBlitSupported() && _settings.getSamples() > 0) { _useMSAA = true; } // Init our FBO. final IntBuffer buffer = BufferUtils.createIntBuffer(1); EXTFramebufferObject.glGenFramebuffersEXT(buffer); // generate id // Bind the FBO _fboID = buffer.get(0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, _fboID); // initialize our color renderbuffer EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _colorRBID = buffer.get(0); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _colorRBID); EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, GL11.GL_RGBA, width, height); // Attach color renderbuffer to framebuffer EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _colorRBID); // initialize our depth renderbuffer EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _depthRBID = buffer.get(0); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _depthRBID); EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, GL11.GL_DEPTH_COMPONENT, width, height); // Attach depth renderbuffer to framebuffer EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _depthRBID); // Check FBO complete LwjglTextureRenderer.checkFBOComplete(_fboID); // Now do it all again for multisample, if requested and supported if (_useMSAA) { // Init our ms FBO. EXTFramebufferObject.glGenFramebuffersEXT(buffer); // generate id // Bind the ms FBO _msfboID = buffer.get(0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, _msfboID); // initialize our ms color renderbuffer EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _mscolorRBID = buffer.get(0); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _mscolorRBID); EXTFramebufferMultisample.glRenderbufferStorageMultisampleEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _settings.getSamples(), GL11.GL_RGBA, width, height); // Attach ms color renderbuffer to ms framebuffer EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _mscolorRBID); // initialize our ms depth renderbuffer EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _msdepthRBID = buffer.get(0); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _msdepthRBID); EXTFramebufferMultisample.glRenderbufferStorageMultisampleEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _settings.getSamples(), GL11.GL_DEPTH_COMPONENT, width, height); // Attach ms depth renderbuffer to ms framebuffer EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _msdepthRBID); // Check MS FBO complete LwjglTextureRenderer.checkFBOComplete(_msfboID); // enable multisample GL11.glEnable(ARBMultisample.GL_MULTISAMPLE_ARB); } // Setup our data buffer for storing rendered image data. _data = ByteBuffer.allocateDirect(width * height * 4).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer(); // Add context to manager and set as active. ContextManager.addContext(this, currentContext); ContextManager.switchContext(this); // Setup a default bg color. _renderer.setBackgroundColor(ColorRGBA.BLACK); // Setup a default camera _camera = new Camera(width, _settings.getHeight()); _camera.setFrustumPerspective(45.0f, (float) width / (float) _settings.getHeight(), 1, 1000); _camera.setProjectionMode(ProjectionMode.Perspective); // setup camera orientation and position. final Vector3 loc = new Vector3(0.0f, 0.0f, 0.0f); final Vector3 left = new Vector3(-1.0f, 0.0f, 0.0f); final Vector3 up = new Vector3(0.0f, 1.0f, 0.0f); final Vector3 dir = new Vector3(0.0f, 0f, -1.0f); _camera.setFrame(loc, left, up, dir); // release our FBO(s) until used. EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); }
From source file:com.ardor3d.framework.lwjgl.LwjglHeadlessCanvas.java
License:Open Source License
public void draw() { // bind correct fbo EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, _useMSAA ? _msfboID : _fboID); // Make sure this OpenGL context is current. ContextManager.switchContext(this); try {//from w w w .j a v a 2 s . c om _buff.makeCurrent(); } catch (final LWJGLException ex) { ex.printStackTrace(); } // make sure camera is set if (Camera.getCurrentCamera() != _camera) { _camera.update(); } _camera.apply(_renderer); // clear buffers GL11.glDisable(GL11.GL_SCISSOR_TEST); _renderer.clearBuffers(Renderer.BUFFER_COLOR | Renderer.BUFFER_DEPTH); // draw our scene _scene.renderUnto(_renderer); _renderer.flushFrame(false); // if we're multisampled, we need to blit to a non-multisampled fbo first if (_useMSAA) { EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_DRAW_FRAMEBUFFER_EXT, _fboID); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_READ_FRAMEBUFFER_EXT, _msfboID); EXTFramebufferBlit.glBlitFramebufferEXT(0, 0, _settings.getWidth(), _settings.getHeight(), 0, 0, _settings.getWidth(), _settings.getHeight(), GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_STENCIL_BUFFER_BIT, GL11.GL_NEAREST); // get ready to read non-msaa fbo EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, _fboID); } // read data from our color buffer _data.rewind(); GL11.glReadBuffer(EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT); GL11.glReadPixels(0, 0, _settings.getWidth(), _settings.getHeight(), GL12.GL_BGRA, GL11.GL_UNSIGNED_BYTE, _data); // release our FBO. EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); }
From source file:com.ardor3d.renderer.lwjgl.LwjglTextureRenderer.java
License:Open Source License
private void render(final List<? extends Spatial> toDrawA, final Spatial toDrawB, final Scene toDrawC, final List<Texture> texs, final int clear) { final int maxDrawBuffers = ContextManager.getCurrentContext().getCapabilities().getMaxFBOColorAttachments(); // if we only support 1 draw buffer at a time anyway, we'll have to render to each texture individually... if (maxDrawBuffers == 1 || texs.size() == 1) { try {/* w w w . java2 s.c o m*/ ContextManager.getCurrentContext().pushFBOTextureRenderer(this); for (int i = 0; i < texs.size(); i++) { final Texture tex = texs.get(i); setupForSingleTexDraw(tex); if (_samples > 0 && _supportsMultisample) { setMSFBO(); } switchCameraIn(clear); if (toDrawA != null) { doDraw(toDrawA); } else if (toDrawB != null) { doDraw(toDrawB); } else { doDraw(toDrawC); } switchCameraOut(); if (_samples > 0 && _supportsMultisample) { blitMSFBO(); } takedownForSingleTexDraw(tex); } } finally { ContextManager.getCurrentContext().popFBOTextureRenderer(); } return; } try { ContextManager.getCurrentContext().pushFBOTextureRenderer(this); // Otherwise, we can streamline this by rendering to multiple textures at once. // first determine how many groups we need final LinkedList<Texture> depths = new LinkedList<Texture>(); final LinkedList<Texture> colors = new LinkedList<Texture>(); for (int i = 0; i < texs.size(); i++) { final Texture tex = texs.get(i); if (tex.getTextureStoreFormat().isDepthFormat()) { depths.add(tex); } else { colors.add(tex); } } // we can only render to 1 depth texture at a time, so # groups is at minimum == numDepth final int groups = Math.max(depths.size(), (int) Math.ceil(colors.size() / (float) maxDrawBuffers)); final RenderContext context = ContextManager.getCurrentContext(); for (int i = 0; i < groups; i++) { // First handle colors int colorsAdded = 0; while (colorsAdded < maxDrawBuffers && !colors.isEmpty()) { final Texture tex = colors.removeFirst(); if (tex.getType() == Type.TwoDimensional) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT + colorsAdded, GL11.GL_TEXTURE_2D, tex.getTextureIdForContext(context.getGlContextRep()), 0); } else if (tex.getType() == Type.CubeMap) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT + colorsAdded, LwjglTextureStateUtil.getGLCubeMapFace(((TextureCubeMap) tex).getCurrentRTTFace()), tex.getTextureIdForContext(context.getGlContextRep()), 0); } else { throw new IllegalArgumentException("Invalid texture type: " + tex.getType()); } colorsAdded++; } // Now take care of depth. if (!depths.isEmpty()) { final Texture tex = depths.removeFirst(); // Set up our depth texture if (tex.getType() == Type.TwoDimensional) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, GL11.GL_TEXTURE_2D, tex.getTextureIdForContext(context.getGlContextRep()), 0); } else if (tex.getType() == Type.CubeMap) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, LwjglTextureStateUtil.getGLCubeMapFace(((TextureCubeMap) tex).getCurrentRTTFace()), tex.getTextureIdForContext(context.getGlContextRep()), 0); } else { throw new IllegalArgumentException("Invalid texture type: " + tex.getType()); } _usingDepthRB = false; } else if (!_usingDepthRB) { // setup our default depth render buffer if not already set EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _depthRBID); _usingDepthRB = true; } setDrawBuffers(colorsAdded); setReadBuffer(colorsAdded != 0 ? EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT : GL11.GL_NONE); // Check FBO complete checkFBOComplete(_fboID); switchCameraIn(clear); if (toDrawA != null) { doDraw(toDrawA); } else { doDraw(toDrawB); } switchCameraOut(); } // automatically generate mipmaps for our textures. for (int x = 0, max = texs.size(); x < max; x++) { if (texs.get(x).getMinificationFilter().usesMipMapLevels()) { final Texture tex = texs.get(x); if (tex.getMinificationFilter().usesMipMapLevels()) { LwjglTextureStateUtil.doTextureBind(texs.get(x), 0, true); EXTFramebufferObject.glGenerateMipmapEXT(LwjglTextureStateUtil.getGLType(tex.getType())); } } } } finally { ContextManager.getCurrentContext().popFBOTextureRenderer(); } }
From source file:com.ardor3d.renderer.lwjgl.LwjglTextureRenderer.java
License:Open Source License
@Override protected void setupForSingleTexDraw(final Texture tex) { final RenderContext context = ContextManager.getCurrentContext(); final int textureId = tex.getTextureIdForContext(context.getGlContextRep()); if (tex.getTextureStoreFormat().isDepthFormat()) { // No color buffer EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, 0); // Setup depth texture into FBO if (tex.getType() == Type.TwoDimensional) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, GL11.GL_TEXTURE_2D, textureId, 0); } else if (tex.getType() == Type.CubeMap) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, LwjglTextureStateUtil.getGLCubeMapFace(((TextureCubeMap) tex).getCurrentRTTFace()), textureId, 0);/* ww w . j a v a 2 s . co m*/ } else { throw new IllegalArgumentException("Can not render to texture of type: " + tex.getType()); } setDrawBuffer(GL11.GL_NONE); setReadBuffer(GL11.GL_NONE); } else { // Set color texture into FBO if (tex.getType() == Type.TwoDimensional) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, GL11.GL_TEXTURE_2D, textureId, 0); } else if (tex.getType() == Type.CubeMap) { EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, LwjglTextureStateUtil.getGLCubeMapFace(((TextureCubeMap) tex).getCurrentRTTFace()), textureId, 0); } else { throw new IllegalArgumentException("Can not render to texture of type: " + tex.getType()); } // setup depth RB EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _depthRBID); setDrawBuffer(EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT); setReadBuffer(EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT); } // Check FBO complete checkFBOComplete(_fboID); }
From source file:com.ardor3d.renderer.lwjgl.LwjglTextureRenderer.java
License:Open Source License
@Override protected void blitMSFBO() { EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_READ_FRAMEBUFFER_EXT, _msfboID); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_DRAW_FRAMEBUFFER_EXT, _fboID); EXTFramebufferBlit.glBlitFramebufferEXT(0, 0, _width, _height, 0, 0, _width, _height, GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT, GL11.GL_NEAREST); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_READ_FRAMEBUFFER_EXT, 0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_DRAW_FRAMEBUFFER_EXT, 0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); }
From source file:com.ardor3d.renderer.lwjgl.LwjglTextureRenderer.java
License:Open Source License
/** * Check the currently bound FBO status for completeness. The passed in fboID is for informational purposes only. * /*from w w w. ja v a 2 s .com*/ * @param fboID * an id to use for log messages, particularly if there are any issues. */ public static void checkFBOComplete(final int fboID) { final int status = EXTFramebufferObject .glCheckFramebufferStatusEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT); switch (status) { case EXTFramebufferObject.GL_FRAMEBUFFER_COMPLETE_EXT: break; case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: throw new IllegalStateException( "FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT exception"); case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: throw new IllegalStateException("FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT exception"); case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: throw new IllegalStateException( "FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT exception"); case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: throw new IllegalStateException( "FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT exception"); case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: throw new IllegalStateException( "FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT exception"); case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: throw new IllegalStateException( "FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT exception"); case EXTFramebufferObject.GL_FRAMEBUFFER_UNSUPPORTED_EXT: throw new IllegalStateException( "FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_UNSUPPORTED_EXT exception."); case EXTFramebufferMultisample.GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT: throw new IllegalStateException("FrameBuffer: " + fboID + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT exception."); default: throw new IllegalStateException("Unexpected reply from glCheckFramebufferStatusEXT: " + status); } }
From source file:com.ardor3d.renderer.lwjgl.LwjglTextureRenderer.java
License:Open Source License
@Override protected void activate() { // Lazy init//from ww w. j a v a 2 s. c om if (_fboID == 0) { final IntBuffer buffer = BufferUtils.createIntBuffer(1); // Create our texture binding FBO EXTFramebufferObject.glGenFramebuffersEXT(buffer); // generate id _fboID = buffer.get(0); // Create a depth renderbuffer to use for RTT use EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _depthRBID = buffer.get(0); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _depthRBID); int format = GL11.GL_DEPTH_COMPONENT; if (_supportsDepthTexture && _depthBits > 0) { switch (_depthBits) { case 16: format = ARBDepthTexture.GL_DEPTH_COMPONENT16_ARB; break; case 24: format = ARBDepthTexture.GL_DEPTH_COMPONENT24_ARB; break; case 32: format = ARBDepthTexture.GL_DEPTH_COMPONENT32_ARB; break; default: // stick with the "undefined" GL_DEPTH_COMPONENT } } EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, format, _width, _height); // unbind... EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, 0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); // If we support it, rustle up a multisample framebuffer + renderbuffers if (_samples != 0 && _supportsMultisample) { // create ms framebuffer object EXTFramebufferObject.glGenFramebuffersEXT(buffer); _msfboID = buffer.get(0); // create ms renderbuffers EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _mscolorRBID = buffer.get(0); EXTFramebufferObject.glGenRenderbuffersEXT(buffer); // generate id _msdepthRBID = buffer.get(0); // set up renderbuffer properties EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _mscolorRBID); EXTFramebufferMultisample.glRenderbufferStorageMultisampleEXT( EXTFramebufferObject.GL_RENDERBUFFER_EXT, _samples, GL11.GL_RGBA, _width, _height); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, _msdepthRBID); EXTFramebufferMultisample.glRenderbufferStorageMultisampleEXT( EXTFramebufferObject.GL_RENDERBUFFER_EXT, _samples, format, _width, _height); EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, 0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, _msfboID); EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _mscolorRBID); EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, _msdepthRBID); // check for errors checkFBOComplete(_msfboID); // release EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); } } if (_active == 0) { final RenderContext context = ContextManager.getCurrentContext(); final RendererRecord record = context.getRendererRecord(); // needed as FBOs do not share this flag it seems record.setClippingTestValid(false); // push a delimiter onto the clip stack _neededClip = _parentRenderer.isClipTestEnabled(); if (_neededClip) { _parentRenderer.pushEmptyClip(); } GL11.glClearColor(_backgroundColor.getRed(), _backgroundColor.getGreen(), _backgroundColor.getBlue(), _backgroundColor.getAlpha()); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, _fboID); ContextManager.getCurrentContext().pushEnforcedStates(); ContextManager.getCurrentContext().clearEnforcedStates(); ContextManager.getCurrentContext().enforceStates(_enforcedStates); } _active++; }
From source file:com.ardor3d.renderer.lwjgl.LwjglTextureRenderer.java
License:Open Source License
@Override protected void deactivate() { if (_active == 1) { final ReadOnlyColorRGBA bgColor = _parentRenderer.getBackgroundColor(); GL11.glClearColor(bgColor.getRed(), bgColor.getGreen(), bgColor.getBlue(), bgColor.getAlpha()); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); ContextManager.getCurrentContext().popEnforcedStates(); if (_neededClip) { _parentRenderer.popClip();/*from ww w . ja v a 2 s . c o m*/ } } _active--; }
From source file:com.flowpowered.caustic.lwjgl.gl20.GL20FrameBuffer.java
License:MIT License
@Override public void create() { checkNotCreated();// w ww .j av a 2 s. co m // Generate and bind the frame buffer id = EXTFramebufferObject.glGenFramebuffersEXT(); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, id); // Disable input buffers GL11.glReadBuffer(GL11.GL_NONE); // Unbind the frame buffer EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); // Update the state super.create(); // Check for errors LWJGLUtil.checkForGLError(); }