std::unique_ptr<GLContextGLX> GLContextGLX::createPixmapContext(PlatformDisplay& platformDisplay, GLXContext sharingContext) { static int visualAttributes[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_ALPHA_SIZE, 1, 0 }; Display* display = downcast<PlatformDisplayX11>(platformDisplay).native(); XUniquePtr<XVisualInfo> visualInfo(glXChooseVisual(display, DefaultScreen(display), visualAttributes)); if (!visualInfo) return nullptr; XUniqueGLXContext context(glXCreateContext(display, visualInfo.get(), sharingContext, GL_TRUE)); if (!context) return nullptr; XUniquePixmap pixmap(XCreatePixmap(display, DefaultRootWindow(display), 1, 1, visualInfo->depth)); if (!pixmap) return nullptr; XUniqueGLXPixmap glxPixmap(glXCreateGLXPixmap(display, visualInfo.get(), pixmap.get())); if (!glxPixmap) return nullptr; return std::unique_ptr<GLContextGLX>(new GLContextGLX(platformDisplay, WTFMove(context), WTFMove(pixmap), WTFMove(glxPixmap))); }
NetscapePluginX11::NetscapePluginX11(NetscapePlugin& plugin, Display* display) : m_plugin(plugin) , m_pluginDisplay(display) { Display* hostDisplay = x11HostDisplay(); int depth = displayDepth(); m_setWindowCallbackStruct.display = hostDisplay; m_setWindowCallbackStruct.depth = depth; XVisualInfo visualTemplate; visualTemplate.screen = x11Screen(); visualTemplate.depth = depth; visualTemplate.c_class = TrueColor; int numMatching; XUniquePtr<XVisualInfo> visualInfo(XGetVisualInfo(hostDisplay, VisualScreenMask | VisualDepthMask | VisualClassMask, &visualTemplate, &numMatching)); ASSERT(visualInfo); Visual* visual = visualInfo.get()[0].visual; ASSERT(visual); m_setWindowCallbackStruct.visual = visual; m_setWindowCallbackStruct.colormap = XCreateColormap(hostDisplay, rootWindowID(), visual, AllocNone); }
GLInfo::GLInfo() { QGLWidget gl((QWidget *) 0); gl.makeCurrent(); Display *dpy; char *displayName = 0; int numScreens, scrNum; dpy = gl.x11Display(); if ( !dpy ) { qWarning( "Error: unable to open display %s\n", displayName ); } numScreens = ScreenCount( dpy ); infotext.sprintf( "Display name: %s\nDirect rendering: %s\n", DisplayString( dpy ), gl.format().directRendering() ? "Yes" : "No" ); for ( scrNum = 0; scrNum < numScreens; scrNum++ ) { screenInfo( dpy, scrNum, infotext ); visualInfo( dpy, scrNum, infotext ); if ( scrNum + 1 < numScreens ) infotext.append( "\n\n" ); } }