static void retrace_glXCreateContext(Trace::Call &call) {
void * orig_context = call.ret->toPointer();
- glws::Context *context = ws->createContext(glretrace::visual);
+ glws::Context *share_context = NULL;
+
+ if (call.arg(2).toPointer()) {
+ share_context = context_map[call.arg(2).toPointer()];
+ }
+
+ glws::Context *context = ws->createContext(glretrace::visual, share_context);
context_map[orig_context] = context;
}
}
static void retrace_glXMakeCurrent(Trace::Call &call) {
+ glws::Drawable *new_drawable = getDrawable(call.arg(1).toUInt());
+ glws::Context *new_context = context_map[call.arg(2).toPointer()];
+
+ if (new_drawable == drawable && new_context == context) {
+ return;
+ }
+
if (drawable && context) {
glFlush();
if (!double_buffer) {
}
}
- glws::Drawable *new_drawable = getDrawable(static_cast<unsigned long>(call.arg(1)));
- glws::Context *new_context = context_map[call.arg(2).toPointer()];
-
bool result = ws->makeCurrent(new_drawable, new_context);
if (new_drawable && new_context && result) {
}
static void retrace_glXCreateNewContext(Trace::Call &call) {
- retrace_glXCreateContext(call);
+ void * orig_context = call.ret->toPointer();
+ glws::Context *share_context = NULL;
+
+ if (call.arg(3).toPointer()) {
+ share_context = context_map[call.arg(3).toPointer()];
+ }
+
+ glws::Context *context = ws->createContext(glretrace::visual, share_context);
+ context_map[orig_context] = context;
}
static void retrace_glXMakeContextCurrent(Trace::Call &call) {
+ glws::Drawable *new_drawable = getDrawable(call.arg(1).toUInt());
+ glws::Context *new_context = context_map[call.arg(3).toPointer()];
+
+ if (new_drawable == drawable && new_context == context) {
+ return;
+ }
+
if (drawable && context) {
glFlush();
if (!double_buffer) {
}
}
- glws::Drawable *new_drawable = getDrawable(static_cast<unsigned long>(call.arg(1)));
- glws::Context *new_context = context_map[call.arg(3).toPointer()];
-
bool result = ws->makeCurrent(new_drawable, new_context);
if (new_drawable && new_context && result) {