我能在OSX中使用EGL吗?

8
我正在尝试在 Mac 上的 C++ 应用程序中使用 Cairo 库,并利用其 GL 加速。它支持 EGL 和 GLX。使用 GLX 需要(外部安装的)XQuartz 并打开 XWindow,因此我倾向于使用 EGL。苹果的 编程指南页面 建议使用 NSOpenGL*,而 这个 页面和其他页面则表示它使用 CGL。这个(2012)页面说 Mac 有 EAGL,它只类似于 EGL(我想它是指 IOS,而不是 MAC,因为它的 EAGL 参考链接到 IOS 帮助页面)。

Angle表示它支持EGL,但仅适用于Windows上的Direct3D,据我理解(?)

GLFW v3也被称为支持(在未来版本中?),但是通过GLX,据说(?)

Mali表示它有一个Mac模拟器,但我不知道它是否加速或仅适用于其硬件(它还表示它仅在不同平台上支持EGL的子集)。

当使用EGL时,大多数链接都与移动设备有关。 我正在使用Mac OS 10.8和XCode 4.6。当前情况如何/我如何在Mac上使用EGL(现在)?


1
Quartz是OS X上的本地窗口系统,通过最终在Quartz之上分层的兼容性层,您不会获得更好的性能。 - Andon M. Coleman
好的,我甚至比它的软件(图像)后端得到了更糟糕的结果! - user3648895
好的,当你说到Quartz时,它实际上取决于你的意思; 有旧的Quartz 2D库,它没有GPU加速,但是苹果还将大约半打其他核心图形组件称为Quartz ___. 有Quartz Composer、Quartz 2D Extreme(GPU加速的Quartz 2D)、一个名为XQuartz的X服务器,...说一个软件有一个Quartz后端并不能解释很多。但最终,在OS X上显示任何东西都需要通过一个带有Quartz单词的东西进行。 - Andon M. Coleman
@Coleman,Quartz后端是用CGContextRef(和大小)参数构建的。我不知道它是否可以通过配置进行(GPU)加速,但EGL问题仍然存在吗? - user3648895
据我所知,Apple只支持在OS X上使用EAGL。它是一个Objective C框架,因此Cairo无法在没有一些修改的情况下使用它。同样,NSOpenGL也是Obj-C和CGL(这是C)仅允许在全屏模式下绘制。在这些选项中,XQuartz听起来最容易,尽管它与本地相差甚远。但说实话,我认为Cairo甚至不需要创建/管理渲染上下文本身来使用GL - 文档表明您可以使用自己的框架来完成这一点。 - Andon M. Coleman
@coleman,我不确定OSX是否有EAGL,它可能只适用于IOS。所有或大多数Obj-c类都使用/导致一些c引用(例如:CGContextRef),而CGL无法使用,因为它仅限于全屏模式。如果我找不到(积极的)答案,我将(不得不)尝试合并库(选择GLFW),但似乎需要(远远)超出一点的工作量... - user3648895
3个回答

1

这里是https://github.com/SRA-SiliconValley/cairogles/

克隆cairo,检出nsgl分支。这个cairo是我们对cairo 1.12.14的改进版本,与上游cairo相比具有以下增强功能:

  1. 支持OpenGL ES 3.0,并支持OpenGL ES 2.0角度MSAA扩展
  2. 新的凸多边形镶嵌器,用于填充圆形以进行MSAA合成
  3. 新的cairo API - cairo_rounded_rectangle() - 它针对MSAA合成进行了优化
  4. 为四个后端(GL/GLES、quartz、xcb和image)支持高斯模糊
  5. 为四个后端(GL/GLES、quartz、xcv和带有阴影缓存的image)支持投影和内嵌
  6. 支持更快的描边,当描边宽度=1时,我们称之为hairline stroke
  7. 添加了NSOpenGL的集成
  8. 各种错误修复和优化。
在Mac OSX上,您有两个选择:GLX或NSOpenGL - 它们是相互排斥的。您可以从macport获取mesa glx。 1. 要编译NSOpenGL,请使用./configure --prefix = your_install_location --enable-gl = yes --enable-nsgl = yes --enable-glx = no --enable-egl = no 2. 要编译GLX,请使用./configure --prefix = your_install_location --enable-gl = yes --enable-glx = yes --enable-nsgl = no --enable-egl = no。 如果您对egl感兴趣(在mac上不可用,但是linux和各种嵌入式平台形式的mesa 9.1+具有egl),请执行以下操作: ./configure --prefix = your_install_location --enable-gl = no --enable-egl = yes --enable-glesv2 = yes --enable-glesv3 = no ===== 这将编译gles2驱动程序。 ./confgure --prefix = your_install_location --enable-gl = no --enable-egl = yes --enable-glesv2 = no --enable-glesv3 = yes ==== 这将编译glesv3驱动程序(mesa 9.1+具有glesv3)。 您可以使用CFLAGS =“-g”进行调试或CFLAGS =“-O2”进行优化。

cairo gl/gles有3个GL合成器(GL/GLES后端的渲染路径)。默认的是span合成器,它是AA的软件模拟,速度较慢。如果您的驱动程序支持MSAA,请使用msaa合成器。要使用MSAA合成器,您可以在终端中导出CAIRO_GL_COMPOSITOR=msaa,或在程序中使用setenv()。

我有示例代码展示cairo用于quartz、xcv、image、glx、gel或nsgl。如果您感兴趣,我可以发送给您。

欢迎任何错误报告/补丁。我还没有时间让wgl(MS Windows)正常工作。此外,有一个d3d后端对cairo来说也很好,只是我没有时间去做这个 - 在待办列表中。

享受


0
是的,cairo已经被移植到使用nsopengl。如果你有兴趣,我可以向你展示如何操作,并提供一些示例代码。性能比quaetz gl要快得多。

0

你绝对可以使用角度:

#define GL_GLEXT_PROTOTYPES
#include <GLES2/gl2.h>
#include <EGL/egl.h>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接