X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glretrace_wgl.cpp;h=a3ca05b8f0c2c6c1962ecae1befaf68d592b2df4;hb=9523768fe89d08e8e21922a973e0f8424459e9b9;hp=6a40f786ce96d6b441c029299385c42ad8c6d1da;hpb=56e093c39d3fdfb0e928402e7b5d5a1a23b14347;p=apitrace diff --git a/glretrace_wgl.cpp b/glretrace_wgl.cpp index 6a40f78..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).toUInt(); - unsigned iHeight = call.arg(3).toUInt(); + 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':