Android:GLES20:稱為未實現的OpenGL ES API



Answers

看到這篇文章 - android中的三角形opengl

正如那裡提到的,模擬器不支持GL2,但正如該文章所提到的,它在實際設備上對我有用。

Question

我在嘗試使用developer.android.com提供的GLES20示例時遇到“調用未實現的OpenGL ES API”錯誤。 我修改了樣本。 原因是因為我在GLSurfaceView.BaseConfigChooser.chooseconfig中得到了IllegalArgumentException,所以我替換了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 );
}

例如,在GLES20.glCreateShader;出現“被調用的未實現的OpenGL ES API”錯誤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嘗試了該示例。

我感謝任何幫助




這可能是因為您正在使用我們在Renderer實現中的onSurfaceCreated(),onSurfaceChanged()和onDrawFrame()中獲取的GL10實例。 由於您打算使用OpwnGL ES 2.0,我們可以也可能不使用該實例並使用替代方案。 有其他選擇!這就是我們在網絡上看到這些參數名稱和未使用或相似的原因!




Links