EGL和OpenGL之间有什么关系?

han*_*son 25 opengl opengl-es openvg egl

我正在写一个实现开放式VGOpenGL的| ES,这两者取决于Khronos的EGL API,据说是为了便于携带,我猜.

出于乐趣和教育原因,我正在OpenGL ES上编写一个OpenVG实现 - 我没有做过很多渲染工作,我想了解更多有关开放API和实践明确标准的实践(更容易看看我是否得到了正确的结果).

据我了解,EGL提供了一个标准API,用于检索绘图上下文(或者它正确调用的内容),而不是使用多个OS提供的API之一(GLX,WGL等)

在此输入图像描述

我很难相信Khronos会经历这样的努力并将标准OpenGL从循环中移开但事实是,我还没有发现OpenGL(真正的交易)如何或者是否与EGL接口或者它是否只是OpenGL ES.如果OpenGL ES可以使用EGL的绘图上下文,标准OpenGL是否也可以使用?

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

如果OpenVG,OpenGL和OpenGL ES依赖于EGL,我认为我的问题可以用"是"或"否"来回答.请记住,我昨晚首先进入了这个主题.

OpenGL使用或依赖于EGL吗?


关闭主题,但没有EGL标记.应该有吗?

RAO*_*AOF 14

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

EGL规范,p42:

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

EGLBoolean 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提供这些入口点.根据您正在玩的平台,这可能是也可能不是问题.


Nic*_*las 12

OpenGL和EGL之间没有任何关系.EGL通常不在桌面上运行,并且无法通过EGL创建桌面OpenGL上下文.

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

去年Khronos发布了一些关于创建可以在桌面上工作并制作OpenGL上下文的EGL版本的噪音,但到目前为止,没有任何结果.

  • @NicolBolas X11上的EGL至少自2011年(也许之前)在Mesa中支持创建桌面OpenGL上下文. (11认同)
  • Wayland显示服务器协议使用EGL,这个答案现在完全过时了. (9认同)
  • @humanityANDpeace:粗略查看 Mesa 的网站,我不清楚您可以使用 Mesa3D 和 EGL 来创建*桌面* OpenGL 上下文。此外,Wayland 并不是非常普遍。所以我认为目前没有必要更改这里所说的任何内容。如果 Mir 被 Linux 广泛采用,那么也许吧。或者,如果 NVIDIA 能够运行大量桌面 OpenGL,也许。但目前,“EGL *一般* 不在桌面上运行”的说法仍然正确。 (2认同)
  • 这个答案已经过时了,可以更新或删除吗? (2认同)

Ale*_*rth 9

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).在Unix平台上也可以使用GLX_EXT_create_context_es_profileGLX_EXT_create_context_es2_profile扩展.

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