X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glretrace_wgl.cpp;h=a3ca05b8f0c2c6c1962ecae1befaf68d592b2df4;hb=353f0535f43b54d04cc9c8080790ffac606e5b0b;hp=bdb5f57701dc830fb807033e965056e3da701b5b;hpb=3099b6d57a59a77e1aa5a0f29b8fd45512d05aa4;p=apitrace diff --git a/glretrace_wgl.cpp b/glretrace_wgl.cpp index bdb5f57..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) { @@ -160,8 +172,8 @@ static void retrace_wglMakeContextCurrentARB(Trace::Call &call) { } static void retrace_wglCreatePbufferARB(Trace::Call &call) { - unsigned iWidth = call.arg(2); - unsigned iHeight = call.arg(3); + int iWidth = call.arg(2).toUInt(); + int iHeight = call.arg(3).toUInt(); unsigned long long orig_pbuffer = call.ret->toUIntPtr(); glws::Drawable *drawable = ws->createDrawable(glretrace::visual); @@ -198,6 +210,15 @@ static void retrace_wglSetPbufferAttribARB(Trace::Call &call) { } static void retrace_wglCreateContextAttribsARB(Trace::Call &call) { + 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) { @@ -222,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':