glRenderbufferStorage — establish data storage, format and dimensions of a renderbuffer object's image
void glRenderbufferStorage( | GLenum target, |
GLenum internalformat, | |
GLsizei width, | |
GLsizei height) ; |
target
Specifies a binding to which the target of the allocation and must be GL_RENDERBUFFER
.
internalformat
Specifies the internal format to use for the renderbuffer object's image.
width
Specifies the width of the renderbuffer, in pixels.
height
Specifies the height of the renderbuffer, in pixels.
glRenderbufferStorage
is equivalent to calling glRenderbufferStorageMultisample with the samples
set to zero.
The target of the operation, specified by target
must be GL_RENDERBUFFER
. internalformat
specifies the internal format to be used for the renderbuffer object's storage and must be a color-renderable, depth-renderable, or stencil-renderable format, as shown in Table 1 below. width
and height
are the dimensions, in pixels, of the renderbuffer. Both width
and height
must be less than or equal to the value of GL_MAX_RENDERBUFFER_SIZE
.
Upon success, glRenderbufferStorage
deletes any existing data store for the renderbuffer image and the contents of the data store after calling glRenderbufferStorage
are undefined.
Sized Internal Format | Base Format | Red Bits | Green Bits | Blue Bits | Alpha Bits |
---|---|---|---|---|---|
GL_R8 | GL_RED | 8 | |||
GL_R8UI | GL_RED_INTEGER | ui8 | |||
GL_R8I | GL_RED_INTEGER | i8 | |||
GL_R16UI | GL_RED_INTEGER | ui16 | |||
GL_R16I | GL_RED_INTEGER | i16 | |||
GL_R32UI | GL_RED_INTEGER | ui32 | |||
GL_R32I | GL_RED_INTEGER | i32 | |||
GL_RG8 | GL_RG | 8 | 8 | ||
GL_RG8UI | GL_RG_INTEGER | ui8 | ui8 | ||
GL_RG8I | GL_RG_INTEGER | i8 | i8 | ||
GL_RG16UI | GL_RG_INTEGER | ui16 | ui16 | ||
GL_RG16I | GL_RG_INTEGER | i16 | i16 | ||
GL_RG32UI | GL_RG_INTEGER | ui32 | ui32 | ||
GL_RG32I | GL_RG_INTEGER | i32 | i32 | ||
GL_RGB8 | GL_RGB | 8 | 8 | 8 | |
GL_RGB565 | GL_RGB | 5 | 6 | 5 | |
GL_RGBA8 | GL_RGBA | 8 | 8 | 8 | 8 |
GL_SRGB8_ALPHA8 | GL_RGBA | 8 | 8 | 8 | 8 |
GL_RGB5_A1 | GL_RGBA | 5 | 5 | 5 | 1 |
GL_RGBA4 | GL_RGBA | 4 | 4 | 4 | 4 |
GL_RGB10_A2 | GL_RGBA | 10 | 10 | 10 | 2 |
GL_RGBA8UI | GL_RGBA_INTEGER | ui8 | ui8 | ui8 | ui8 |
GL_RGBA8I | GL_RGBA_INTEGER | i8 | i8 | i8 | i8 |
GL_RGB10_A2UI | GL_RGBA_INTEGER | ui10 | ui10 | ui10 | ui2 |
GL_RGBA16UI | GL_RGBA_INTEGER | ui16 | ui16 | ui16 | ui16 |
GL_RGBA16I | GL_RGBA_INTEGER | i16 | i16 | i16 | i16 |
GL_RGBA32I | GL_RGBA_INTEGER | i32 | i32 | i32 | i32 |
GL_RGBA32UI | GL_RGBA_INTEGER | ui32 | ui32 | ui32 | ui32 |
Sized Internal Format | Base Format | Depth Bits | Stencil Bits |
---|---|---|---|
GL_DEPTH_COMPONENT16 | GL_DEPTH_COMPONENT | 16 | |
GL_DEPTH_COMPONENT24 | GL_DEPTH_COMPONENT | 24 | |
GL_DEPTH_COMPONENT32F | GL_DEPTH_COMPONENT | f32 | |
GL_DEPTH24_STENCIL8 | GL_DEPTH_STENCIL | 24 | 8 |
GL_DEPTH32F_STENCIL8 | GL_DEPTH_STENCIL | f32 | 8 |
GL_STENCIL_INDEX8 | GL_STENCIL | 8 |
GL_INVALID_ENUM
is generated if target
is not GL_RENDERBUFFER
.
GL_INVALID_VALUE
is generated if either of width
or height
is negative, or greater than the value of GL_MAX_RENDERBUFFER_SIZE
.
GL_INVALID_ENUM
is generated if internalformat
is not a color-renderable, depth-renderable, or stencil-renderable format.
GL_OUT_OF_MEMORY
is generated if the GL is unable to create a data store of the requested size.
// 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
OpenGL ES API Version | |||
---|---|---|---|
Function Name | 2.0 | 3.0 | 3.1 |
glRenderbufferStorage | ✔ | ✔ | ✔ |
glGenRenderbuffers, glBindRenderbuffer, glRenderbufferStorageMultisample, glFramebufferRenderbuffer, glDeleteRenderbuffers
Copyright © 2010-2014 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/.