OpenGL ES 2.x 与 OpenGL 兼容

Posted

技术标签:

【中文标题】OpenGL ES 2.x 与 OpenGL 兼容【英文标题】:OpenGL ES 2.x compatible with OpenGL 【发布时间】:2013-06-25 06:55:15 【问题描述】:

我打算使用 Ubuntu 和 QT Creator 来研究和开发 OpenGL ES 2.x 应用程序。很明显,OpenGL ES 2.x 在桌面环境下不容易配置,OpenGL ES 是 OpenGL 的子规范。

所以我想知道是否可以在 OpenGL 环境中开发 OpenGL ES 2.x 应用程序的核心部分,然后将我的代码移动到 androidios 以便以后开发 GUI?

【问题讨论】:

【参考方案1】:

不容易配置?我不敢苟同。只需获取an emulator like the one Mali has,让您的程序直接使用他们的库而不是系统库。

那么您可以非常确定 GL 代码应该没问题,当然,只要您能够在 iOS(Obj-C++?)或 Android(NDK?)上运行它。

【讨论】:

我是 OpenGL ES 和 C++ 的新手,所以对我来说很棘手。是否有 ant 文档或教程可以推荐在 Ubuntu 中设置 OpenGL EL 开发环境?谢谢 @Korben The Mali ES Emulator Page 也有安装说明。【参考方案2】:

Qt5 默认使用 OpenGL ES 2.0 构建,因此如果您使用当前的 Qt,您可以直接使用它,Qt 开发人员也表示他们将在 5.2 版本中同时支持 android 和 iPhone。

【讨论】:

【参考方案3】:

Mesa 实现了常规 OpenGL 和 OpenGL ES:http://www.mesa3d.org/opengles.html。 AFAIK,部分 GPU 也支持 OpenGL ES 3.0。

大多数 OpenGL 库还内置了跨 API 兼容性,因此您可以编译和运行 OpenGL ES 代码而无需或只需极少的更改。您确实需要制定平台细节,例如设置渲染上下文、帧缓冲区和进行实际绘图。但这不是 GL/GLES 特定的。

ES API 兼容性自 OpenGL 3.2 起就已存在,支持大多数调用。其余的由ARB_ES2_compatibility extension 添加,它是 OpenGL 4.1 的一部分。 OpenGL 4.2 添加了完整的 OpenGL ES 3.0 支持。

是的,它运作良好。我自己一直在 Android、Linux、Mac OS X 和 iOS 上运行相同的 ES 代码。它只需要比单一平台支持多一点工作。

【讨论】:

【参考方案4】:

我有一个在 iOS 和 Windows 上实现 ES 2.0 的自己的引擎,因此它可以在两个系统上运行。你只需要关心不支持的格式和方法(比如windows不支持的pvrtc,所以我写了一个转换器)。

为了方便起见,我首先在 iOS 上实现所有内容,以便了解其工作原理,然后将其移植到 Windows。目前我只有大约 1000 行代码,它们在每个平台上都不同(但我使用的是 Xamarin)。

【讨论】:

以上是关于OpenGL ES 2.x 与 OpenGL 兼容的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅OpenGL ES 3.0和向后兼容性

我的OpenGL学习进阶之旅OpenGL ES 3.0和向后兼容性

OpenGL ES 2.x:如何在 glDiscardFramebufferEXT 之后读取像素?

openGL之API学习(一七七)opengl gles glsl glsl es版本对应关系

android openGL ES2 一切从绘制纹理開始

将 OpenGL ES 2 移植到 OpenGL