Example usage for org.lwjgl.opengl EXTFramebufferObject glBindFramebufferEXT

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

Introduction

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

Prototype

public static native void glBindFramebufferEXT(@NativeType("GLenum") int target,
            @NativeType("GLuint") int framebuffer);

Source Link

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);/*www .  j  a  v a 2 s .co m*/
            }
            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 {/*from ww  w .jav a  2 s  .co 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 {//w  w w .j  ava 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

@Override
protected void setMSFBO() {
    EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferBlit.GL_DRAW_FRAMEBUFFER_EXT, _msfboID);
}

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

@Override
protected void activate() {
    // Lazy init/*from w  ww  .  j a  v  a2  s.  c  o  m*/
    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   w w  w. java  2 s . c om*/
        }
    }
    _active--;
}

From source file:com.badlogic.gdx.backends.jglfw.JglfwGL20.java

License:Apache License

public void glBindFramebuffer(int target, int framebuffer) {
    EXTFramebufferObject.glBindFramebufferEXT(target, framebuffer);
}

From source file:com.flowpowered.caustic.lwjgl.gl20.GL20FrameBuffer.java

License:MIT License

@Override
public void create() {
    checkNotCreated();/*from   w  w w .  j  a va 2  s  .c  o 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();
}

From source file:com.flowpowered.caustic.lwjgl.gl20.GL20FrameBuffer.java

License:MIT License

@Override
public void attach(AttachmentPoint point, Texture texture) {
    checkCreated();// w ww  . j  a  va2 s  . com
    texture.checkCreated();
    CausticUtil.checkVersion(this, texture);
    // Bind the frame buffer
    EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, id);
    // Attach the texture
    EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT,
            point.getGLConstant(), GL11.GL_TEXTURE_2D, texture.getID(), 0);
    // Add it to the color outputs if it's a color type
    if (point.isColor()) {
        outputBuffers.add(point.getGLConstant());
    }
    // Update the list of output buffers
    updateOutputBuffers();
    // Unbind the frame buffer
    EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
    // Check for errors
    LWJGLUtil.checkForGLError();
}