]> git.cworth.org Git - apitrace/blobdiff - glretrace_wgl.cpp
Add missing file to glxtrace.so
[apitrace] / glretrace_wgl.cpp
index d899772475a69c53a73c3d23528cd749c0991f55..a3ca05b8f0c2c6c1962ecae1befaf68d592b2df4 100644 (file)
@@ -107,6 +107,18 @@ static void retrace_wglSwapBuffers(Trace::Call &call) {
 }
 
 static void retrace_wglShareLists(Trace::Call &call) {
+    unsigned long long hglrc1 = call.arg(0).toUIntPtr();
+    unsigned long long hglrc2 = call.arg(1).toUIntPtr();
+
+    glws::Context *share_context = context_map[hglrc1];
+    glws::Context *old_context = context_map[hglrc2];
+
+    glws::Context *new_context =
+        ws->createContext(old_context->visual, share_context);
+    if (new_context) {
+        delete old_context;
+        context_map[hglrc2] = new_context;
+    }
 }
 
 static void retrace_wglCreateLayerContext(Trace::Call &call) {
@@ -198,8 +210,15 @@ static void retrace_wglSetPbufferAttribARB(Trace::Call &call) {
 }
 
 static void retrace_wglCreateContextAttribsARB(Trace::Call &call) {
-    retrace_wglCreateContext(call);
-    /* TODO: handle context sharing */
+    unsigned long long orig_context = call.ret->toUIntPtr();
+    glws::Context *share_context = NULL;
+
+    if (call.arg(1).toPointer()) {
+        share_context = context_map[call.arg(1).toUIntPtr()];
+    }
+
+    glws::Context *context = ws->createContext(glretrace::visual, share_context);
+    context_map[orig_context] = context;
 }
 
 static void retrace_wglMakeContextCurrentEXT(Trace::Call &call) {
@@ -224,7 +243,7 @@ static void retrace_wglGetProcAddress(Trace::Call &call) {
 }
 
 void glretrace::retrace_call_wgl(Trace::Call &call) {
-    const char *name = call.name().c_str();
+    const char *name = call.name();
 
     switch (name[0]) {
     case 'g':