OpenGL从1.x、2.x、3.x和4.x的变化是什么

What Are The Changes To OpenGL From 1.x, 2.x, 3.x And 4.x?

本文关键字:变化 是什么 OpenGL      更新时间:2023-10-16

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

通常,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支持获取)。

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

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

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

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

另一方面,直接进入4.x版本是可能的,但我建议暂时不要这样做。任何不依赖于API中的硬件的东西也可以在3.x中使用,而tessselation(或计算着色器)通常不是一次严格所必需的,并且您可以在以后添加。

有关更改的确切列表,我建议您下载每个OpenGL主要版本的最新规范文档。在每一个版本的末尾都有几个附录,详细记录了版本之间的变化。

大约一年前设计的许多带有英特尔集成图形的笔记本电脑都没有OpenGL 3。

其中包括一些昂贵的商用机器,例如1600美元的Thinkpad x201,截至今天(2013年4月3日)仍在亚马逊上出售(尽管联想已经停止生产),

OpenGL 3.1删除了"固定函数管道"。这意味着编写顶点着色器和片段着色器不再是可选的:如果要显示任何内容,则必须编写它们。这使得初学者更难在OpenGL中编写"你好世界"。

OpenGL Superbible Rev 5很好地教会了您使用现代OpenGL,而不会依赖于固定的函数管道。如果我从头开始学习OpenGL,我会从这里开始。

如果你想从一个更"历史"的方法开始,他们的rev 4仍然涵盖了固定功能管道。