编写兼容OpenGL和OpenGL ES的代码指南?

9
我熟悉OpenGL和OpenGL ES之间的基本差异,例如没有glBegin,glEnd,没有四边形等。 我的问题不是关于这两个API之间的区别,而是关于编写可以在两个API及其各种实现上实际运行的代码,特别是在ES方面,其中实现似乎更加多样化。
自然地,这意味着符合同时存在于两个API中且语法相同的功能,没有太过花哨和尖端的东西,其中OpenGL ES 2是最低公共分母。

你可能会发现阅读MaliOpenGLESEmulator文档很有趣。这是一个OpenGL ES模拟器(适用于MAC / PC),将OpenGL ES调用转换为OpenGL。他们列出了GL 2.0和GLES 2.0之间差异的一些细节。例如,在GL中缺少(显然)固定点数据,着色器精度说明符和其他一些小东西。 - kerim
2个回答

3

您可能对新的OpenGL ES兼容性扩展ARB_ES2_compatibility感兴趣(在OpenGL 4.1中添加到核心中)。

当然,实际使用扩展需要支持更新的4.1台式机OpenGL,但可以阅读它们并查看在桌面上获取ES支持所需的内容,并尽可能避免在ES代码中出现。虽然有些东西可能与旧版的台式机OpenGL不兼容,主要是一些着色器​​功能,如浮点精度。

还有一个ARB_ES3_compatibility(在OpenGL 4.3核心中),但它很可能是可以忽略的,因为它是针对OpenGL ES 3.0的。


2
根据Khronos的说法,OpenGL ES是桌面OpenGL的一个子集,因此要编写兼容的代码,只需要使用OpenGL ES文档即可。
引自http://www.khronos.org/opengles/

OpenGL® ES是一个免费、跨平台的API,用于在嵌入式系统上进行全功能2D和3D图形处理,包括游戏机、手机、电器和车辆。它由桌面OpenGL的明确定义的子集组成。

编辑:正如Justin Meiners在评论中指出的那样,实际上在细节方面存在一些差异。David C. Bishop的答案有更多信息。

这不是真的。虽然大部分代码将不变地转移,但存在兼容性问题。 - Justin Meiners
@JustinMeiners:我很好奇这些是文档记录的差异还是实现中的错误?我没有发现任何这些兼容性问题,而Khronos文档仍然使用“子集”一词。如果它实际上不是严格的子集,我想更新我的答案。 - Graeme Hill
一些例子包括着色器精度限定符、保证尺寸的差异。如果你看一下文档ARB_ES2_compatibility,就可以了解所有的更改,以便实际兼容性。 - Justin Meiners

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