using namespace glretrace;
-typedef std::map<void *, glws::Drawable *> DrawableMap;
-typedef std::map<void *, glws::Context *> ContextMap;
+typedef std::map<unsigned long long, glws::Drawable *> DrawableMap;
+typedef std::map<unsigned long long, glws::Context *> ContextMap;
static DrawableMap drawable_map;
static DrawableMap pbuffer_map;
static ContextMap context_map;
static glws::Drawable *
-getDrawable(void * hdc) {
- if (hdc == NULL) {
+getDrawable(unsigned long long hdc) {
+ if (hdc == 0) {
return NULL;
}
}
static void retrace_wglCreateContext(Trace::Call &call) {
- void * orig_context = call.ret->blob();
+ unsigned long long orig_context = call.ret->toUIntPtr();
glws::Context *context = ws->createContext(glretrace::visual);
context_map[orig_context] = context;
}
}
}
- glws::Drawable *new_drawable = getDrawable(call.arg(0).blob());
- glws::Context *new_context = context_map[call.arg(1).blob()];
+ glws::Drawable *new_drawable = getDrawable(call.arg(0).toUIntPtr());
+ glws::Context *new_context = context_map[call.arg(1).toUIntPtr()];
bool result = ws->makeCurrent(new_drawable, new_context);
}
static void retrace_wglShareLists(Trace::Call &call) {
+ unsigned long long hglrc1 = call.arg(0).toUIntPtr();
+ unsigned long long hglrc2 = call.arg(1).toUIntPtr();
+
+ glws::Context *share_context = context_map[hglrc1];
+ glws::Context *old_context = context_map[hglrc2];
+
+ glws::Context *new_context =
+ ws->createContext(old_context->visual, share_context);
+ if (new_context) {
+ delete old_context;
+ context_map[hglrc2] = new_context;
+ }
}
static void retrace_wglCreateLayerContext(Trace::Call &call) {
+ retrace_wglCreateContext(call);
}
static void retrace_wglDescribeLayerPlane(Trace::Call &call) {
}
static void retrace_wglSwapLayerBuffers(Trace::Call &call) {
+ retrace_wglSwapBuffers(call);
}
static void retrace_wglUseFontBitmapsA(Trace::Call &call) {
}
static void retrace_wglCreatePbufferARB(Trace::Call &call) {
- unsigned iWidth = call.arg(2);
- unsigned iHeight = call.arg(3);
+ int iWidth = call.arg(2).toUInt();
+ int iHeight = call.arg(3).toUInt();
- void * orig_pbuffer = call.ret->blob();
+ unsigned long long orig_pbuffer = call.ret->toUIntPtr();
glws::Drawable *drawable = ws->createDrawable(glretrace::visual);
drawable->resize(iWidth, iHeight);
}
static void retrace_wglGetPbufferDCARB(Trace::Call &call) {
- glws::Drawable *pbuffer = pbuffer_map[call.arg(0).blob()];
+ glws::Drawable *pbuffer = pbuffer_map[call.arg(0).toUIntPtr()];
- void * orig_hdc = call.ret->blob();
+ unsigned long long orig_hdc = call.ret->toUIntPtr();
drawable_map[orig_hdc] = pbuffer;
}
}
static void retrace_wglCreateContextAttribsARB(Trace::Call &call) {
+ unsigned long long orig_context = call.ret->toUIntPtr();
+ glws::Context *share_context = NULL;
+
+ if (call.arg(1).toPointer()) {
+ share_context = context_map[call.arg(1).toUIntPtr()];
+ }
+
+ glws::Context *context = ws->createContext(glretrace::visual, share_context);
+ context_map[orig_context] = context;
}
static void retrace_wglMakeContextCurrentEXT(Trace::Call &call) {
}
void glretrace::retrace_call_wgl(Trace::Call &call) {
- const char *name = call.name().c_str();
+ const char *name = call.name();
switch (name[0]) {
case 'g':