Rework the GL_READ_BUFFER, GL_DRAW_BUFFER state repairs that Roland previously did.
Basically, in update_framebuffer() (which should be called after an FBO is bound with MakeCurrent or BindFramebuffer) we check if the FBO is a window-system FBO. If it is, update the FBO's GL_READ/DRAW_BUFFER state according to the context state. Old code still in place but disabled with #if 0 / #endif.
This commit is contained in:
@@ -962,9 +962,11 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
|
||||
}
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
|
||||
|
||||
if (ctx->Driver.Flush) {
|
||||
ctx->Driver.Flush(ctx);
|
||||
}
|
||||
|
||||
if (framebuffer) {
|
||||
/* Binding a user-created framebuffer object */
|
||||
newFb = _mesa_lookup_framebuffer(ctx, framebuffer);
|
||||
@@ -998,34 +1000,43 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
|
||||
* XXX check if re-binding same buffer and skip some of this code.
|
||||
*/
|
||||
|
||||
#if 000
|
||||
/* for window-framebuffers, re-initialize the fbo values, as they
|
||||
could be wrong (makecurrent with a new drawable while still a fbo
|
||||
was bound will lead to default init fbo values).
|
||||
note that therefore the context ReadBuffer/DrawBuffer values are not
|
||||
valid while fbo's are bound!!! */
|
||||
#endif
|
||||
if (bindReadBuf) {
|
||||
_mesa_reference_framebuffer(&ctx->ReadBuffer, newFbread);
|
||||
#if 000
|
||||
if (!newFbread->Name) {
|
||||
_mesa_readbuffer_update_fields(ctx, ctx->Pixel.ReadBuffer);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (bindDrawBuf) {
|
||||
/* check if old FB had any texture attachments */
|
||||
check_end_texture_render(ctx, ctx->DrawBuffer);
|
||||
|
||||
/* check if time to delete this framebuffer */
|
||||
_mesa_reference_framebuffer(&ctx->DrawBuffer, newFb);
|
||||
if (!newFb->Name) {
|
||||
|
||||
if (newFb->Name != 0) {
|
||||
/* check if newly bound framebuffer has any texture attachments */
|
||||
check_begin_texture_render(ctx, newFb);
|
||||
}
|
||||
else {
|
||||
/* XXX try to remove this: */
|
||||
#if 000
|
||||
GLuint i;
|
||||
GLenum buffers[MAX_DRAW_BUFFERS];
|
||||
for(i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
|
||||
buffers[i] = ctx->Color.DrawBuffer[i];
|
||||
}
|
||||
_mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers, buffers, NULL);
|
||||
}
|
||||
else {
|
||||
/* check if newly bound framebuffer has any texture attachments */
|
||||
check_begin_texture_render(ctx, newFb);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user