请向我解释一下 Android 中的 EGL 到底是什么?
Please explain to me what exactly is EGL in Android?
最近我正在使用 bigflake.com CameraToMpeg 示例,我们可以在其中了解如何使用 OpenGLES。最后的步骤之一是初始化 EGL14 以记录当前的 OPNEGLES 上下文并将其交换到 MediaCodec。
但是我的问题是:EGL14 究竟是什么?为什么 EGL14 是一种创建 OPENGLES 可以渲染的表面的机制,因为在简单的 OPENGLES 中我从不初始化 EGL14?是额外的class,还是OPENGLES操作不可或缺的? EGL 如何知道当前的 OPENGLES 上下文是什么?我还能用它做什么,例如,我能否在 OPENGLES 中创建具有具体纹理的上下文?在哪里可以找到更多关于它的文档 - 书籍?
OpenGL 或 OpenGL ES - 是关于在某些环境中进行渲染的一切。它不知道也不关心那个环境到底是什么。只要它提供了所需的兼容函数列表,可以调用这些函数来实现所需的结果 - 这就是适合您的 OpenGL。
现在你如何创造那个环境?由于这不是 OpenGL 的责任,因此必须由其他人完成,并且必须以符合托管渲染应用程序的系统规则的方式完成。
这就是 EGL 所在的位置 - 它定义了一个 API,它被一些库转换为底层窗口系统调用。与 GLX 和 WGL 负责在 Linux 和 Windows 上创建 OpenGL 上下文一样,EGL 负责在嵌入式系统中创建 OpenGL ES 上下文。 Android 不是唯一使用 EGL 的平台,几乎所有支持 Linux 的单 SoC ARM 计算机都将公开 EGL API,因此应用程序将能够创建有效的渲染上下文.
如果您从未使用过 EGL api - 那么这意味着您从未为 Android 或其他 java class(例如 GLSurfaceView
) 正在为您收尾。查看基本的 GLES 示例,您会发现很多对 EGL 内容的引用。至少会要求您提供 EGLConfigChooser
,或者至少为隐式创建的 EGLConfigChoser 提供一些参数。
最近我正在使用 bigflake.com CameraToMpeg 示例,我们可以在其中了解如何使用 OpenGLES。最后的步骤之一是初始化 EGL14 以记录当前的 OPNEGLES 上下文并将其交换到 MediaCodec。
但是我的问题是:EGL14 究竟是什么?为什么 EGL14 是一种创建 OPENGLES 可以渲染的表面的机制,因为在简单的 OPENGLES 中我从不初始化 EGL14?是额外的class,还是OPENGLES操作不可或缺的? EGL 如何知道当前的 OPENGLES 上下文是什么?我还能用它做什么,例如,我能否在 OPENGLES 中创建具有具体纹理的上下文?在哪里可以找到更多关于它的文档 - 书籍?
OpenGL 或 OpenGL ES - 是关于在某些环境中进行渲染的一切。它不知道也不关心那个环境到底是什么。只要它提供了所需的兼容函数列表,可以调用这些函数来实现所需的结果 - 这就是适合您的 OpenGL。
现在你如何创造那个环境?由于这不是 OpenGL 的责任,因此必须由其他人完成,并且必须以符合托管渲染应用程序的系统规则的方式完成。
这就是 EGL 所在的位置 - 它定义了一个 API,它被一些库转换为底层窗口系统调用。与 GLX 和 WGL 负责在 Linux 和 Windows 上创建 OpenGL 上下文一样,EGL 负责在嵌入式系统中创建 OpenGL ES 上下文。 Android 不是唯一使用 EGL 的平台,几乎所有支持 Linux 的单 SoC ARM 计算机都将公开 EGL API,因此应用程序将能够创建有效的渲染上下文.
如果您从未使用过 EGL api - 那么这意味着您从未为 Android 或其他 java class(例如 GLSurfaceView
) 正在为您收尾。查看基本的 GLES 示例,您会发现很多对 EGL 内容的引用。至少会要求您提供 EGLConfigChooser
,或者至少为隐式创建的 EGLConfigChoser 提供一些参数。