При попытке образца GLES20, предоставленного разработчиком .android.com, я получаю ошибку "Вызванный unimplemented OpenGL ES API". Я модифицировал образец.
Причина была в том, что
Я получил исключение IllegalArgumentException в GLSurfaceView.BaseConfigChooser.chooseconfig, поэтому я заменил
mGLSurfaceView.setEGLContextClientVersion( 2 );
Новый 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 );
}
Ошибка "Вызываемый нереализованный API OpenGL ES" возникает, например, при
GLES20.glCreateShader;
или GLES20.glShaderSource
.
Я подумал, может быть, проверить версию, поэтому я позвонил
gl.glGetString( GLES20.GL_VERSION );
в
public void onSurfaceCreated( GL10 gl, EGLConfig config )
.
glGetString возвращает "OpenGL ES-CM 1.0". OnSurfaceCreated вызывается после выбора конфигурации и создания контекста, поэтому я действительно не понимаю, почему glGetString возвращает "OpenGL ES-CM 1.0".
Я использую API Android 2.2 и пробовал образец на виртуальном устройстве Android 2.2 и на HTC Wildfire с Android 2.2.1.
Я ценю любую помощь