Today I encountered several serious crashes which even forced me to look for the reset button on my machine Consider this sequence:
- bind an FBO
- glPushAttrib(GL_COLOR_BUFFER_BIT)
3… do some rendering - unbind the FBO (by binding 0)
- glPopAttrib()
Apparently GL tries to restore GL_COLOR_ATTACHMENT0_EXT as drawbuffer on the window-system-provided framebuffer, which doesn’t exist.
I looked through the FBO specs and found this:
(81) How should PushAttrib and PopAttrib work with this extension?
…
PushAttrib(COLOR_BUFFER_BIT)
saves the DRAW_BUFFER value of the currently bound
framebuffer object. If the app later calls PopAttrib() this
saved value will be restored even if the framebuffer bound
at the time PopAttrib is called is different from the
framebuffer bound at the time PushAttrib was called.
So it looks like a driver bug. Be warned The current workaround is to call glPopAttrib() as long as the FBO is still bound.
Oh well, forgot the specs: GF8800GTS, Forceware 158.27 (WinXP 64bit)