- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
对于我正在处理的 OpenGL Android 项目,我需要 ES 2.0,但我需要对渲染缓冲区/表面的控制,我习惯于使用 EGL 来实现。因为我想不出任何方法来使用 GLSurfaceView 渲染到屏幕外缓冲区,然后从不显示缓冲区。即使我使用 GLSurfaceView.EGLContextFactory,如果没有未包含在 Android 的 EGL 包中的 EGL 1.2 函数/常量(例如 EGL_CONTEXT_CLIENT_VERSION),我也想不出任何方法来实现这一点。
所以第一个明显的问题是:有没有一种方法可以 1) 在 ES 2.0 中使用 EGL,尽管省略了 EGL_CONTEXT_CLIENT_VERSION 和 eglBindAPI()? 2) 在调用 GLSurfaceView 的回调 surfaceCreated(EGLConfig) 之前是否有一些新的 API 用于设置渲染上下文?
最佳答案
如果您可以使用默认的 EGLContextFactory 和 EGLConfigChooser,则可以使用 setEGLContextClientVersion() GLSurfaceView 的方法。
否则,如果您正在编写自己的 EGLContextFactory和 EGLConfigChooser , 只需自己定义常量即可。在配置选择器中,定义
private static final int EGL_OPENGL_ES2_BIT = 4;
然后将其作为 EGL_RENDERABLE_TYPE 的值与您需要的其他属性一起传递给 eglChooseConfig:
int attribs[] = {
EGL10.EGL_RED_SIZE, mRedSize,
EGL10.EGL_GREEN_SIZE, mGreenSize,
EGL10.EGL_BLUE_SIZE, mBlueSize,
EGL10.EGL_ALPHA_SIZE, mAlphaSize,
EGL10.EGL_DEPTH_SIZE, mDepthSize,
EGL10.EGL_SAMPLE_BUFFERS, mSampleBuffers,
EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL10.EGL_NONE
};
对于上下文工厂,定义
private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
并在创建上下文时使用它:
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig)
{
int[] attrib_list = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL10.EGL_NONE
};
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
return context;
}
写完这些后,将它们传递给 setEGLContextFactory和 setEGLConfigChooser , 分别。
关于android - 如何在 EGL 或 GLSurfaceView 中设置 OpenGL 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090608/
我是一名优秀的程序员,十分优秀!