more fixes for mesa's fbo handling (fixes tests/fbotest1/2)

This commit is contained in:
Roland Scheidegger
2007-07-18 18:07:12 +02:00
parent f9ac01eac5
commit 6075df53b5
3 changed files with 14 additions and 3 deletions

View File

@@ -557,9 +557,8 @@ _mesa_ReadBuffer(GLenum buffer)
}
}
if (fb->Name == 0) {
ctx->Pixel.ReadBuffer = buffer;
}
ctx->Pixel.ReadBuffer = buffer;
fb->ColorReadBuffer = buffer;
fb->_ColorReadBufferIndex = srcBuffer;

View File

@@ -1499,6 +1499,11 @@ _mesa_make_current( GLcontext *newCtx, GLframebuffer *drawBuffer,
if the DRIdrawable changes, and someone may rely on them.
*/
/* What a mess!?! */
/* XXX this is still not quite correct. Imagine a user-created fbo
bound on a context. Now rebind with a completely new drawable.
Upon rebinding to the window-framebuffer, we have no idea what
the read and write buffers should be (front, back, ...) - that
information was only available in the previously used drawable... */
int i;
GLenum buffers[MAX_DRAW_BUFFERS];
for(i = 0; i < newCtx->Const.MaxDrawBuffers; i++) {

View File

@@ -1003,13 +1003,20 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
if (bindReadBuf) {
_mesa_reference_framebuffer(&ctx->ReadBuffer, newFbread);
/* set context value */
ctx->Pixel.ReadBuffer = newFbread->ColorReadBuffer;
}
if (bindDrawBuf) {
GLuint i;
/* 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);
/* set context value */
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
ctx->Color.DrawBuffer[i] = newFb->ColorDrawBuffer[i];
}
if (newFb->Name != 0) {
/* check if newly bound framebuffer has any texture attachments */
check_begin_texture_render(ctx, newFb);