If I repeatedly call the code below when using an Intel graphics card, virtual memory usage increases without bound. That doesn’t seem to happen when using an NVIDIA card. But I suppose it’s still possible that there’s a bug in my code, so please let me know if I’m doing anything fishy.
Here I use multisample renderbuffers. If I use 0 for the sample counts instead of 4, then it still eats VM, but more slowly. (The difference is a factor of 4, as you would guess.)
GLuint frameBufferID;
GLuint colorRenderBufferID, depthRenderBufferID;
// Create 2 framebuffer objects, one for drawing and one for reading
glGenFramebuffers( 1, &frameBufferID );
glBindFramebuffer( GL_DRAW_FRAMEBUFFER, frameBufferID );
glReadBuffer( GL_COLOR_ATTACHMENT0 );
glDrawBuffer( GL_COLOR_ATTACHMENT0 );
// Create multisample color renderbuffer
glGenRenderbuffers( 1, &colorRenderBufferID );
glBindRenderbuffer( GL_RENDERBUFFER, colorRenderBufferID );
glRenderbufferStorageMultisample( GL_RENDERBUFFER, 4, GL_RGB, 1244, 700 );
glFramebufferRenderbuffer( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, colorRenderBufferID );
// Create multisample depth/stencil renderbuffer
glGenRenderbuffers( 1, &depthRenderBufferID );
glBindRenderbuffer( GL_RENDERBUFFER, depthRenderBufferID );
glRenderbufferStorageMultisample( GL_RENDERBUFFER, 4, GL_DEPTH24_STENCIL8,
1244, 700 );
glFramebufferRenderbuffer( GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, depthRenderBufferID );
glFramebufferRenderbuffer( GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
GL_RENDERBUFFER, depthRenderBufferID );
// Check FBO status
GLenum drawStat = glCheckFramebufferStatus( GL_DRAW_FRAMEBUFFER );
if ( drawStat != GL_FRAMEBUFFER_COMPLETE )
{
NSLog( @"FBO status: %X", drawStat );
}
else
{
NSLog(@"FBOs is OK.");
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
// Clean up
glBindRenderbuffer( GL_RENDERBUFFER, 0 );
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
// Destroy all that was built!
glDeleteRenderbuffers( 1, &colorRenderBufferID );
glDeleteRenderbuffers( 1, &depthRenderBufferID );
glDeleteFramebuffers( 1, &frameBufferID );