bindFrameBuffer(frameBuffer, cancelClear) {
        let bufferId = null;
        if(frameBuffer) {
            bufferId = frameBuffer.index;

            // new frame buffer, bind it
            if(bufferId !== this.state.frameBufferID) {
                this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, frameBuffer._frameBuffer);

                this.gl.viewport(0, 0, frameBuffer._size.width, frameBuffer._size.height);

                // if we should clear the buffer content
                if(frameBuffer._shouldClear && !cancelClear) {
                    this.clear();
                }
            }
        }
        else if(this.state.frameBufferID !== null) {
            this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);
            this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);
        }

        this.state.frameBufferID = bufferId;
    }
Called to bind or unbind a FBO

     params:
     @frameBuffer (frameBuffer): if frameBuffer is not null, bind it, unbind it otherwise
     @cancelClear (bool / undefined): if we should cancel clearing the frame buffer (typically on init & resize)
*