OpenGL 1.x、2.x、3.x 和 4.x 有何变化?

3 c++ opengl 3d

哪些变化使 OpenGL 与众不同?我听说有人从 OpenGL 3.x 开始就不喜欢 OpenGL,但是发生了什么?我想学习OpenGL,但不知道学哪一个。我希望新版本能够提供出色的图形,但有什么不好呢?

Dam*_*mon 5

一般来说,OpenGL的每个主要版本大致相当于一个硬件代。这意味着通常如果您可以运行 OpenGL 3.0 卡,您也可以运行 OpenGL 3.3(如果您有足够新的驱动程序)。

OpenGL 2.x 是支持 DX9 的硬件,OpenGL 3.x 是 DX10,OpenGL 4.x 是 DX11 的硬件。没有100%完全重叠的情况,但这是一般情况。

OpenGL 1.x 围绕立即模式(概念上非常易于使用)和严格固定的函数管道展开。进入门槛非常低,因为几乎不需要学习任何东西,也几乎不会做错任何事情。
缺点是您有相当多的库调用,并且 CPU-GPU 并行性在此模型中并不是最佳的。这对于旧硬件来说并不重要,但对于从新硬件中获得最佳性能却变得越来越重要。

从 OpenGL 1.5 开始,在 2.x 中逐渐出现越来越多的范例,从立即模式转向保留模式,即使用缓冲区对象和某种程度的可编程管道。顶点和片段着色器可用,具有不同的功能集和可编程性。
这些版本中的大部分功能是通过(通常是特定于供应商的)扩展实现的,有时只是半途或在几个不同的步骤中实现,并且不少功能对于临时程序员来说具有不明显的限制或陷阱(例如寄存器组合器,缺乏分支、指令限制和相关纹理获取、vtf 支持(支持获取)。

在 OpenGL 3.0 中,固定函数已被弃用,但仍作为向后兼容功能受到支持。几乎所有“现代 OpenGL”都是从 OpenGL 3.x 开始作为核心功能实现的,具有明确的要求和保证,并且具有(几乎)完全可编程的管道。编程模型完全基于使用保留模式和着色器。除了顶点和片段着色器之外,还可以使用几何着色器。
第三版受到了很多负面批评,但我认为这并不完全公平。诚然,出生过程是一场公关惨败,但结果也不全是坏事。与以前的版本相比,OpenGL 3.x 是极好的。

OpenGL 4.x 有一个额外的曲面细分着色器阶段,它需要 OpenGL 3.x 兼容硬件中不存在的硬件功能(尽管我敢说这是营销原因,而不是技术原因)。支持旧硬件无法处理的新纹理压缩格式。
最后,OpenGL 4.x 引入了一些 API 改进,这些改进与底层硬件无关。这些也可在 OpenGL 3.x 下作为 100% 相同的核心扩展使用。

总而言之,我对每个开始学习 OpenGL 的人的建议是立即从3.3版本开始(如果您使用 Apple,则从 3.2 版本开始)。

如今,兼容 OpenGL 3.x 的硬件几乎无处不在。没有合理的理由去假设任何旧的东西,这样你就可以避免很多痛苦。从经济角度来看,支持旧的东西是没有意义的。入门级 GL4 卡目前售价约为 30 美元。因此,买不起 GL3 卡的人也无法支付您的软件费用(不过,维护 2 个代码路径的工作量是原来的两倍)。
另外,您最终将别无选择,只能使用现代 OpenGL,因此,如果您从 1.x/2.x 开始,您将不得不忘记并在以后重新学习。

另一方面,直接进入 4.x 版本是可能的,但我暂时建议不要这样做。API 中不依赖于硬件的任何内容在 3.x 中也可用,而曲面细分(或计算着色器)通常不是立即严格必需的,您可以随时在以后添加。