不推荐使用的OpenGL功能(Deprecated OpenGL features)

2019-06-27 04:06发布

最近我读了这个名单,我注意到,几乎所有我从OpenGL的红皮书研究被视为过时。 我说的是像素传输操作,像素图,蓄积缓冲器,开始/结束函数(!?),自动纹理贴图生成和当前光栅位置。

他们为什么要举报这些特点过时? 它会好起来仍然使用他们? 什么解决方法?

Answer 1:

在我变得更好的意见的。 但这个所谓的Immediate Mode是在OpenGL 3.0确实过时主要是因为它的性能是不是最佳的。

在直接模式下,你使用像电话glBeginglEnd 。 因此原语的渲染取决于程序的命令时,OpenGL不能前进,直到它得到来自CPU此时,相应的命令。 相反,你可以使用缓存对象来存储所有的顶点和数据。 然后告诉OpenGL使用该缓冲区像命令来显示它的图元glDrawArraysglDrawElements甚至像更专业的命令glDrawElementsInstanced 。 而GPU正在执行这些命令和绘图缓冲器到目标FrameBuffer (基本上渲染目标)。 该程序可以熄灭,并发出其他一些命令。 这样,无论是CPU和GPU都忙着在同一时间,不浪费时间。

不是有史以来最好的解释,但我的建议:努力学习这个新的渲染管线来代替。 它远远的优于即时模式。 我建议像教程:

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl-tutorial.org/

http://ogldev.atspace.co.uk/

从字面上试着去忘记你所知道的,到目前为止,即时模式早已过时,不应再使用,而是专注于新技术;)

编辑 原谅我,如果我用“中间”而不是“即时”,我认为它实际上是所谓的“直接”,我倾向于混合起来。



Answer 2:

他们为什么要举报这些特点过时?

首先,一些术语:他们不deprected 。 在OpenGL 3.0,它们被弃用(意为“可以在以后的版本中删除”); 在3.1以上,其中大部分被除去 。 该相容性分布带来了删除的功能了。 虽然它被广泛应用在Windows和Linux中实现,苹果的3.2实现只实现了核心配置。

至于拆除背后的推理,这取决于它的功能,你正在谈论。 我们可以真正只能推测,为什么ARB任何特定的功能:

像素传输操作

像素传输操作还没有被删除 。 如果你在谈论glDrawPixels ,这是一个像素传输操作,但它是一个像素传输。 不是所有的人。

说到这:

像素附图

因为它是一开始就有一个可怕的想法。 glDrawPixels是一个性能陷阱; 这听起来不错,整洁,但可怕的执行,并因为它的简单,人们会尝试使用它。

拥有的东西,是很容易做到,但可怕的性能鼓励人们写可怕的OpenGL应用程序。

积累缓冲器

着色器可以做到这一点就好了。 其实更好; 他们比积累缓冲区涵盖了很多更多的选择。

开始/结束函数(!?)

这是另一种表现陷阱。 即时模式渲染是非常缓慢的。

自动生成的mipmap

因为它是一开始就有一个可怕的想法。 有OpenGL的决定时,做一个重量级的操作像制作纹理的的贴图是不是一个好主意。 在更好的主意了ARB必须是只让你说, “OK,OpenGL的,产生这种质地一些的贴图现在。”

当前光栅位置。

另一个性能陷阱/坏主意。

它会好起来仍然使用他们?

随你(由你决定。 NVIDIA已经有效地承诺支持永久的相容性分布。 这意味着,AMD和英特尔可能将不得不为好。 因此,覆盖Windows和Linux。

MacOSX上,苹果控制着GL实现更严格,他们似乎承诺支持相容性分布。 然而,他们似乎都在推进OpenGL的,因为他们停止与3.2兴趣不大。 即使山狮没有更新的OpenGL版本。

什么解决方法?

停止使用性能陷阱。 使用缓冲区对象的其他人一样,你的顶点数据。 使用着色器。 使用glGenerateMipmap



文章来源: Deprecated OpenGL features