Example usage for org.lwjgl.opengl EXTFramebufferObject GL_FRAMEBUFFER_EXT

List of usage examples for org.lwjgl.opengl EXTFramebufferObject GL_FRAMEBUFFER_EXT

Introduction

In this page you can find the example usage for org.lwjgl.opengl EXTFramebufferObject GL_FRAMEBUFFER_EXT.

Prototype

int GL_FRAMEBUFFER_EXT

To view the source code for org.lwjgl.opengl EXTFramebufferObject GL_FRAMEBUFFER_EXT.

Click Source Link

Document

Accepted by the target parameter of BindFramebufferEXT, CheckFramebufferStatusEXT, FramebufferTexture{1D|2D|3D}EXT, FramebufferRenderbufferEXT, and GetFramebufferAttachmentParameterivEXT.

Usage

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();
}