X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace_glx.cpp;h=4ab3d676c189f4984fbc0bb1b6c329c4037e5d86;hb=HEAD;hp=bc63063d5a0c6394e885f6491300c86e3e7d2b80;hpb=e7cb2b98575d5ff3801bd3527a648e0dbfdebdad;p=apitrace diff --git a/retrace/glretrace_glx.cpp b/retrace/glretrace_glx.cpp index bc63063..4ab3d67 100644 --- a/retrace/glretrace_glx.cpp +++ b/retrace/glretrace_glx.cpp @@ -29,6 +29,15 @@ #include "glretrace.hpp" +#ifndef GLX_PBUFFER_HEIGHT +#define GLX_PBUFFER_HEIGHT 0x8040 +#endif + +#ifndef GLX_PBUFFER_WIDTH +#define GLX_PBUFFER_WIDTH 0x8041 +#endif + + using namespace glretrace; @@ -103,9 +112,13 @@ static void retrace_glXDestroyContext(trace::Call &call) { } static void retrace_glXSwapBuffers(trace::Call &call) { + glws::Drawable *drawable = getDrawable(call.arg(1).toUInt()); + frame_complete(call); if (retrace::doubleBuffer) { - currentDrawable->swapBuffers(); + if (drawable) { + drawable->swapBuffers(); + } } else { glFlush(); } @@ -119,6 +132,28 @@ static void retrace_glXCreateNewContext(trace::Call &call) { context_map[orig_context] = context; } +static void retrace_glXCreatePbuffer(trace::Call &call) { + const trace::Value *attrib_list = dynamic_cast(&call.arg(2)); + int width = glretrace::parseAttrib(attrib_list, GLX_PBUFFER_WIDTH, 0); + int height = glretrace::parseAttrib(attrib_list, GLX_PBUFFER_HEIGHT, 0); + + unsigned long long orig_drawable = call.ret->toUInt(); + + glws::Drawable *drawable = glretrace::createPbuffer(width, height); + + drawable_map[orig_drawable] = drawable; +} + +static void retrace_glXDestroyPbuffer(trace::Call &call) { + glws::Drawable *drawable = getDrawable(call.arg(1).toUInt()); + + if (!drawable) { + return; + } + + delete drawable; +} + static void retrace_glXMakeContextCurrent(trace::Call &call) { glws::Drawable *new_drawable = getDrawable(call.arg(1).toUInt()); Context *new_context = getContext(call.arg(3).toUIntPtr()); @@ -146,14 +181,14 @@ const retrace::Entry glretrace::glx_callbacks[] = { //{"glXCreateGLXPixmap", &retrace_glXCreateGLXPixmap}, //{"glXCreateGLXPixmapWithConfigSGIX", &retrace_glXCreateGLXPixmapWithConfigSGIX}, {"glXCreateNewContext", &retrace_glXCreateNewContext}, - //{"glXCreatePbuffer", &retrace_glXCreatePbuffer}, + {"glXCreatePbuffer", &retrace_glXCreatePbuffer}, //{"glXCreatePixmap", &retrace_glXCreatePixmap}, //{"glXCreateWindow", &retrace_glXCreateWindow}, //{"glXCushionSGI", &retrace_glXCushionSGI}, {"glXDestroyContext", &retrace_glXDestroyContext}, //{"glXDestroyGLXPbufferSGIX", &retrace_glXDestroyGLXPbufferSGIX}, //{"glXDestroyGLXPixmap", &retrace_glXDestroyGLXPixmap}, - //{"glXDestroyPbuffer", &retrace_glXDestroyPbuffer}, + {"glXDestroyPbuffer", &retrace_glXDestroyPbuffer}, //{"glXDestroyPixmap", &retrace_glXDestroyPixmap}, //{"glXDestroyWindow", &retrace_glXDestroyWindow}, //{"glXFreeContextEXT", &retrace_glXFreeContextEXT}, @@ -176,6 +211,7 @@ const retrace::Entry glretrace::glx_callbacks[] = { {"glXGetProcAddress", &retrace::ignore}, {"glXGetSelectedEvent", &retrace::ignore}, {"glXGetSelectedEventSGIX", &retrace::ignore}, + {"glXGetSwapIntervalMESA", &retrace::ignore}, {"glXGetSyncValuesOML", &retrace::ignore}, {"glXGetVideoSyncSGI", &retrace::ignore}, {"glXGetVisualFromFBConfig", &retrace::ignore},