X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glretrace_wgl.cpp;h=a3ca05b8f0c2c6c1962ecae1befaf68d592b2df4;hb=121e3164e0ed7ab91947bd8325e03095dcfcb823;hp=d899772475a69c53a73c3d23528cd749c0991f55;hpb=8535cbf5ae4a7692a04cdf91aa6fb942204d034a;p=apitrace diff --git a/glretrace_wgl.cpp b/glretrace_wgl.cpp index d899772..a3ca05b 100644 --- a/glretrace_wgl.cpp +++ b/glretrace_wgl.cpp @@ -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':