}
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();
}
}
static void retrace_glXCreatePbuffer(trace::Call &call) {
- int width = 0;
- int height = 0;
-
- const trace::Array *attrib_list = dynamic_cast<const trace::Array *>(&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<const trace::Array *>(&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;
}
//{"glXBindChannelToWindowSGIX", &retrace_glXBindChannelToWindowSGIX},
//{"glXBindSwapBarrierNV", &retrace_glXBindSwapBarrierNV},
//{"glXBindSwapBarrierSGIX", &retrace_glXBindSwapBarrierSGIX},
- //{"glXBindTexImageEXT", &retrace_glXBindTexImageEXT},
+ {"glXBindTexImageEXT", &retrace::ignore},
//{"glXChannelRectSGIX", &retrace_glXChannelRectSGIX},
//{"glXChannelRectSyncSGIX", &retrace_glXChannelRectSyncSGIX},
{"glXChooseFBConfig", &retrace::ignore},
//{"glXCreateGLXPixmapWithConfigSGIX", &retrace_glXCreateGLXPixmapWithConfigSGIX},
{"glXCreateNewContext", &retrace_glXCreateNewContext},
{"glXCreatePbuffer", &retrace_glXCreatePbuffer},
- //{"glXCreatePixmap", &retrace_glXCreatePixmap},
+ {"glXCreatePixmap", &retrace::ignore},
//{"glXCreateWindow", &retrace_glXCreateWindow},
//{"glXCushionSGI", &retrace_glXCushionSGI},
{"glXDestroyContext", &retrace_glXDestroyContext},
//{"glXDestroyGLXPbufferSGIX", &retrace_glXDestroyGLXPbufferSGIX},
//{"glXDestroyGLXPixmap", &retrace_glXDestroyGLXPixmap},
{"glXDestroyPbuffer", &retrace_glXDestroyPbuffer},
- //{"glXDestroyPixmap", &retrace_glXDestroyPixmap},
+ {"glXDestroyPixmap", &retrace::ignore},
//{"glXDestroyWindow", &retrace_glXDestroyWindow},
//{"glXFreeContextEXT", &retrace_glXFreeContextEXT},
{"glXGetAGPOffsetMESA", &retrace::ignore},
{"glXGetProcAddress", &retrace::ignore},
{"glXGetSelectedEvent", &retrace::ignore},
{"glXGetSelectedEventSGIX", &retrace::ignore},
+ {"glXGetSwapIntervalMESA", &retrace::ignore},
{"glXGetSyncValuesOML", &retrace::ignore},
{"glXGetVideoSyncSGI", &retrace::ignore},
{"glXGetVisualFromFBConfig", &retrace::ignore},
{"glXQuerySwapGroupNV", &retrace::ignore},
{"glXQueryVersion", &retrace::ignore},
//{"glXReleaseBuffersMESA", &retrace_glXReleaseBuffersMESA},
- //{"glXReleaseTexImageEXT", &retrace_glXReleaseTexImageEXT},
+ {"glXReleaseTexImageEXT", &retrace::ignore},
//{"glXResetFrameCountNV", &retrace_glXResetFrameCountNV},
//{"glXSelectEvent", &retrace_glXSelectEvent},
//{"glXSelectEventSGIX", &retrace_glXSelectEventSGIX},