]> git.cworth.org Git - apitrace/blobdiff - retrace/glretrace_ws.cpp
trace: Unwrap all args before serializing them.
[apitrace] / retrace / glretrace_ws.cpp
index 319a2cbe80e65cfbb6b701c8c0d1b3f23c5dcd9c..ac03fcc97de6d56390f807a3b1661e6571d489c1 100644 (file)
@@ -122,14 +122,23 @@ createContext(Context *shareContext) {
 }
 
 
-static os::thread_specific_ptr<Context>
+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.release();
+    Context *currentContext = currentContextPtr;
     glws::Drawable *currentDrawable = currentContext ? currentContext->drawable : NULL;
 
     if (drawable == currentDrawable && context == currentContext) {
@@ -153,13 +162,10 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context)
         return false;
     }
 
-    if (currentContext) {
-        currentContext->drawable = NULL;
-    }
+    currentContextPtr = context;
 
     if (drawable && context) {
         context->drawable = drawable;
-        currentContextPtr.reset(context);
         
         if (!context->used) {
             initContext();
@@ -173,7 +179,7 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context)
 
 Context *
 getCurrentContext(void) {
-    return currentContextPtr.get();
+    return currentContextPtr;
 }