estoy recibiendo un error de "Llamada sin aplicarse API de OpenGL ES", cuando se trata de la Muestra GLES20, proporcionada por developer.android.com. Aunque modifiqué la muestra. La razón fue porque Tengo una IllegalArgumentException en GLSurfaceView.BaseConfigChooser.chooseconfig, así que reemplazó mGLSurfaceView.setEGLContextClientVersion(2);
Android: GLES20: Llamado sin aplicarse API de OpenGL ES
El nuevo OnCreateMethod:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mGLSurfaceView = new GLSurfaceView(this);
mGLSurfaceView.setEGLConfigChooser(new EGLConfigChooser()
{
@Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display)
{
EGLConfig[] configs = new EGLConfig[1];
int[] num_config = new int[1];
boolean check = false;
int[] configSpec = { EGL10.EGL_DEPTH_SIZE, 16, EGL10.EGL_NONE };
check = egl.eglInitialize(display, new int[] { 2, 0 });
if (!check)
return null;
check = false;
check = egl.eglChooseConfig(display, configSpec, configs, 1, num_config);
if (!check)
return null;
return configs[0];
}
});
mGLSurfaceView.setEGLContextFactory(new EGLContextFactory()
{
@Override
public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context)
{
egl.eglDestroyContext(display, context);
}
@Override
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig)
{
int[] attrib_list = new int[]{EGL10.EGL_VERSION, 2, EGL10.EGL_NONE};
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list );
return context;
}
});
mGLSurfaceView.setRenderer(new GLES20TriangleRenderer(this));
setContentView(mGLSurfaceView);
}
Se produce el error "Llamado sin aplicarse API de OpenGL ES", por ejemplo en GLES20.glCreateShader;
o GLES20.glShaderSource
.
pensé, tal vez para comprobar la versión, por lo que llamó gl.glGetString(GLES20.GL_VERSION);
en public void onSurfaceCreated(GL10 gl, EGLConfig config)
. glGetString devolvió "OpenGL ES-CM 1.0". Se llama a OnSurfaceCreated después de elegir la configuración y crear el contexto, así que realmente no entiendo por qué glGetString devuelve "OpenGL ES-CM 1.0".
estoy usando Android 2.2 API y trató la muestra en un 2,2 dispositivo virtual Android y en un reguero de pólvora, con Android 2.2.1.
Agradezco cualquier ayuda
No estoy muy experimentado con GL ES 1.1/2.0 pero es mejor que mucho emulador conscientes no implementa ellos muy bien que yo sepa. Y puede terminar con un código que funciona en el dispositivo pero no en el emulador. – harism