2

无论出于何种原因,我的 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 ,但是,据我所知,我的应用程序本身不是多线程的(当然,系统是多线程的)。所以,我有点希望看看这里是否有人对我如何让这个工作有任何想法,如果提供了更多信息,只需说出这个词,我会在这里发布。

4

2 回答 2

3

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

于 2012-04-29T01:32:35.027 回答
3

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

于 2012-05-10T13:44:52.907 回答