73 lines
2.3 KiB
Java
73 lines
2.3 KiB
Java
package org.oscim.android.gl;
|
|
|
|
import javax.microedition.khronos.egl.EGL10;
|
|
import javax.microedition.khronos.egl.EGLConfig;
|
|
import javax.microedition.khronos.egl.EGLDisplay;
|
|
|
|
import android.opengl.GLSurfaceView;
|
|
|
|
public class GlConfigChooser implements GLSurfaceView.EGLConfigChooser {
|
|
|
|
@Override
|
|
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
|
|
int[] val = new int[1];
|
|
|
|
// Try to find a normal multisample configuration first.
|
|
int[] configSpec = {
|
|
EGL10.EGL_RED_SIZE, 5,
|
|
EGL10.EGL_GREEN_SIZE, 6,
|
|
EGL10.EGL_BLUE_SIZE, 5,
|
|
EGL10.EGL_ALPHA_SIZE, 8,
|
|
EGL10.EGL_DEPTH_SIZE, 16,
|
|
// Requires that setEGLContextClientVersion(2) is called on the view.
|
|
EGL10.EGL_RENDERABLE_TYPE, 4 /* EGL_OPENGL_ES2_BIT */,
|
|
EGL10.EGL_STENCIL_SIZE, 8,
|
|
EGL10.EGL_NONE };
|
|
|
|
if (!egl.eglChooseConfig(display, configSpec, null, 0, val)) {
|
|
throw new IllegalArgumentException("eglChooseConfig failed");
|
|
}
|
|
int numConfigs = val[0];
|
|
|
|
if (numConfigs <= 0) {
|
|
|
|
configSpec = new int[] {
|
|
// EGL10.EGL_RENDERABLE_TYPE, 4, EGL10.EGL_NONE };
|
|
EGL10.EGL_RED_SIZE, 8,
|
|
EGL10.EGL_GREEN_SIZE, 8,
|
|
EGL10.EGL_BLUE_SIZE, 8,
|
|
EGL10.EGL_ALPHA_SIZE, 8,
|
|
EGL10.EGL_DEPTH_SIZE, 16,
|
|
EGL10.EGL_RENDERABLE_TYPE, 4 /* EGL_OPENGL_ES2_BIT */,
|
|
EGL10.EGL_STENCIL_SIZE, 8,
|
|
EGL10.EGL_NONE };
|
|
|
|
if (!egl.eglChooseConfig(display, configSpec, null, 0, val)) {
|
|
throw new IllegalArgumentException("eglChooseConfig failed");
|
|
}
|
|
numConfigs = val[0];
|
|
|
|
if (numConfigs <= 0) {
|
|
throw new IllegalArgumentException("No configs match configSpec");
|
|
}
|
|
}
|
|
|
|
// Get all matching configurations.
|
|
EGLConfig[] configs = new EGLConfig[numConfigs];
|
|
if (!egl.eglChooseConfig(display, configSpec, configs, numConfigs, val)) {
|
|
throw new IllegalArgumentException("data eglChooseConfig failed");
|
|
}
|
|
|
|
// CAUTION! eglChooseConfigs returns configs with higher bit depth
|
|
// first: Even though we asked for rgb565 configurations, rgb888
|
|
// configurations are considered to be "better" and returned first.
|
|
// You need to explicitly filter the data returned by eglChooseConfig!
|
|
|
|
EGLConfig config = configs.length > 0 ? configs[0] : null;
|
|
if (config == null) {
|
|
throw new IllegalArgumentException("No config chosen");
|
|
}
|
|
return config;
|
|
}
|
|
}
|