Create a Framebuffer Object.
attachments (list
or tuple
of tuple
) – Optional attachments to initialize the Framebuffer with. Attachments are
specified as a list of tuples. Each tuple must contain an attachment
point (e.g. GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, etc.) and a
buffer descriptor type (Renderbuffer or TexImage2D). If using a combined
depth/stencil format such as GL_DEPTH24_STENCIL8, GL_DEPTH_ATTACHMENT
and GL_STENCIL_ATTACHMENT must be passed the same buffer. Alternatively,
one can use GL_DEPTH_STENCIL_ATTACHMENT instead. If using multisample
buffers, all attachment images must use the same number of samples!. As
an example, one may specify attachments as ‘attachments=((
GL.GL_COLOR_ATTACHMENT0, frameTexture), (GL.GL_DEPTH_STENCIL_ATTACHMENT,
depthRenderBuffer))’.
Framebuffer descriptor.
Framebuffer
Notes
All buffers must have the same number of samples.
The ‘userData’ field of the returned descriptor is a dictionary that can be used to store arbitrary data associated with the FBO.
Framebuffers need a single attachment to be complete.
Examples
Create an empty framebuffer with no attachments:
fbo = createFBO() # invalid until attachments are added
Create a render target with multiple color texture attachments:
colorTex = createTexImage2D(1024,1024) # empty texture
depthRb = createRenderbuffer(800,600,internalFormat=GL.GL_DEPTH24_STENCIL8)
# attach images
GL.glBindFramebuffer(GL.GL_FRAMEBUFFER, fbo.id)
attach(GL.GL_COLOR_ATTACHMENT0, colorTex)
attach(GL.GL_DEPTH_ATTACHMENT, depthRb)
attach(GL.GL_STENCIL_ATTACHMENT, depthRb)
# or attach(GL.GL_DEPTH_STENCIL_ATTACHMENT, depthRb)
GL.glBindFramebuffer(GL.GL_FRAMEBUFFER, 0)
# above is the same as
with useFBO(fbo):
attach(GL.GL_COLOR_ATTACHMENT0, colorTex)
attach(GL.GL_DEPTH_ATTACHMENT, depthRb)
attach(GL.GL_STENCIL_ATTACHMENT, depthRb)
Examples of userData some custom function might access:
fbo.userData['flags'] = ['left_eye', 'clear_before_use']
Using a depth only texture (for shadow mapping?):
depthTex = createTexImage2D(800, 600,
internalFormat=GL.GL_DEPTH_COMPONENT24,
pixelFormat=GL.GL_DEPTH_COMPONENT)
fbo = createFBO([(GL.GL_DEPTH_ATTACHMENT, depthTex)]) # is valid
# discard FBO descriptor, just give me the ID
frameBuffer = createFBO().id