OpenGL ES 与 OpenGL [关闭]

Posted

技术标签:

【中文标题】OpenGL ES 与 OpenGL [关闭]【英文标题】:OpenGL ES versus OpenGL [closed] 【发布时间】:2011-05-29 23:44:14 【问题描述】:

OpenGL ES 和 OpenGL 有什么区别?

【问题讨论】:

您比较的是哪个 OpenGL 和 OpenGL ES 版本? 如果您使用任何 GL2 的东西,请始终以 GLES2 为基础。在 GL2 中有不同的做事方式,但在 GLES2 中大部分是一种方式。你也不会遇到以这种方式移植东西的问题。 OpenGL or OpenGL ES的可能重复 gamedev.stackexchange.com/questions/150/… 【参考方案1】:

OpenGL ES 和 OpenGL 之间更显着的两个区别是删除了用于原始渲染的 glBegin ... glEnd 调用语义(有利于顶点数组)以及为顶点坐标和属性引入定点数据类型更好地支持嵌入式处理器的计算能力,这些处理器通常缺乏 FPU

看看这里:OpenGL_ES

【讨论】:

这些也已从桌面/工作站 OpenGL 的最新版本中删除。 在 OGL 3 和 GLES 2 之间进行了一个有趣的比较。在 OGL 3 中,立即模式已被弃用(尽管仍受支持)。 OGL 3 中的许多(尽管不是全部)功能在 GLES 2 中可用。【参考方案2】:

OpenGL ES 是嵌入式系统的 opengl api。就 api 函数的数量而言,它比普通的 opengl 更简单,但可能更难使用,因为您将不得不使用顶点缓冲区并编写更多着色器。

当你使用普通的 opengl 时,你可以使用 glBegin 和 glEnd 来包围你需要绘制的几何图元,但是当你使用 Opengl ES 时,你将不得不使用顶点缓冲区。 我想这是出于性能考虑。

目前Opengl ES有两个版本,1.1版本只能支持固定渲染管线,2.0版本支持glsl shader。但是它没有固定的渲染管道。换句话说,您必须为所有内容编写自己的着色器。

Opengl ES 主要用于手机和网页(webgl)。根据规范,您的桌面opengl驱动可以支持所有opengl es api。

【讨论】:

你不必使用顶点缓冲区,我不认为。您也可以使用立即模式顶点数组。我错了吗? 是的,你不必使用顶点缓冲区 “当你使用普通的 opengl 时,你可以使用 glBegin 和 glEnd 来包围你需要绘制的几何图元”,如果你想让你的代码向前兼容,也不是如果你'正在使用 Mac,我就是 ;)【参考方案3】:

就像补充一点,OpenGL 3.3 和 OpenGL ES 2.0 大部分是可互操作的,通过使用 OpenGL 3.3 的一部分功能。我的自定义 C++ 引擎对 android/ios/Windows/OSX/Linux 使用相同的 API 调用,但有一些定义。

主要区别包括:

缺乏几何着色器支持 没有最小/最大混合(可能会有扩展) 没有四元列表原语 更受限制的纹理格式(尤其是浮点数) glGetTexImage 不可用 没有变换反馈,其他几个高级功能也一样

还有许多其他差异,但其中涵盖了几个重要的差异。

【讨论】:

我认为我们可以慢慢编辑这篇文章以包含所有缺失的函数调用。而且要比较的版本应该还是3.3和ES 2.0,因为它们是同年发布的 GLES2 中缺少 VAO 是一个很大的问题【参考方案4】:

OpenGL ES 表示嵌入式系统的开放图形库(OpenGL ES 或 GLES)是 OpenGL 计算机图形渲染应用程序编程接口 (API) 的子集,用于渲染 2D 和 3D 计算机图形,例如视频游戏使用的图形,通常是硬件- 使用图形处理单元 (GPU) 加速。它专为智能手机、平板电脑、视频游戏机和 PDA 等嵌入式系统而设计。

OpenGL|ES官网:http://www.opengl.org/

您也可以从 wiki 获取更多信息:http://en.wikipedia.org/wiki/OpenGL_ES

【讨论】:

【参考方案5】:

在此处查看 OpenGL ES 概述:http://www.khronos.org/opengles/

简而言之,ES 是用于“嵌入式系统”的 Open GL 的子集。具体差异取决于您比较的版本和功能集。

【讨论】:

【参考方案6】:

OpenGL ES 注册表包含 OpenGL ES 和相应版本的 OpenGL 之间的详细 API 差异:

OpenGL ES 2.0 / OpenGL 2.0 OpenGL ES 1.1 / OpenGL 1.5

但是,没有包含 OpenGL ES 3.0 差异的文档。

【讨论】:

【参考方案7】:

如果你问“OpenGL 和 OpenGL ES 有什么区别”,我想你会得到一个更好的答案。

OpenGL ES 1.1 和 ES 2.0、OpenGL 1.5 和 2.0 以及 OpenGL 3.0 和 4.0 之间存在巨大差异。

正如其他人所描述的,ES 是为嵌入式系统编写的。它也代表了 GL 规范自成立以来的第一次“房屋清洁”。 OpenGL 有 a) 很多方法可以做同样的事情(例如,你可以用两种不同的方式绘制四边形/矩形,用两种不同的方式对像素图像进行 blit,等等)。一般来说,ES 比 OpenGL 更简单,功能更少,因为它是为不太复杂的硬件设计的。

我敦促您不要看 OpenGL ES 1.1,因为它已成为过去,并不代表 OpenGL 或 OpenGL ES 在未来架构上的发展方式。

【讨论】:

【参考方案8】:

两者之间的主要区别在于 OpenGL ES 是为智能手机等嵌入式系统而设计的,而 OpenGL 是用于桌面的。在编码层面,OpenGL ES 不支持 glBegin/glEnd 等固定功能函数。OpenGL 可以支持固定功能管道(使用兼容性配置文件)。

【讨论】:

【参考方案9】:

术语和版本相当混乱(尤其是对于新手而言)。如需更全面地了解 OpenGL 和 OpenGL-ES (GLES),请参阅 OpenGL - Then and Now。

【讨论】:

该链接还包含一个很好的示例教程,很好地解释了 OpenGL 渲染管道的工作原理。 这里是教程的link。【参考方案10】:

与 OpenGL 4.6 相比,ES 3.0 的现代答案与公认的答案大不相同。现在,所有固定管道的东西都消失了。

ES,对于嵌入式系统,远没有那么健壮。

【讨论】:

【参考方案11】:

OpenGL ES 只是嵌入式系统的 OpenGL API(OpenGL ES 指的是 OpenGL Embedded Systems)。所以它是 OpenGL 的一个子集,广泛用于手机和一些 VR 系统,它是为不太复杂的硬件设计的。 OpenGL ES 的术语和功能比 OpenGL 少,可以把它想象成您正在使用该系统所需的东西,因为如果我们的整个工作都不需要一个功能或者硬件无法处理它,那么就没有意思了添加该函数,但这也使得该 API 的使用更加困难,因为需要编写更多的着色器和复杂的代码来使事情变得简单,因为 OpenGL ES 没有像 OpenGL 那样在图形管道中提供着色器。 OpenGL ES 的最新版本是 3.2,它现在可以为 Tessellation 提供额外几何细节和新几何着色器的支持。所以我建议你开始学习或使用 OpenGL ES 3.0+(如果它是你的目标 API),因为现在和下一代不会使用旧版本,尤其是我们今天拥有的更强大的硬件和显卡;如果您的目标是 OpenGL,则从 v3.3+ 或 4.0+ 开始。当您有更多时间可以快速浏览旧版本时,可以更好地了解这些东西是如何发展的,以及为什么会这样。 您可以查看此链接了解更多详情:https://en.wikipedia.org/wiki/OpenGL_ES

【讨论】:

【参考方案12】:

OpenGL 是 2D 和 3D 图形 API,将数以千计的应用程序引入各种计算机平台。

OpenGL ES 是桌面 OpenGL 的定义明确的子集

OpenGL® ES 是一种免版税的跨平台 API,用于嵌入式系统(包括控制台、电话、电器和车辆)上的全功能 2D 和 3D 图形。它由定义良好的桌面 OpenGL 子集组成,...

看到这个link。

附言

WebGL 与 OpenGL ES 共享规范,即如果您学习过桌面 OpenGL,则学习其他(OpenGL ES、WebGL)很简单。

【讨论】:

【参考方案13】:

简单地说,opengl 是桌面版本,而 opengl es 适用于像手机这样的嵌入式系统,其中内存和性能限制比计算机更大。 opengl es 会更难用。

【讨论】:

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

Android上OpenGL-ES游戏的教程和库[关闭]

Android设备上的OpenGL ES 2.0扩展[关闭]

iOS OpenGL ES 与 Android OpenGL ES 兼容吗?

OpenGL ES 2.x 与 OpenGL 兼容

使用 opencl 将软件渲染到 opengl 2d 视图 [关闭]

OpenGL ES总结OpenGL ES中EGL