无论出于何种原因,我的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,但据我所知,我的应用程序本身不是多线程(当然,系统是)。所以,我有点希望看看这里有没有人知道如何让这个工作,如果提供更多的信息只是说出这个词,我会在这里发布。
答案 0 :(得分:3)
您使用的是glSurfaceView吗? opengl上下文仅在surfaceview线程(调用onDrawFrame,onSurfaceChanged,onSurfaceCreated等)中有效。您应该在这些回调中编译着色器。
答案 1 :(得分:3)
您必须将Android的最低支持API版本设置为8,因为Android 2.2及更高版本支持OpenGL 2.0。如果您将版本设置为较低,则必须在setEGLContextClientVersion()
,onSurfaceCreated()
或onSurfaceChanged()
中调用onDrawFrame()
方法,如Tim所说。