X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace_ws.cpp;h=ac03fcc97de6d56390f807a3b1661e6571d489c1;hb=HEAD;hp=de9fe08c2c7ed4c471019502eb9dd19a5355ff91;hpb=80734e8180656df3202d9ec58f7660cb508d5c1c;p=apitrace diff --git a/retrace/glretrace_ws.cpp b/retrace/glretrace_ws.cpp index de9fe08..ac03fcc 100644 --- a/retrace/glretrace_ws.cpp +++ b/retrace/glretrace_ws.cpp @@ -31,6 +31,7 @@ #include +#include "os_thread.hpp" #include "retrace.hpp" #include "glproc.hpp" #include "glstate.hpp" @@ -40,9 +41,6 @@ namespace glretrace { -Context *currentContext = NULL; - - static glws::Visual * visuals[glws::PROFILE_MAX]; @@ -124,9 +122,23 @@ createContext(Context *shareContext) { } +Context::~Context() +{ + //assert(this != getCurrentContext()); + if (this != getCurrentContext()) { + delete wsContext; + } +} + + +static thread_specific Context * +currentContextPtr; + + bool makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) { + Context *currentContext = currentContextPtr; glws::Drawable *currentDrawable = currentContext ? currentContext->drawable : NULL; if (drawable == currentDrawable && context == currentContext) { @@ -150,26 +162,25 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) return false; } - if (currentContext) { - currentContext->drawable = NULL; - } + currentContextPtr = context; if (drawable && context) { - currentContext = context; - currentContext->drawable = drawable; + context->drawable = drawable; if (!context->used) { initContext(); context->used = true; } - } else { - currentContext = NULL; } return true; } +Context * +getCurrentContext(void) { + return currentContextPtr; +} /** @@ -180,6 +191,7 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) */ void updateDrawable(int width, int height) { + Context *currentContext = getCurrentContext(); if (!currentContext) { return; }