glRenderbufferStorage — create and initialize a renderbuffer object's data store
void glRenderbufferStorage( | GLenum target, |
GLenum internalformat, | |
GLsizei width, | |
GLsizei height) ; |
target
Specifies the renderbuffer target. The symbolic constant must be
GL_RENDERBUFFER
.
internalformat
Specifies the color-renderable, depth-renderable, or
stencil-renderable format of the renderbuffer. Must be one of the
following symbolic constants:
GL_RGBA4
,
GL_RGB565
,
GL_RGB5_A1
,
GL_DEPTH_COMPONENT16
, or
GL_STENCIL_INDEX8
.
width
Specifies the width of the renderbuffer in pixels.
height
Specifies the height of the renderbuffer in pixels.
glRenderbufferStorage
establishes the data
storage, format, and dimensions of a renderbuffer object's image. Any
existing data store for the renderbuffer is deleted and the contents
of the new data store are undefined.
An implementation may vary its allocation of internal component
resolution based on any glRenderbufferStorage
parameter
(except target
), but the allocation and chosen
internal format must not be a function of any other state and cannot be
changed once they are established. The actual resolution in bits of each
component of the allocated image can be queried with
glGetRenderbufferParameteriv.
GL_INVALID_ENUM
is generated if
target
is not GL_RENDERBUFFER
.
GL_INVALID_ENUM
is generated if
internalformat
is not an accepted format.
GL_INVALID_VALUE
is generated if
width
or height
is less than zero
or greater than GL_MAX_RENDERBUFFER_SIZE
.
GL_OUT_OF_MEMORY
is generated if the implementation is
unable to create a data store with the requested
width
and height
.
GL_INVALID_OPERATION
is generated if the reserved
renderbuffer object name 0 is bound.
// fbo_width and fbo_height are the desired width and height of the FBO. // For Opengl <= 4.4 or if the GL_ARB_texture_non_power_of_two extension // is present, fbo_width and fbo_height can be values other than 2^n for // some integer n. // Build the texture that will serve as the color attachment for the framebuffer. GLuint color_renderbuffer; glGenRenderbuffers(1, &color_renderbuffer); glBindRenderbuffer( GL_RENDERBUFFER, (GLuint)color_renderbuffer ); glRenderbufferStorage( GL_RENDERBUFFER, GL_RGBA8, fbo_width, fbo_height ); glBindRenderbuffer( GL_RENDERBUFFER, 0 ); // Build the texture that will serve as the depth attachment for the framebuffer. GLuint depth_renderbuffer; glGenRenderbuffers(1, &depth_renderbuffer); glBindRenderbuffer( GL_RENDERBUFFER, (GLuint)depth_renderbuffer ); glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT, fbo_width, fbo_height ); glBindRenderbuffer( GL_RENDERBUFFER, 0 ); // Build the framebuffer. GLuint framebuffer; glGenFramebuffers(1, &framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)framebuffer); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_renderbuffer); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_renderbuffer); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) // Error glBindFramebuffer(GL_FRAMEBUFFER, 0);
Songho - OpenGL Frame Buffer Object (FBO)
open.gl - Framebuffers
opengl-tutorial.org - Tutorial 14 : Render To Texture
glBindRenderbuffer, glDeleteRenderbuffers, glFramebufferRenderbuffer, glGenRenderbuffers, glGetRenderbufferParameteriv, glIsRenderbuffer
Copyright © 2008 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. https://opencontent.org/openpub/.