X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace_glx.cpp;h=4ab3d676c189f4984fbc0bb1b6c329c4037e5d86;hb=HEAD;hp=4e4209600a0487f8238c5a5d3ab843ad88953d9e;hpb=422f2ea7a960de49a9d90e0aebd41b7e18ceaea6;p=apitrace diff --git a/retrace/glretrace_glx.cpp b/retrace/glretrace_glx.cpp index 4e42096..4ab3d67 100644 --- a/retrace/glretrace_glx.cpp +++ b/retrace/glretrace_glx.cpp @@ -112,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(); } @@ -129,37 +133,14 @@ static void retrace_glXCreateNewContext(trace::Call &call) { } static void retrace_glXCreatePbuffer(trace::Call &call) { - int width = 0; - int height = 0; - - const trace::Array *attrib_list = dynamic_cast(&call.arg(2)); - if (attrib_list) { - for (size_t i = 0; i + 1 < attrib_list->values.size(); i += 2) { - int param = attrib_list->values[i]->toSInt(); - if (param == 0) { - break; - } - - int value = attrib_list->values[i + 1]->toSInt(); - - switch (param) { - case GLX_PBUFFER_WIDTH: - width = value; - break; - case GLX_PBUFFER_HEIGHT: - height = value; - break; - } - } - } + 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::createDrawable(); + glws::Drawable *drawable = glretrace::createPbuffer(width, height); - drawable->resize(width, height); - drawable->show(); - drawable_map[orig_drawable] = drawable; } @@ -230,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},