diff options
author | Chia-I Wu <olv@lunarg.com> | 2010-03-28 03:04:38 +0800 |
---|---|---|
committer | Chia-I Wu <olv@lunarg.com> | 2010-03-28 03:37:28 +0800 |
commit | 0a82fadcdd0b6ebbc345c7c302da0e0efce40a98 (patch) | |
tree | 8edc2a61dd98e3a39a51f08964131556e0d73dd8 | |
parent | 551bfe7a09b0d1bc277796edc10c649b2b07a5b7 (diff) |
egl: Make _eglBindContextToSurfaces more readable.
There is no effective changes given how the function is called. It is
still not trivial, but it should be more readable and resemble
_eglBindContextToThread a lot.
-rw-r--r-- | src/egl/main/eglcontext.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c index 710752fbcf..5e831aab33 100644 --- a/src/egl/main/eglcontext.c +++ b/src/egl/main/eglcontext.c @@ -212,21 +212,35 @@ _eglBindContextToSurfaces(_EGLContext *ctx, _EGLSurface **draw, _EGLSurface **read) { _EGLSurface *newDraw = *draw, *newRead = *read; + _EGLContext *oldCtx; - if (newDraw->CurrentContext) - newDraw->CurrentContext->DrawSurface = NULL; - newDraw->CurrentContext = ctx; + oldCtx = newDraw->CurrentContext; + if (ctx != oldCtx) { + if (oldCtx) { + assert(*draw == oldCtx->DrawSurface); + oldCtx->DrawSurface = NULL; + } + if (ctx) { + *draw = ctx->DrawSurface; + ctx->DrawSurface = newDraw; + } - if (newRead->CurrentContext) - newRead->CurrentContext->ReadSurface = NULL; - newRead->CurrentContext = ctx; + newDraw->CurrentContext = ctx; + } - if (ctx) { - *draw = ctx->DrawSurface; - ctx->DrawSurface = newDraw; + if (newRead != newDraw) + oldCtx = newRead->CurrentContext; + if (ctx != oldCtx) { + if (oldCtx) { + assert(*read == oldCtx->ReadSurface); + oldCtx->ReadSurface = NULL; + } + if (ctx) { + *read = ctx->ReadSurface; + ctx->ReadSurface = newRead; + } - *read = ctx->ReadSurface; - ctx->ReadSurface = newRead; + newRead->CurrentContext = ctx; } } |