#include "retrace.hpp"
#include "glretrace.hpp"
+#include <vector>
#ifndef GLX_PBUFFER_HEIGHT
#define GLX_PBUFFER_HEIGHT 0x8040
typedef std::map<unsigned long long, Context *> ContextMap;
typedef std::map<unsigned long, PixmapDesc *> PixmapDescMap;
typedef std::map<GLXFBConfig, GLXFBConfig> ConfigMap;
+typedef std::map<GLXFBConfig, std::vector<int> > ConfigAttribListMap;
static DrawableMap drawable_map;
static ContextMap context_map;
static PixmapDescMap pixmap_desc_map;
static ConfigMap config_map;
+static ConfigAttribListMap config_attrib_list_map;
static glws::Drawable *
getDrawable(unsigned long drawable_id) {
}
}
- printf("Looking for %p in FB-config map\n", orig_fbconfig);
fbconfig = config_map[orig_fbconfig];
+ if (! fbconfig) {
+ std::vector<int> *attrib_list = &config_attrib_list_map[orig_fbconfig];
+ attrib_list->push_back(0);
+ fbconfig = glretrace::chooseConfig(attrib_list->data());
+ if (fbconfig) {
+ config_map[orig_fbconfig] = fbconfig;
+ } else {
+ fprintf(stderr, "Error: Failed to find suitable fbconfig\n");
+ }
+ }
+
pixmap = glretrace::createPixmap(desc->width, desc->height, desc->depth);
gl_pixmap = glretrace::createGLPixmap(fbconfig, pixmap, desc->width, desc->height, attrib_list);
config = glretrace::chooseConfig(attrib_list);
for (size_t i = 0; i < orig_nelements; i++) {
- printf("Mapping FB config %p to %p\n", orig_configs->values[i]->toPointer(), config);
config_map[static_cast<GLXFBConfig>(orig_configs->values[i]->toPointer())] = config;
}
}
+static void retrace_glXGetFBConfigAttrib(trace::Call &call) {
+ GLXFBConfig config = static_cast<GLXFBConfig>(call.arg(1).toPointer());
+ int attribute = call.arg(2).toUInt();
+ int value = dynamic_cast<const trace::Array *>(&call.arg(3))->values[0]->toSInt();
+
+ std::vector<int> *attrib_list = &config_attrib_list_map[config];
+ attrib_list->push_back(attribute);
+ attrib_list->push_back(value);
+}
+
const retrace::Entry glretrace::glx_callbacks[] = {
//{"glXBindChannelToWindowSGIX", &retrace_glXBindChannelToWindowSGIX},
//{"glXBindSwapBarrierNV", &retrace_glXBindSwapBarrierNV},
{"glXGetCurrentDrawable", &retrace::ignore},
{"glXGetCurrentReadDrawable", &retrace::ignore},
{"glXGetCurrentReadDrawableSGI", &retrace::ignore},
- {"glXGetFBConfigAttrib", &retrace::ignore},
+ {"glXGetFBConfigAttrib", &retrace_glXGetFBConfigAttrib},
{"glXGetFBConfigAttribSGIX", &retrace::ignore},
{"glXGetFBConfigFromVisualSGIX", &retrace::ignore},
{"glXGetFBConfigs", &retrace::ignore},
//{"glXReleaseBuffersMESA", &retrace_glXReleaseBuffersMESA},
{"glXReleaseTexImageEXT", &retrace_glXReleaseTexImageEXT},
//{"glXResetFrameCountNV", &retrace_glXResetFrameCountNV},
- //{"glXSelectEvent", &retrace_glXSelectEvent},
+ {"glXSelectEvent", &retrace::ignore},
//{"glXSelectEventSGIX", &retrace_glXSelectEventSGIX},
//{"glXSet3DfxModeMESA", &retrace_glXSet3DfxModeMESA},
//{"glXSwapBuffersMscOML", &retrace_glXSwapBuffersMscOML},