Framebuffer related functions
For backward compatibility they are available at both twgl.framebuffer
and twgl
itself
See module:twgl
for core functions
Methods
(static) bindFramebufferInfo(gl, framebufferInfoopt, targetopt)
Binds a framebuffer
This function pretty much solely exists because I spent hours
trying to figure out why something I wrote wasn't working only
to realize I forget to set the viewport dimensions.
My hope is this function will fix that.
It is effectively the same as
gl.bindFramebuffer(gl.FRAMEBUFFER, someFramebufferInfo.framebuffer);
gl.viewport(0, 0, someFramebufferInfo.width, someFramebufferInfo.height);
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
gl |
WebGLRenderingContext
|
the WebGLRenderingContext |
|
framebufferInfo |
module:twgl.FramebufferInfo
|
null
|
<optional> |
a framebufferInfo as returned from |
target |
number
|
<optional> |
The target. If not passed |
(static) createFramebufferInfo(gl, attachmentsopt, widthopt, heightopt) → {module:twgl.FramebufferInfo}
Creates a framebuffer and attachments.
This returns a module:twgl.FramebufferInfo
because it needs to return the attachments as well as the framebuffer.
It also leaves the framebuffer it just created as the currently bound FRAMEBUFFER
.
Note: If this is WebGL2 or if you called module:twgl.addExtensionsToContext
then it will set the drawBuffers
to [COLOR_ATTACHMENT0, COLOR_ATTACHMENT1, ...]
for how ever many color attachments were created.
The simplest usage
// create an RGBA/UNSIGNED_BYTE texture and DEPTH_STENCIL renderbuffer
const fbi = twgl.createFramebufferInfo(gl);
More complex usage
// create an RGB565 renderbuffer and a STENCIL_INDEX8 renderbuffer
const attachments = [
{ format: RGB565, mag: NEAREST },
{ format: STENCIL_INDEX8 },
]
const fbi = twgl.createFramebufferInfo(gl, attachments);
Passing in a specific size
const width = 256;
const height = 256;
const fbi = twgl.createFramebufferInfo(gl, attachments, width, height);
Note!! It is up to you to check if the framebuffer is renderable by calling gl.checkFramebufferStatus
.
WebGL1 only guarantees 3 combinations of attachments work.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
gl |
WebGLRenderingContext
|
the WebGLRenderingContext |
|
attachments |
Array.<module:twgl.AttachmentOptions>
|
<optional> |
which attachments to create. If not provided the default is a framebuffer with an |
width |
number
|
<optional> |
the width for the attachments. Default = size of drawingBuffer |
height |
number
|
<optional> |
the height for the attachments. Default = size of drawingBuffer |
(static) resizeFramebufferInfo(gl, framebufferInfo, attachmentsopt, widthopt, heightopt)
Resizes the attachments of a framebuffer.
You need to pass in the same attachments
as you passed in module:twgl.createFramebufferInfo
because TWGL has no idea the format/type of each attachment.
The simplest usage
// create an RGBA/UNSIGNED_BYTE texture and DEPTH_STENCIL renderbuffer
const fbi = twgl.createFramebufferInfo(gl);
...
function render() {
if (twgl.resizeCanvasToDisplaySize(gl.canvas)) {
// resize the attachments
twgl.resizeFramebufferInfo(gl, fbi);
}
More complex usage
// create an RGB565 renderbuffer and a STENCIL_INDEX8 renderbuffer
const attachments = [
{ format: RGB565, mag: NEAREST },
{ format: STENCIL_INDEX8 },
]
const fbi = twgl.createFramebufferInfo(gl, attachments);
...
function render() {
if (twgl.resizeCanvasToDisplaySize(gl.canvas)) {
// resize the attachments to match
twgl.resizeFramebufferInfo(gl, fbi, attachments);
}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
gl |
WebGLRenderingContext
|
the WebGLRenderingContext |
|
framebufferInfo |
module:twgl.FramebufferInfo
|
a framebufferInfo as returned from |
|
attachments |
Array.<module:twgl.AttachmentOptions>
|
<optional> |
the same attachments options as passed to |
width |
number
|
<optional> |
the width for the attachments. Default = size of drawingBuffer |
height |
number
|
<optional> |
the height for the attachments. Default = size of drawingBuffer |