Android: GLES20: называется нереализованным API OpenGL ES - PullRequest
20 голосов
/ 08 мая 2011

При попытке попробовать образец GLES20, предоставленный developer.android.com, я получаю сообщение об ошибке «Называется нереализованный API OpenGL ES». Я изменил образец, хотя. Причина была в том, что Я получил 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».

Я использую Android 2.2 API и попробовал пример на виртуальном устройстве Android 2.2 и на HTC Wildfire с Android 2.2.1.

Я ценю любую помощь

Ответы [ 3 ]

2 голосов
/ 29 ноября 2012

См. Этот пост - Треугольник OpenGL в Android

Как уже упоминалось, эмуляторы не поддерживают GL2, но, как упоминается в этом посте, он работал для меня на реальном устройстве.

1 голос
/ 08 мая 2011

Это не ошибка, а утверждение.Он просто говорит вам, что ваша цель не поддерживает OpenGL ES версии 2.0.

0 голосов
/ 27 декабря 2014

Возможно, это связано с тем, что вы используете экземпляр GL10, который мы получаем в качестве параметра в onSurfaceCreated (), onSurfaceChanged () и onDrawFrame () в вашей реализации Renderer.Поскольку вы намереваетесь использовать OpenGL ES 2.0, мы можем и, вероятно, не будем использовать этот экземпляр и использовать вместо него альтернативу.Есть альтернативы!По этой причине мы видим эти имена параметров и неиспользуемые или похожие в кодах по сети!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...