Name
glBindRenderbuffer — bind a renderbuffer to a renderbuffer target
C Specification
void glBindRenderbuffer( | GLenum | target, |
GLuint | renderbuffer) ; |
Parameters
target
- Specifies the renderbuffer target of the binding operation.
target
must beGL_RENDERBUFFER
. renderbuffer
- Specifies the name of the renderbuffer object to bind.
Description
glBindRenderbuffer
binds the renderbuffer object with name renderbuffer
to the renderbuffer target specified by target
. target
must be GL_RENDERBUFFER
.renderbuffer
is the name of a renderbuffer object previously returned from a call to glGenRenderbuffers, or zero to break the existing binding of a renderbuffer object to target
.Errors
GL_INVALID_ENUM
is generated if target
is not GL_RENDERBUFFER
.GL_INVALID_OPERATION
is generated if renderbuffer
is not zero or the name of a renderbuffer previously returned from a call to glGenRenderbuffers.See Also
glGenRenderbuffers, glDeleteRenderbuffers, glRenderbufferStorage, glRenderbufferStorageMultisample, glIsRenderbufferCopyright
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.http://opencontent.org/openpub/.Example of glBindRenderbuffer
// This function does any needed initialization on the rendering
// context.
void SetupRC()
{
fprintf(stdout, "FBO Draw Buffers Demo\n\n");
// Make sure required functionality is available: cube maps, auto mip gen, etc.
if (!GLEE_VERSION_1_4)
{
fprintf(stderr, "OpenGL 1.4 is not available!\n");
Sleep(2000);
exit(0);
}
if (GLEE_ARB_texture_non_power_of_two)
{
npotTexturesAvailable = GL_TRUE;
}
else
{
fprintf(stderr, "GL_ARB_texture_non_power_of_two extension is not available!\n");
fprintf(stderr, "Framebuffer effects will be lower resolution (lower quality).\n\n");
}
if (!GLEE_EXT_framebuffer_object)
{
fprintf(stderr, "GL_EXT_framebuffer_object extension is unavailable!\n");
Sleep(2000);
exit(0);
}
// we'll use up to 4 render targets if they're available
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &maxColorAttachments);
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTexUnits);
maxDrawBuffers = (maxDrawBuffers > maxColorAttachments) ? maxColorAttachments : maxDrawBuffers;
maxDrawBuffers = (maxDrawBuffers > (maxTexUnits-1)) ? (maxTexUnits-1) : maxDrawBuffers;
maxDrawBuffers = (maxDrawBuffers > 4) ? 4 : maxDrawBuffers;
if (((!GLEE_ARB_draw_buffers || !GLEE_ARB_fragment_shader || !GLEE_ARB_shader_objects)
&& !GLEE_VERSION_2_0) || (maxDrawBuffers != 4))
{
fprintf(stderr, "Support for at least 4 draw buffers is unavailable!\n");
Sleep(2000);
exit(0);
}
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &maxRenderbufferSize);
maxTexSize = (maxRenderbufferSize > maxTexSize) ? maxTexSize : maxRenderbufferSize;
fprintf(stdout, "Controls:\n");
fprintf(stdout, "\tRight-click for menu\n\n");
fprintf(stdout, "\tx/X\t\tMove +/- in x direction\n");
fprintf(stdout, "\ty/Y\t\tMove +/- in y direction\n");
fprintf(stdout, "\tz/Z\t\tMove +/- in z direction\n\n");
fprintf(stdout, "\td/D\t\tToggle use of draw buffers\n\n");
fprintf(stdout, "\tq\t\tExit demo\n\n");
// Black background
glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
// Hidden surface removal
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
// Set up some lighting state that never changes
glShadeModel(GL_SMOOTH);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glMaterialfv(GL_FRONT, GL_SPECULAR, specularLight);
glMateriali(GL_FRONT, GL_SHININESS, 128);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHT0);
// Set up textures & shaders
SetupTextures();
SetupShaders();
// Set up some renderbuffer state
glGenRenderbuffersEXT(1, &renderbufferID);
// glBindRenderbuffer(GL_RENDERBUFFER, renderbufferID);
// glBindRenderbuffer(GL_RENDERBUFFER, renderbufferID);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbufferID);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT32, fboWidth, fboHeight);
glGenFramebuffersEXT(2, framebufferID);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebufferID[0]);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, renderbufferID);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, renderTextureID[0], 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebufferID[1]);
for (int i = 0; i < maxDrawBuffers; i++)
{
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + i, GL_TEXTURE_2D, renderTextureID[i+1], 0);
}
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}