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 应用程序的核心部分,然后将我的代码移动到 android 或 ios 以便以后开发 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 之后读取像素?