Android setEGLContextClientVersion()未正确注册

时间:2012-04-28 23:37:17

标签: android multithreading opengl-es-2.0

无论出于何种原因,我的EGL上下文客户端版本都没有在我的OpenGL应用程序中设置。我只需执行以下操作即可设置上下文:

final boolean supportEs2 = configurationInfo.reqGlEsVersion >= 0x20000;

        if (supportEs2) { //<-- this resolves to true.


            mGLView.setEGLContextClientVersion(2);

            try {
                mGLView.setRenderer(new PongDroidRenderer(getApplicationContext()));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

之后,由于未正确调用上下文,我在尝试编译着色器时遇到运行时异常。经过一些研究,我发现我无法从主线程调用OpenGL,但据我所知,我的应用程序本身不是多线程(当然,系统是)。所以,我有点希望看看这里有没有人知道如何让这个工作,如果提供更多的信息只是说出这个词,我会在这里发布。

2 个答案:

答案 0 :(得分:3)

您使用的是glSurfaceView吗? opengl上下文仅在surfaceview线程(调用onDrawFrame,onSurfaceChanged,onSurfaceCreated等)中有效。您应该在这些回调中编译着色器。

答案 1 :(得分:3)

您必须将Android的最低支持API版本设置为8,因为Android 2.2及更高版本支持OpenGL 2.0。如果您将版本设置为较低,则必须在setEGLContextClientVersion()onSurfaceCreated()onSurfaceChanged()中调用onDrawFrame()方法,如Tim所说。