]> git.cworth.org Git - apitrace/blobdiff - retrace/glretrace_egl.cpp
retrace: Implement glxCopySubBufferMESA
[apitrace] / retrace / glretrace_egl.cpp
index 75688152f80419a8e2ffeb61b3ab2c654e7de865..c03d04c2d4fc16743e6b71665c42de5f4d518bcd 100644 (file)
@@ -127,6 +127,7 @@ static void retrace_eglDestroySurface(trace::Call &call) {
     it = drawable_map.find(orig_surface);
 
     if (it != drawable_map.end()) {
+        glretrace::Context *currentContext = glretrace::getCurrentContext();
         if (!currentContext || it->second != currentContext->drawable) {
             // TODO: reference count
             delete it->second;
@@ -137,13 +138,14 @@ static void retrace_eglDestroySurface(trace::Call &call) {
 
 static void retrace_eglBindAPI(trace::Call &call) {
     current_api = call.arg(0).toUInt();
+    eglBindAPI(current_api);
 }
 
 static void retrace_eglCreateContext(trace::Call &call) {
     unsigned long long orig_context = call.ret->toUIntPtr();
     unsigned long long orig_config = call.arg(1).toUIntPtr();
     Context *share_context = getContext(call.arg(2).toUIntPtr());
-    trace::Array *attrib_array = dynamic_cast<trace::Array *>(&call.arg(3));
+    trace::Array *attrib_array = call.arg(3).toArray();
     glws::Profile profile;
 
     switch (current_api) {
@@ -187,7 +189,7 @@ static void retrace_eglCreateContext(trace::Call &call) {
         }
 
         retrace::warning(call) << "Failed to create " << name << " context.\n";
-        os::abort();
+        exit(1);
     }
 
     context_map[orig_context] = context;
@@ -202,7 +204,11 @@ static void retrace_eglDestroyContext(trace::Call &call) {
     it = context_map.find(orig_context);
 
     if (it != context_map.end()) {
-        delete it->second;
+        glretrace::Context *currentContext = glretrace::getCurrentContext();
+        if (it->second != currentContext) {
+            // TODO: reference count
+            delete it->second;
+        }
         context_map.erase(it);
     }
 }