From fe37adfde3643b7f94a57c348ffd3cce5fc3b588 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 21 Mar 2006 00:47:40 +0000 Subject: [PATCH] Added _mesa_finish_render_texture() function and reference counting for the renderbuffer which wraps textures. --- src/mesa/drivers/common/driverfuncs.c | 1 + src/mesa/main/texrender.c | 12 ++++++++++++ src/mesa/main/texrender.h | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index 9fe4ee3ad2d..9eb05442beb 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -207,6 +207,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->NewFramebuffer = _mesa_new_framebuffer; driver->NewRenderbuffer = _mesa_new_soft_renderbuffer; driver->RenderbufferTexture = _mesa_renderbuffer_texture; + driver->FinishRenderTexture = _mesa_finish_render_texture; driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer; #endif diff --git a/src/mesa/main/texrender.c b/src/mesa/main/texrender.c index dca93a1c04a..01e6d6748a5 100644 --- a/src/mesa/main/texrender.c +++ b/src/mesa/main/texrender.c @@ -195,6 +195,7 @@ wrap_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) trb->Base.DepthBits = trb->TexImage->TexFormat->DepthBits; att->Renderbuffer = &(trb->Base); + trb->Base.RefCount++; } @@ -241,3 +242,14 @@ _mesa_renderbuffer_texture(GLcontext *ctx, } +void +_mesa_finish_render_texture(GLcontext *ctx, + struct gl_renderbuffer_attachment *att) +{ + if (att->Renderbuffer) { + att->Renderbuffer->RefCount--; + } + if (att->Renderbuffer->RefCount <= 0) { + _mesa_debug(ctx, "%s refcount == 0!\n", __FUNCTION__); + } +} diff --git a/src/mesa/main/texrender.h b/src/mesa/main/texrender.h index 1e11e505130..575d84415f2 100644 --- a/src/mesa/main/texrender.h +++ b/src/mesa/main/texrender.h @@ -7,5 +7,9 @@ _mesa_renderbuffer_texture(GLcontext *ctx, struct gl_framebuffer *fb, struct gl_renderbuffer_attachment *att); +extern void +_mesa_finish_render_texture(GLcontext *ctx, + struct gl_renderbuffer_attachment *att); + #endif /* TEXRENDER_H */