X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glretrace_wgl.cpp;h=a3ca05b8f0c2c6c1962ecae1befaf68d592b2df4;hb=8216d8efc428dd336957433d743af5c4ac2d0d05;hp=308017ee465b0837c4ce3d0f14e4ba7c9d061e46;hpb=7ebb9e259c7b94bb3aef3a0308a27eb01e0f2ec3;p=apitrace diff --git a/glretrace_wgl.cpp b/glretrace_wgl.cpp index 308017e..a3ca05b 100644 --- a/glretrace_wgl.cpp +++ b/glretrace_wgl.cpp @@ -107,9 +107,22 @@ 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) { + retrace_wglCreateContext(call); } static void retrace_wglDescribeLayerPlane(Trace::Call &call) { @@ -122,6 +135,7 @@ static void retrace_wglRealizeLayerPalette(Trace::Call &call) { } static void retrace_wglSwapLayerBuffers(Trace::Call &call) { + retrace_wglSwapBuffers(call); } static void retrace_wglUseFontBitmapsA(Trace::Call &call) { @@ -158,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); @@ -196,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) { @@ -220,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':