]> git.cworth.org Git - apitrace/commitdiff
Kill currentDrawable.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 19 Oct 2012 16:34:30 +0000 (17:34 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 19 Oct 2012 16:34:30 +0000 (17:34 +0100)
Use currentContext->drawable instead.

retrace/glretrace.hpp
retrace/glretrace_cgl.cpp
retrace/glretrace_egl.cpp
retrace/glretrace_glx.cpp
retrace/glretrace_main.cpp
retrace/glretrace_wgl.cpp
retrace/glretrace_ws.cpp

index f058d8deaaf94731b889b8c9e5781824ba5ca464..87ced60bf345f7bff893d51f92d4357735b718bc 100644 (file)
@@ -35,6 +35,7 @@ namespace glretrace {
 struct Context {
     Context(glws::Context* context)
         : wsContext(context),
+          drawable(0),
           activeProgram(0),
           used(false)
     {
@@ -46,6 +47,10 @@ struct Context {
     }
 
     glws::Context* wsContext;
+
+    // Bound drawable
+    glws::Drawable *drawable;
+
     GLuint activeProgram;
     bool used;
     
@@ -60,7 +65,6 @@ extern bool insideList;
 extern bool insideGlBeginEnd;
 
 
-extern glws::Drawable *currentDrawable;
 extern Context *currentContext;
 
 
index 1197015b167ced08a9f44fc874a8872d6b24f83b..d66fbb5bf8d69767eab5278e8dd5bb9a02f40618 100644 (file)
@@ -235,9 +235,12 @@ static void retrace_CGLSetCurrentContext(trace::Call &call) {
 
 
 static void retrace_CGLFlushDrawable(trace::Call &call) {
-    if (currentDrawable && currentContext) {
+    unsigned long long ctx = call.arg(0).toUIntPtr();
+    Context *context = getContext(ctx);
+
+    if (context) {
         if (retrace::doubleBuffer) {
-            currentDrawable->swapBuffers();
+            context->drawable->swapBuffers();
         } else {
             glFlush();
         }
index 3f83f55b41c734a44cd34f747209f85696584fa0..75688152f80419a8e2ffeb61b3ab2c654e7de865 100644 (file)
@@ -127,7 +127,7 @@ static void retrace_eglDestroySurface(trace::Call &call) {
     it = drawable_map.find(orig_surface);
 
     if (it != drawable_map.end()) {
-        if (it->second != currentDrawable) {
+        if (!currentContext || it->second != currentContext->drawable) {
             // TODO: reference count
             delete it->second;
         }
@@ -216,10 +216,14 @@ static void retrace_eglMakeCurrent(trace::Call &call) {
 
 
 static void retrace_eglSwapBuffers(trace::Call &call) {
+    glws::Drawable *drawable = getDrawable(call.arg(1).toUIntPtr());
+
     frame_complete(call);
 
-    if (retrace::doubleBuffer && currentDrawable) {
-        currentDrawable->swapBuffers();
+    if (retrace::doubleBuffer) {
+        if (drawable) {
+            drawable->swapBuffers();
+        }
     } else {
         glFlush();
     }
index 918940f06d5e27c4a6e196279a119dc0fe41304f..cea892f54d97760d37b67932fd87bba257ca0d80 100644 (file)
@@ -112,9 +112,13 @@ static void retrace_glXDestroyContext(trace::Call &call) {
 }
 
 static void retrace_glXSwapBuffers(trace::Call &call) {
+    glws::Drawable *drawable = getDrawable(call.arg(1).toUInt());
+
     frame_complete(call);
     if (retrace::doubleBuffer) {
-        currentDrawable->swapBuffers();
+        if (drawable) {
+            drawable->swapBuffers();
+        }
     } else {
         glFlush();
     }
index 4471121d9effc59a75b1e05d83e96f1fba769efc..f29ad01a07fd07c4d64b204a83897ae95b098bf6 100755 (executable)
@@ -309,11 +309,11 @@ frame_complete(trace::Call &call) {
 
     retrace::frameComplete(call);
 
-    if (!currentDrawable) {
+    if (!currentContext) {
         return;
     }
 
-    if (retrace::debug && !currentDrawable->visible) {
+    if (retrace::debug && !currentContext->drawable->visible) {
         retrace::warning(call) << "could not infer drawable size (glViewport never called)\n";
     }
 }
@@ -403,7 +403,7 @@ retrace::addCallbacks(retrace::Retracer &retracer)
 
 image::Image *
 retrace::getSnapshot(void) {
-    if (!glretrace::currentDrawable) {
+    if (!glretrace::currentContext) {
         return NULL;
     }
 
@@ -415,7 +415,6 @@ bool
 retrace::dumpState(std::ostream &os)
 {
     if (glretrace::insideGlBeginEnd ||
-        !glretrace::currentDrawable ||
         !glretrace::currentContext) {
         return false;
     }
index bf2f38a19024b1a2c19cd69c5eda6697204d5215..639f419218dd5f5bd41a34ccf1d1065af76b0234 100644 (file)
@@ -94,9 +94,15 @@ static void retrace_wglSetPixelFormat(trace::Call &call) {
 }
 
 static void retrace_wglSwapBuffers(trace::Call &call) {
+    glws::Drawable *drawable = getDrawable(call.arg(0).toUIntPtr());
+
     frame_complete(call);
     if (retrace::doubleBuffer) {
-        currentDrawable->swapBuffers();
+        if (drawable) {
+            drawable->swapBuffers();
+        } else if (currentContext) {
+            currentContext->drawable->swapBuffers();
+        }
     } else {
         glFlush();
     }
@@ -112,7 +118,7 @@ static void retrace_wglShareLists(trace::Call &call) {
     Context *new_context = glretrace::createContext(share_context);
     if (new_context) {
         if (currentContext == old_context) {
-            glretrace::makeCurrent(call, currentDrawable, new_context);
+            glretrace::makeCurrent(call, currentContext->drawable, new_context);
         }
 
         context_map[hglrc2] = new_context;
index 97762eda10edb41a77091b9a3fc81dd8458cf6f8..aeaadb77be0af415295df5ca39bfa1ef563d2c41 100644 (file)
@@ -40,7 +40,6 @@
 namespace glretrace {
 
 
-glws::Drawable *currentDrawable = NULL;
 Context *currentContext = NULL;
 
 
@@ -111,11 +110,13 @@ createContext(Context *shareContext) {
 bool
 makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context)
 {
+    glws::Drawable *currentDrawable = currentContext ? currentContext->drawable : NULL;
+
     if (drawable == currentDrawable && context == currentContext) {
         return true;
     }
 
-    if (currentDrawable && currentContext) {
+    if (currentContext) {
         glFlush();
         if (!retrace::doubleBuffer) {
             frame_complete(call);
@@ -132,16 +133,19 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context)
         return false;
     }
 
+    if (currentContext) {
+        currentContext->drawable = NULL;
+    }
+
     if (drawable && context) {
-        currentDrawable = drawable;
         currentContext = context;
+        currentContext->drawable = drawable;
         
         if (!context->used) {
             initContext();
             context->used = true;
         }
     } else {
-        currentDrawable = NULL;
         currentContext = NULL;
     }
 
@@ -159,10 +163,13 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context)
  */
 void
 updateDrawable(int width, int height) {
-    if (!currentDrawable) {
+    if (!currentContext) {
         return;
     }
 
+    glws::Drawable *currentDrawable = currentContext->drawable;
+    assert(currentDrawable);
+
     if (currentDrawable->visible &&
         width  <= currentDrawable->width &&
         height <= currentDrawable->height) {