content: package com.bihe0832.android.common.crop.util;
  
  import android.annotation.TargetApi;
  import android.opengl.EGL14;
  import android.opengl.EGLConfig;
  import android.opengl.EGLContext;
  import android.opengl.EGLDisplay;
  import android.opengl.EGLSurface;
  import android.opengl.GLES10;
  import android.opengl.GLES20;
  import android.os.Build;
  import android.util.Log;
  import com.bihe0832.android.lib.utils.os.BuildUtils;
  import javax.microedition.khronos.egl.EGL10;
  
  
  public class EglUtils {
  
      private static final String TAG = "EglUtils";
  
      private EglUtils() {
  
      }
  
      public static int getMaxTextureSize() {
          try {
              if (BuildUtils.INSTANCE.getSDK_INT() >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                  return getMaxTextureEgl14();
              } else {
                  return getMaxTextureEgl10();
              }
          } catch (Exception e) {
              Log.d(TAG, "getMaxTextureSize: ", e);
              return 0;
          }
      }
  
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
      private static int getMaxTextureEgl14() {
          EGLDisplay dpy = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
          int[] vers = new int[2];
          EGL14.eglInitialize(dpy, vers, 0, vers, 1);
  
          int[] configAttr = {
                  EGL14.EGL_COLOR_BUFFER_TYPE, EGL14.EGL_RGB_BUFFER,
                  EGL14.EGL_LEVEL, 0,
                  EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,
                  EGL14.EGL_SURFACE_TYPE, EGL14.EGL_PBUFFER_BIT,
                  EGL14.EGL_NONE
          };
          EGLConfig[] configs = new EGLConfig[1];
          int[] numConfig = new int[1];
          EGL14.eglChooseConfig(dpy, configAttr, 0,
                  configs, 0, 1, numConfig, 0);
          if (numConfig[0] == 0) {
              return 0;
          }
          EGLConfig config = configs[0];
  
          int[] surfAttr = {
                  EGL14.EGL_WIDTH, 64,
                  EGL14.EGL_HEIGHT, 64,
                  EGL14.EGL_NONE
          };
          EGLSurface surf = EGL14.eglCreatePbufferSurface(dpy, config, surfAttr, 0);
  
          int[] ctxAttrib = {
                  EGL14.EGL_CONTEXT_CLIENT_VERSION, 2,
                  EGL14.EGL_NONE
          };
          EGLContext ctx = EGL14.eglCreateContext(dpy, config, EGL14.EGL_NO_CONTEXT, ctxAttrib, 0);
  
          EGL14.eglMakeCurrent(dpy, surf, surf, ctx);
  
          int[] maxSize = new int[1];
          GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxSize, 0);
  
          EGL14.eglMakeCurrent(dpy, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE,
                  EGL14.EGL_NO_CONTEXT);
          EGL14.eglDestroySurface(dpy, surf);
          EGL14.eglDestroyContext(dpy, ctx);
          EGL14.eglTerminate(dpy);
  
          return maxSize[0];
      }
  
      @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
      private static int getMaxTextureEgl10() {
          EGL10 egl = (EGL10) javax.microedition.khronos.egl.EGLContext.getEGL();
  
          javax.microedition.khronos.egl.EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
          int[] vers = new int[2];
          egl.eglInitialize(dpy, vers);
  
          int[] configAttr = {
                  EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER,
                  EGL10.EGL_LEVEL, 0,
                  EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT,
                  EGL10.EGL_NONE
          };
          javax.microedition.khronos.egl.EGLConfig[] configs = new javax.microedition.khronos.egl.EGLConfig[1];
          int[] numConfig = new int[1];
          egl.eglChooseConfig(dpy, configAttr, configs, 1, numConfig);
          if (numConfig[0] == 0) {
              return 0;
          }
          javax.microedition.khronos.egl.EGLConfig config = configs[0];
  
          int[] surfAttr = {
                  EGL10.EGL_WIDTH, 64,
                  EGL10.EGL_HEIGHT, 64,
                  EGL10.EGL_NONE
          };
          javax.microedition.khronos.egl.EGLSurface surf = egl.eglCreatePbufferSurface(dpy, config, surfAttr);
          final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;  // missing in EGL10
          int[] ctxAttrib = {
                  EGL_CONTEXT_CLIENT_VERSION, 1,
                  EGL10.EGL_NONE
          };
          javax.microedition.khronos.egl.EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, ctxAttrib);
          egl.eglMakeCurrent(dpy, surf, surf, ctx);
          int[] maxSize = new int[1];
          GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0);
          egl.eglMakeCurrent(dpy, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE,
                  EGL10.EGL_NO_CONTEXT);
          egl.eglDestroySurface(dpy, surf);
          egl.eglDestroyContext(dpy, ctx);
          egl.eglTerminate(dpy);
  
          return maxSize[0];
      }
  }
  