Last active
September 7, 2018 07:22
-
-
Save SwiftyWang/d94c2bb1eef0745328321222d7e24623 to your computer and use it in GitHub Desktop.
Android get maxTextureSize
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static int getMaxTextureSize() { | |
int maxTextureSize; | |
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { | |
// get a hold of the default display, and initialize. | |
// This could get more complex if you have to deal with devices that could have multiple displays, | |
// but will be sufficient for a typical phone/tablet | |
EGLDisplay dpy = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); | |
int[] vers = new int[2]; | |
EGL14.eglInitialize(dpy, vers, 0, vers, 1); | |
// Next, we need to find a config. | |
// Since we won't use this context for rendering, the exact attributes aren't very critical | |
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) { | |
// TROUBLE! No config found. | |
} | |
EGLConfig config = configs[0]; | |
// To make a context current, which we will need later, | |
// you need a rendering surface, even if you don't actually plan to render. | |
// To satisfy this requirement, create a small offscreen (Pbuffer) surface | |
int[] surfAttr = { | |
EGL14.EGL_WIDTH, 64, | |
EGL14.EGL_HEIGHT, 64, | |
EGL14.EGL_NONE | |
}; | |
EGLSurface surf = EGL14.eglCreatePbufferSurface(dpy, config, surfAttr, 0); | |
// Next, create the context | |
int[] ctxAttrib = { | |
EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, | |
EGL14.EGL_NONE | |
}; | |
// Ready to make the context current now: | |
EGLContext ctx = EGL14.eglCreateContext(dpy, config, EGL14.EGL_NO_CONTEXT, ctxAttrib, 0); | |
EGL14.eglMakeCurrent(dpy, surf, surf, ctx); | |
// If all of the above succeeded (error checking was omitted), you can make your OpenGL calls now | |
int[] maxSize = new int[1]; | |
GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxSize, 0); | |
maxTextureSize = maxSize[0]; | |
// Once you're all done, you can tear down everything: | |
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); | |
} else { | |
int[] maxTexture = new int[1]; | |
GLES10.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxTexture, 0); | |
maxTextureSize = maxTexture[0]; | |
} | |
return maxTextureSize; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment