void Window::configExit( ) { if( !_xDisplay ) return; leaveNVSwapBarrier(); configExitFBO(); exitGLEW(); glXMakeCurrent( _xDisplay, None, 0 ); GLXContext context = getGLXContext(); XID drawable = getXDrawable(); setGLXContext( 0 ); setXDrawable( 0 ); XSync( _xDisplay, False ); // WAR assert in glXDestroyContext/xcb_io.c:183 if( context ) glXDestroyContext( _xDisplay, context ); if( drawable ) { if( getIAttribute( eq::Window::IATTR_HINT_DRAWABLE ) == PBUFFER ) glXDestroyPbuffer( _xDisplay, drawable ); else XDestroyWindow( _xDisplay, drawable ); } EQINFO << "Destroyed GLX context and X drawable " << std::endl; }
bool Window::configInit() { GLXFBConfig* fbConfig = chooseGLXFBConfig(); if( !fbConfig ) { sendError( ERROR_SYSTEMWINDOW_PIXELFORMAT_NOTFOUND ); return false; } GLXContext context = createGLXContext( fbConfig ); setGLXContext( context ); if( !context ) { XFree( fbConfig ); return false; } bool success = configInitGLXDrawable( fbConfig ); XFree( fbConfig ); if( !success || !_impl->xDrawable ) { sendError( ERROR_GLXWINDOW_NO_DRAWABLE ); return false; } makeCurrent(); initGLEW(); _initSwapSync(); if( getIAttribute( IATTR_HINT_DRAWABLE ) == FBO ) success = configInitFBO(); return success; }