Ank*_*uja 5 android opengl-es egl
我正在写一个特定的OpenGL应用程序,我特意想逐步绘制帧.为此,我想禁用我理解的缓冲区的自动清除,这是GLSurfaceView.Renderer.onDrawFrame()的默认行为.有人可以帮我解决这个问题吗?我需要用Java编写应用程序,而不是使用本机SDK.
我明白我可以这样做: -
(1) setting EGL_SWAP_BEHAVIOR_PRESERVED_BIT bit for EGL_SURFACE_TYPE attribute while doing [eglChooseConfig][1](), and
(2) setting EGL_SWAP_BEHAVIOR attribute to EGL_BUFFER_PRESERVED by calling [eglSurfaceAttrib][2] on the EGLSurface object
Run Code Online (Sandbox Code Playgroud)
但是,我从Khronos医生那里得知: -
"EGL_SWAP_BEHAVIOR_PRESERVED_BIT are supported only if the EGL version is 1.4 or greater."
"EGL_SWAP_BEHAVIOR is supported only if the EGL version is 1.2 or greater."
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以在Android应用程序中以两种方式访问EGL: -
(1) use the Khronos API class [EGL10][3] in javax.microedition.khronos.egl package (EGL11 doesn't seem to be implemented yet)
(2) use the Android API class [EGL14][4] in android.opengl package (similar to using class android.opengl.GLES20)
Run Code Online (Sandbox Code Playgroud)
(1)的问题是版本<1.4,因此它不支持我需要的功能.(2)的问题是我的应用程序只是在我调用EGL14中的任何方法时崩溃,我不确定我应该如何使用它(我找不到关于EGL14是如何使用的单个示例程序/教程应该在app中使用).特别是,我想学习如何从EGL14获得有效的GL上下文:在EGL10的情况下,我可以通过调用javax.microedition.khronos.egl.EGLContext.getGL()来做到这一点.但是,我在类android.opengl.EGLContext中看不到等效方法.事实上,除了EGL14之外,android.opengl中所有与EGL相关的类似乎都是空的.
我最好的选择是遵循与GLES20相同的推理方法:仅在GLSurfaceView.Renderer方法中调用方法:onDrawFrame(),onSurfaceCreated(),onSurfaceChanged(),因为这些提供有效的GL(GL10)和EGL(EGLConfig)作为参数的上下文.所以我将以下代码放在onDrawFrame()中: -
public void onDrawFrame(GL10 gl)
{
...
android.opengl.EGLDisplay d = null;
if ( (d = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY)) == EGL14.EGL_NO_DISPLAY) {
Log.i("Triangle", "EGL14.eglGetDisplay() failed!");
} else {
Log.i("Triangle", "EGL14.eglGetDisplay() succeeded!");
}
...
}
Run Code Online (Sandbox Code Playgroud)
我相信在调用上述内容之前我不必实例化EGL14,因为所有方法都是静态的.但是,对EGL14.eglGetDisplay()的调用会使应用程序崩溃.
任何帮助将不胜感激,谢谢:)
您可以扩展 GLSurfaceView 并调用 init,而不是直接使用 EGL
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);。
此设置可防止重绘 GLSurfaceView 框架,直到您调用 requestRender(),这对于此示例应用程序来说更加高效。
请参阅 android 文档1,了解如何使用 Java 设置 GLES。
| 归档时间: |
|
| 查看次数: |
1692 次 |
| 最近记录: |