Exemplo n.º 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();
   }
 }
Exemplo n.º 2
0
  /**
   * Disposes the native resources associated with the given OGLSurfaceData (referenced by the pData
   * parameter). This method is invoked from the native Dispose() method from the Disposer thread
   * when the Java-level OGLSurfaceData object is about to go away. Note that we also pass a
   * reference to the native GLX/WGLGraphicsConfigInfo (pConfigInfo) for the purposes of making a
   * context current.
   */
  static void dispose(long pData, long pConfigInfo) {
    OGLRenderQueue rq = OGLRenderQueue.getInstance();
    rq.lock();
    try {
      // make sure we have a current context before
      // disposing the native resources (e.g. texture object)
      OGLContext.setScratchSurface(pConfigInfo);

      RenderBuffer buf = rq.getBuffer();
      rq.ensureCapacityAndAlignment(12, 4);
      buf.putInt(DISPOSE_SURFACE);
      buf.putLong(pData);

      // this call is expected to complete synchronously, so flush now
      rq.flushNow();
    } finally {
      rq.unlock();
    }
  }
Exemplo n.º 3
0
  public void flush() {
    invalidate();
    OGLRenderQueue rq = OGLRenderQueue.getInstance();
    rq.lock();
    try {
      // make sure we have a current context before
      // disposing the native resources (e.g. texture object)
      OGLContext.setScratchSurface(graphicsConfig);

      RenderBuffer buf = rq.getBuffer();
      rq.ensureCapacityAndAlignment(12, 4);
      buf.putInt(FLUSH_SURFACE);
      buf.putLong(getNativeOps());

      // this call is expected to complete synchronously, so flush now
      rq.flushNow();
    } finally {
      rq.unlock();
    }
  }