gpt4 book ai didi

android - 如何在 EGL 或 GLSurfaceView 中设置 OpenGL 版本?

转载 作者:太空狗 更新时间:2023-10-29 15:39:27 24 4
gpt4 key购买 nike

对于我正在处理的 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 的方法。

否则,如果您正在编写自己的 EGLContextFactoryEGLConfigChooser , 只需自己定义常量即可。在配置选择器中,定义

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;
}

写完这些后,将它们传递给 setEGLContextFactorysetEGLConfigChooser , 分别。

关于android - 如何在 EGL 或 GLSurfaceView 中设置 OpenGL 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com