Пример #1
0
 /** Xinerama-aware version of XlibWrapper.RootWindow method. */
 public static long getRootWindow(int screenNumber) {
   XToolkit.awtLock();
   try {
     X11GraphicsEnvironment x11ge =
         (X11GraphicsEnvironment) GraphicsEnvironment.getLocalGraphicsEnvironment();
     if (x11ge.runningXinerama()) {
       // all the Xinerama windows share the same root window
       return XlibWrapper.RootWindow(XToolkit.getDisplay(), 0);
     } else {
       return XlibWrapper.RootWindow(XToolkit.getDisplay(), screenNumber);
     }
   } finally {
     XToolkit.awtUnlock();
   }
 }
Пример #2
0
  public static GLXGraphicsConfig getConfig(X11GraphicsDevice device, int visualnum) {
    if (!X11GraphicsEnvironment.isGLXAvailable()) {
      return null;
    }

    long cfginfo = 0;
    final String ids[] = new String[1];
    OGLRenderQueue rq = OGLRenderQueue.getInstance();
    rq.lock();
    try {
      // getGLXConfigInfo() creates and destroys temporary
      // surfaces/contexts, so we should first invalidate the current
      // Java-level context and flush the queue...
      OGLContext.invalidateCurrentContext();
      GLXGetConfigInfo action = new GLXGetConfigInfo(device.getScreen(), visualnum);
      rq.flushAndInvokeNow(action);
      cfginfo = action.getConfigInfo();
      if (cfginfo != 0L) {
        OGLContext.setScratchSurface(cfginfo);
        rq.flushAndInvokeNow(
            new Runnable() {
              public void run() {
                ids[0] = OGLContext.getOGLIdString();
              }
            });
      }
    } finally {
      rq.unlock();
    }
    if (cfginfo == 0) {
      return null;
    }

    int oglCaps = getOGLCapabilities(cfginfo);
    ContextCapabilities caps = new OGLContextCaps(oglCaps, ids[0]);

    return new GLXGraphicsConfig(device, visualnum, cfginfo, caps);
  }