static void retrace_glXDestroyContext(trace::Call &call) { ContextMap::iterator it; it = context_map.find(call.arg(1).toUIntPtr()); if (it == context_map.end()) { return; } it->second->release(); context_map.erase(it); }
static void retrace_wglDeleteContext(trace::Call &call) { unsigned long long hglrc = call.arg(0).toUIntPtr(); ContextMap::iterator it; it = context_map.find(hglrc); if (it == context_map.end()) { return; } it->second->release(); context_map.erase(it); }
static void retrace_eglDestroyContext(trace::Call &call) { unsigned long long orig_context = call.arg(1).toUIntPtr(); ContextMap::iterator it; it = context_map.find(orig_context); if (it != context_map.end()) { glretrace::Context *currentContext = glretrace::getCurrentContext(); if (it->second != currentContext) { // TODO: reference count delete it->second; } context_map.erase(it); } }
static void retrace_CGLDestroyContext(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } unsigned long long ctx = call.arg(0).toUIntPtr(); ContextMap::iterator it; it = context_map.find(ctx); if (it == context_map.end()) { return; } delete it->second; context_map.erase(it); }
virtual void OnContextDestroy(Context* context) { contexts.erase(context->GetName()); }