Ejemplo n.º 1
0
 @Override
 int[] getConfig(boolean dirtyRegions) {
   return new int[] {
     EGL_RENDERABLE_TYPE,
     EGL14.EGL_OPENGL_ES2_BIT,
     EGL_RED_SIZE,
     8,
     EGL_GREEN_SIZE,
     8,
     EGL_BLUE_SIZE,
     8,
     EGL_ALPHA_SIZE,
     8,
     EGL_DEPTH_SIZE,
     0,
     EGL_CONFIG_CAVEAT,
     EGL_NONE,
     // TODO: Find a better way to choose the stencil size
     EGL_STENCIL_SIZE,
     mShowOverdraw ? GLES20Canvas.getStencilSize() : 0,
     EGL_SURFACE_TYPE,
     EGL_WINDOW_BIT | (dirtyRegions ? EGL14.EGL_SWAP_BEHAVIOR_PRESERVED_BIT : 0),
     EGL_NONE
   };
 }
Ejemplo n.º 2
0
    static void startTrimMemory(int level) {
      if (sEgl == null || sEglConfig == null) return;

      Gl20RendererEglContext managedContext = (Gl20RendererEglContext) sEglContextStorage.get();
      // We do not have OpenGL objects
      if (managedContext == null) {
        return;
      } else {
        usePbufferSurface(managedContext.getContext());
      }

      if (level >= ComponentCallbacks2.TRIM_MEMORY_COMPLETE) {
        GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_FULL);
      } else if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
        GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_MODERATE);
      }
    }
Ejemplo n.º 3
0
      @Override
      public void onTerminate(final EGLContext eglContext) {
        // Make sure we do this on the correct thread.
        if (mHandler.getLooper() != Looper.myLooper()) {
          mHandler.post(
              new Runnable() {
                @Override
                public void run() {
                  onTerminate(eglContext);
                }
              });
          return;
        }

        synchronized (sEglLock) {
          if (sEgl == null) return;

          if (EGLImpl.getInitCount(sEglDisplay) == 1) {
            usePbufferSurface(eglContext);
            GLES20Canvas.terminateCaches();

            sEgl.eglDestroyContext(sEglDisplay, eglContext);
            sEglContextStorage.set(null);
            sEglContextStorage.remove();

            sEgl.eglDestroySurface(sEglDisplay, sPbuffer);
            sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);

            sEgl.eglReleaseThread();
            sEgl.eglTerminate(sEglDisplay);

            sEgl = null;
            sEglDisplay = null;
            sEglConfig = null;
            sPbuffer = null;
          }
        }
      }
Ejemplo n.º 4
0
 /**
  * Indicates whether hardware acceleration is available under any form for the view hierarchy.
  *
  * @return True if the view hierarchy can potentially be hardware accelerated, false otherwise
  */
 public static boolean isAvailable() {
   return GLES20Canvas.isAvailable();
 }
Ejemplo n.º 5
0
 static HardwareRenderer create(boolean translucent) {
   if (GLES20Canvas.isAvailable()) {
     return new Gl20Renderer(translucent);
   }
   return null;
 }
Ejemplo n.º 6
0
 @Override
 void pushLayerUpdate(HardwareLayer layer) {
   mGlCanvas.pushLayerUpdate(layer);
 }
Ejemplo n.º 7
0
 @Override
 void onPostDraw() {
   mGlCanvas.onPostDraw();
 }
Ejemplo n.º 8
0
 @Override
 int onPreDraw(Rect dirty) {
   return mGlCanvas.onPreDraw(dirty);
 }
Ejemplo n.º 9
0
 @Override
 void initCaches() {
   GLES20Canvas.initCaches();
 }
 @Override
 public void glDeleteFramebuffers(GL11ExtensionPack gl11ep, int n, int[] buffers, int offset) {
   GLES20.glDeleteFramebuffers(n, buffers, offset);
   GLES20Canvas.checkError();
 }
 @Override
 public void glDeleteBuffers(GL11 gl, int n, int[] buffers, int offset) {
   GLES20.glDeleteBuffers(n, buffers, offset);
   GLES20Canvas.checkError();
 }
 @Override
 public void glDeleteTextures(GL11 gl, int n, int[] textures, int offset) {
   GLES20.glDeleteTextures(n, textures, offset);
   GLES20Canvas.checkError();
 }
 @Override
 public void glGenBuffers(int n, int[] buffers, int offset) {
   GLES20.glGenBuffers(n, buffers, offset);
   GLES20Canvas.checkError();
 }
 @Override
 public int generateTexture() {
   GLES20.glGenTextures(1, mTempIntArray, 0);
   GLES20Canvas.checkError();
   return mTempIntArray[0];
 }