diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index a1e40e94af2..acf5cc7d8bc 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -2000,6 +2000,32 @@ _mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer, } } + +/** + * Make context 'ctx' share the display lists, textures and programs + * that are associated with 'ctxToShare'. + * Any display lists, textures or programs associated with 'ctx' will + * be deleted if nobody else is sharing them. + */ +GLboolean +_mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare) +{ + if (ctx && ctxToShare && ctx->Shared && ctxToShare->Shared) { + ctx->Shared->RefCount--; + if (ctx->Shared->RefCount == 0) { + free_shared_state(ctx, ctx->Shared); + } + ctx->Shared = ctxToShare->Shared; + ctx->Shared->RefCount++; + return GL_TRUE; + } + else { + return GL_FALSE; + } +} + + + /** * Get current context for the calling thread. * diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index daab59ce6b4..4b041edc6d5 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -162,6 +162,8 @@ extern void _mesa_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer, GLframebuffer *readBuffer ); +extern GLboolean +_mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare); extern GLcontext * _mesa_get_current_context(void);