弃用的OpenGLfunction

我最近读了这个列表,并且注意到我从OpenGL红皮书中学到的几乎所有东西都被认为已经被弃用了。 我正在谈论像素传输操作,像素绘图,累积缓冲区,开始/结束函数(!?),自动生成mipmap和当前光栅位置。

为什么他们将这些function标记为已弃用? 还可以使用它们吗? 什么是解决方法?

Solutions Collecting From Web of "弃用的OpenGLfunction"

在我看来,它更好。 但是这个所谓的Immediate Mode在OpenGL3.0中确实被弃用,主要是因为它的性能不是最优的。

在即时模式下,您可以使用诸如glBeginglEnd调用。 所以原始图形的渲染依赖于程序的命令,OpenGL只有在得到来自CPU的适当命令后才能前进。 相反,您可以使用缓冲对象来存储所有的顶点和数据。 然后告诉OpenGL使用glDrawArrays或者glDrawElements等命令或者像glDrawElementsInstanced这样更专用的命令来使用这个缓冲区来渲染其基元。 GPU忙于执行这些命令并将缓冲区绘制到目标FrameBuffer (基本上是渲染目标)。 该程序可以关闭并发出一些其他命令。 这样,CPU和GPU同时处于繁忙状态,没有浪费时间。

不是最好的解释,但我的建议:尝试学习这个新的渲染管道,而不是。 远远超过即时模式。 我推荐如下教程:

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

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

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

从字面上试图忘记你迄今为止所知道的,直接模式已经过时了,不应该再使用,而应该关注新技术;)

编辑 对不起,如果我使用“中间”而不是“直接”,我认为它实际上被称为“立即”,我倾向于混合起来。

为什么他们将这些功能标记为已弃用?

首先,一些术语:他们没有被剥夺 。 在OpenGL 3.0中,它们被弃用(意思是“可能在以后的版本中被删除”); 在3.1及以上版本中,大部分都被删除了 。 兼容性配置文件将删除的功能恢复。 在Windows和Linux上广泛实现的同时,Apple 3.2的实现只实现了核心配置文件。

至于删除背后的原因,这取决于你在谈论哪个功能。 我们真的只能猜测为什么ARB的任何特定功能:

像素传输操作

像素传输操作 尚未被移除 。 如果你正在谈论glDrawPixels ,那是一个像素传输操作,但它是一个像素传输。 不是所有的人。

说到:

像素图纸

因为这是一个可怕的想法开始。 glDrawPixels是一个性能陷阱; 它听起来不错,整洁,但它表现的非常糟糕,因为它很简单,人们会尝试使用它。

有一些容易做,但在性能可怕的东西鼓励人们编写可怕的OpenGL应用程序。

累积缓冲区

着色器可以做到这一点很好。 实际上更好; 他们有更多的选择比累积缓冲区覆盖。

开始/结束功能(!?),

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

自动生成mipmap

因为这是一个可怕的想法开始。 让OpenGL决定什么时候做一个重量级的操作,比如生成纹理的贴图不是一个好主意。 ARB有更好的想法就是让你说, “OK,OpenGL,现在为这个纹理生成一些mipmap。”

当前光栅位置。

另一个表现陷阱/糟糕的主意。

还可以使用它们吗?

这取决于你。 NVIDIA已经有效承诺永久支持兼容性配置文件。 这意味着AMD和英特尔可能也必须如此。 这涵盖了Windows和Linux。

在MacOSX上,Apple更严格地控​​制GL实现,他们似乎承诺支持兼容性配置文件。 但是,他们似乎没有兴趣推进OpenGL,因为他们停止了3.2。 即使Mountain Lion也没有更新OpenGL版本。

什么是解决方法?

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