28

我正在为 Go 中的 OpenVG 和 OpenGL|ES 编写一个实现,它们依赖Khronos EGL API,我猜应该是为了简化可移植性。

出于有趣和教育的原因,我正在 OpenGL ES 之上编写 OpenVG 的实现——我没有做很多渲染工作,我想了解更多关于开放 API 和实践实现定义良好的标准(更容易看看我是否得到了正确的结果)。

据我了解,EGL 提供了一个标准 API 来检索绘图上下文(或任何正确的名称),而不是使用多个操作系统提供的 API(GLX、WGL 等)之一

在此处输入图像描述

我很难相信 Khronos 会经历这样的努力并将标准 OpenGL 排除在外,但问题是,我还没有发现 OpenGL(真正的交易)如何或是否与 EGL 接口,或者它是否只是 OpenGL ES。如果 OpenGL ES 可以使用来自 EGL 的绘图上下文,那么标准 OpenGL 也可以工作吗?

我对这一切都很陌生,这就是为什么我很兴奋,但我正在做的真正项目是一个 Go 小部件工具包,它利用 OpenVG 进行绘图操作并尽可能使用硬件加速。

如果 OpenVG、OpenGL 和 OpenGL ES 依赖于 EGL,我想我的问题可以用“是”或“否”来回答。请记住,我昨晚一头扎进了这个主题。

OpenGL 是使用还是依赖于 EGL?


离题,但没有 EGL 标签。应该有吗?

4

3 回答 3

16

您可以通过;绑定EGL_OPENGL_API为您的线程的当前 API 。eglBindAPI(EGLenum api)随后的 eglCreateContext 将创建一个 OpenGL 渲染上下文。

来自EGL 规范,p42:

本节中描述的一些函数使用了当前的渲染 API,它是通过调用在每个线程的基础上设置的

EGLBolean eglBindAPI(EGLenum api);

api 必须指定支持的客户端 API 之一,EGL_OPENGL_API、EGL_OPENGL_ES_API 或 EGL_OPENVG_API

需要注意的是,EGL 实现在其权利范围内不受支持,如果您尝试绑定它,则会EGL_OPENGL_API生成错误。EGL_BAD_PARAMETER

如果不拿起 AGL/WGL/GLX 杂物,也很难链接到 libGL;这些平台上的 ABI 要求 libGL 提供这些入口点。根据您使用的平台,这可能是也可能不是问题。

于 2012-04-17T07:32:39.413 回答
12

OpenGL 是使用还是依赖于 EGL?

不,您可以在没有 EGL 的情况下运行 OpenGL。

但是有可能让 EGL 实现能够创建桌面 OpenGL 上下文。这是因为 EGL 的 eglBindAPI(int api) 允许 EGL_OPENGL_API、EGL_OPENGL_ES_API 或 EGL_OPENVG_API。

但如果你问:

OpenGL-ES 是使用还是依赖于 EGL?

答案是肯定的,但也有例外

目前(2015 年),您有几个依赖EGL来创建图形上下文的 OpenGL-ES 实现:Google ANGLE、PowerVR、ARM MALI、Adreno、AMD、Mesa 等。

但在NVIDIA和 Intel 驱动程序的最新版本中,您也可以直接请求 OpenGL-ES 上下文,其中扩展WGL_EXT_create_context_es_profileWGL_EXT_create_context_es2_profile可用 (Windows)。在GLX_EXT_create_context_es_profileGLX_EXT_create_context_es2_profile扩展可用 的 Unix 平台上也是如此。

EGL 的目的是通过创建一种可移植和标准的方式来初始化和获取支持的图形 API 的上下文来简化开发人员的生活,而无需担心平台特定的问题,如 WGL、GLX 等。这是 EGL 实现者的问题,而不是最终程序员。

于 2015-09-25T18:33:10.710 回答
8

OpenGL和EGL之间没有关系。EGL 一般不在桌面上运行,也没有通过 EGL 创建桌面 OpenGL 上下文的能力。

相反,OpenGL 上下文由特定于平台的 API 创建和管理。在 Windows 上,使用 WGL API。在基于 X11 的平台上,使用 GLX。等等。

去年,Khronos 发出了一些关于创建可以在桌面上运行并生成 OpenGL 上下文的 EGL 版本的噪音,但到目前为止,还没有任何结果。

于 2011-08-10T20:40:02.607 回答