X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace_ws.cpp;h=66ef10534cdc00d2dad79309ac9dd4688387d2d7;hb=04f42b803c60b593359322b80af4003361ccd097;hp=aeaadb77be0af415295df5ca39bfa1ef563d2c41;hpb=5ed4ca62e0b1236ff45e608d6b531a2181c6afbb;p=apitrace diff --git a/retrace/glretrace_ws.cpp b/retrace/glretrace_ws.cpp index aeaadb7..66ef105 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,7 +41,6 @@ namespace glretrace { -Context *currentContext = NULL; static glws::Visual * @@ -107,9 +107,14 @@ createContext(Context *shareContext) { } +typedef Context * CurrentData; +static os::thread_specific_ptr currentData; + + bool makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) { + Context *currentContext = getCurrentContext(); glws::Drawable *currentDrawable = currentContext ? currentContext->drawable : NULL; if (drawable == currentDrawable && context == currentContext) { @@ -137,22 +142,38 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) currentContext->drawable = NULL; } + CurrentData *currentDataPtr = currentData.get(); + if (!currentDataPtr) { + currentDataPtr = new CurrentData; + currentData.reset(currentDataPtr); + } + if (drawable && context) { - currentContext = context; - currentContext->drawable = drawable; + context->drawable = drawable; + *currentData = context; if (!context->used) { initContext(); context->used = true; } } else { - currentContext = NULL; + *currentData = NULL; } return true; } +Context * +getCurrentContext(void) { + CurrentData *currentDataPtr = currentData.get(); + if (!currentDataPtr) { + return NULL; + } + return *currentDataPtr; +} + + /** @@ -163,6 +184,7 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) */ void updateDrawable(int width, int height) { + Context *currentContext = getCurrentContext(); if (!currentContext) { return; }