Beispiel #1
0
 /**
  * Initializes the appropriate OpenGL offscreen surface based on the value of the type parameter.
  * If the surface creation fails for any reason, an OutOfMemoryError will be thrown.
  */
 protected void initSurface(final int width, final int height) {
   OGLRenderQueue rq = OGLRenderQueue.getInstance();
   rq.lock();
   try {
     switch (type) {
       case TEXTURE:
       case PBUFFER:
       case FBOBJECT:
         // need to make sure the context is current before
         // creating the texture (or pbuffer, or fbobject)
         OGLContext.setScratchSurface(graphicsConfig);
         break;
       default:
         break;
     }
     rq.flushAndInvokeNow(
         new Runnable() {
           public void run() {
             initSurfaceNow(width, height);
           }
         });
   } finally {
     rq.unlock();
   }
 }
Beispiel #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);
  }