X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace_wgl.cpp;h=abcf068a057056f88bdefbe1d8c002bd2e9e0459;hb=940cdb8b143455fe2fc002ffd50f5e2ffcaf1260;hp=52fdcf46605cdc485707d1b7ce7fbbd6492f3ea7;hpb=60139d6c4850e1cf731021e57c89ea5552f60e6b;p=apitrace diff --git a/retrace/glretrace_wgl.cpp b/retrace/glretrace_wgl.cpp index 52fdcf4..abcf068 100644 --- a/retrace/glretrace_wgl.cpp +++ b/retrace/glretrace_wgl.cpp @@ -61,6 +61,17 @@ static void retrace_wglCreateContext(trace::Call &call) { } static void retrace_wglDeleteContext(trace::Call &call) { + unsigned long long hglrc = call.arg(0).toUIntPtr(); + + ContextMap::iterator it; + it = context_map.find(hglrc); + if (it == context_map.end()) { + return; + } + + delete it->second; + + context_map.erase(it); } static void retrace_wglMakeCurrent(trace::Call &call) { @@ -83,9 +94,18 @@ static void retrace_wglSetPixelFormat(trace::Call &call) { } static void retrace_wglSwapBuffers(trace::Call &call) { + glws::Drawable *drawable = getDrawable(call.arg(0).toUIntPtr()); + frame_complete(call); if (retrace::doubleBuffer) { - currentDrawable->swapBuffers(); + if (drawable) { + drawable->swapBuffers(); + } else { + glretrace::Context *currentContext = glretrace::getCurrentContext(); + if (currentContext) { + currentContext->drawable->swapBuffers(); + } + } } else { glFlush(); } @@ -100,8 +120,9 @@ static void retrace_wglShareLists(trace::Call &call) { Context *new_context = glretrace::createContext(share_context); if (new_context) { + glretrace::Context *currentContext = glretrace::getCurrentContext(); if (currentContext == old_context) { - glretrace::makeCurrent(call, currentDrawable, new_context); + glretrace::makeCurrent(call, currentContext->drawable, new_context); } context_map[hglrc2] = new_context; @@ -165,10 +186,7 @@ static void retrace_wglCreatePbufferARB(trace::Call &call) { int iHeight = call.arg(3).toUInt(); unsigned long long orig_pbuffer = call.ret->toUIntPtr(); - glws::Drawable *drawable = glretrace::createDrawable(); - - drawable->resize(iWidth, iHeight); - drawable->show(); + glws::Drawable *drawable = glretrace::createPbuffer(iWidth, iHeight); pbuffer_map[orig_pbuffer] = drawable; }