glCheckFramebufferStatus — check the completeness status of a framebuffer
GLenum glCheckFramebufferStatus( | GLenum target) ; |
glCheckFramebufferStatus
queries the completeness status of the framebuffer object currently bound to target
. target
must be GL_DRAW_FRAMEBUFFER
, GL_READ_FRAMEBUFFER
or GL_FRAMEBUFFER
. GL_FRAMEBUFFER
is equivalent to GL_DRAW_FRAMEBUFFER
.
The return value is GL_FRAMEBUFFER_COMPLETE
if the framebuffer bound to target
is complete. Otherwise, the return value is determined as follows:
GL_FRAMEBUFFER_UNDEFINED
is returned if target
is the default framebuffer, but the default framebuffer does not exist.
GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
is returned if any of the framebuffer attachment points are framebuffer incomplete.
GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
is returned if the framebuffer does not have at least one image attached to it.
GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER
is returned if the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
is GL_NONE
for any color attachment point(s) named by GL_DRAW_BUFFERi
.
GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER
is returned if GL_READ_BUFFER
is not GL_NONE
and the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
is GL_NONE
for the color attachment point named by GL_READ_BUFFER
.
GL_FRAMEBUFFER_UNSUPPORTED
is returned if the combination of internal formats of the attached images violates an implementation-dependent set of restrictions.
GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
is returned if the value of GL_RENDERBUFFER_SAMPLES
is not the same for all attached renderbuffers; if the value of GL_TEXTURE_SAMPLES
is the not same for all attached textures; or, if the attached images are a mix of renderbuffers and textures, the value of GL_RENDERBUFFER_SAMPLES
does not match the value of GL_TEXTURE_SAMPLES
.
GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
is also returned if the value of GL_TEXTURE_FIXED_SAMPLE_LOCATIONS
is not the same for all attached textures; or, if the attached images are a mix of renderbuffers and textures, the value of GL_TEXTURE_FIXED_SAMPLE_LOCATIONS
is not GL_TRUE
for all attached textures.
GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
is returned if any framebuffer attachment is layered, and any populated attachment is not layered, or if all populated color attachments are not from textures of the same target.
Additionally, if an error occurs, zero is returned.
GL_INVALID_ENUM
is generated if target
is not GL_DRAW_FRAMEBUFFER
, GL_READ_FRAMEBUFFER
or GL_FRAMEBUFFER
.
// 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 texture_map; glGenTextures(1, &texture_map); glBindTexture(GL_TEXTURE_2D, texture_map); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, fbo_width, fbo_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glBindTexture(GL_TEXTURE_2D, 0); // Build the texture that will serve as the depth attachment for the framebuffer. GLuint depth_texture; glGenTextures(1, &depth_texture); glBindTexture(GL_TEXTURE_2D, depth_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, fbo_width, fbo_height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL); glBindTexture(GL_TEXTURE_2D, 0); // Build the framebuffer. GLuint framebuffer; glGenFramebuffers(1, &framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)framebuffer); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_map, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture, 0); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) // Error glBindFramebuffer(GL_FRAMEBUFFER, 0);
Songho - OpenGL Frame Buffer Object (FBO)
open.gl - Framebuffers
open.gl - Geometry Shaders
opengl-tutorial.org - Tutorial 14 : Render To Texture
opengl-tutorial.org - Tutorial 16 : Shadow mapping
Copyright © 2010 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/.