mesa: Attempt to pair up Driver.RenderTexture and FinishRenderTexture()
authorEric Anholt <eric@anholt.net>
Wed, 4 Nov 2009 22:31:30 +0000 (14:31 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 6 Nov 2009 19:37:32 +0000 (11:37 -0800)
This is probably not 100% complete (bind vs unbind may still not pair up
exactly), but it should help out drivers which are relying on
FinishRenderTexture to be called when we're done rendering to a particular
texture level, not just when we're done rendering to the object at all.
This is the case for the one consumer of FinishRenderTexture() so far: the
gallium state tracker.  Noticed when trying to make use of FRT() in the intel
driver.

src/mesa/main/fbobject.c

index 319d0f2ce9773379c0b907f2a34890a70d38a5dc..c4454550dbca3fcd3238cfd759db2a58050b2c1c 100644 (file)
@@ -233,9 +233,13 @@ _mesa_set_texture_attachment(GLcontext *ctx,
    if (att->Texture == texObj) {
       /* re-attaching same texture */
       ASSERT(att->Type == GL_TEXTURE);
+      if (ctx->Driver.FinishRenderTexture)
+        ctx->Driver.FinishRenderTexture(ctx, att);
    }
    else {
       /* new attachment */
+      if (ctx->Driver.FinishRenderTexture && att->Texture)
+        ctx->Driver.FinishRenderTexture(ctx, att);
       _mesa_remove_attachment(ctx, att);
       att->Type = GL_TEXTURE;
       assert(!att->Texture);