最近我读了这个名单,我注意到,几乎所有我从OpenGL的红皮书研究被视为过时。 我说的是像素传输操作,像素图,蓄积缓冲器,开始/结束函数(!?),自动纹理贴图生成和当前光栅位置。
他们为什么要举报这些特点过时? 它会好起来仍然使用他们? 什么解决方法?
最近我读了这个名单,我注意到,几乎所有我从OpenGL的红皮书研究被视为过时。 我说的是像素传输操作,像素图,蓄积缓冲器,开始/结束函数(!?),自动纹理贴图生成和当前光栅位置。
他们为什么要举报这些特点过时? 它会好起来仍然使用他们? 什么解决方法?
在我变得更好的意见的。 但这个所谓的Immediate Mode
是在OpenGL 3.0确实过时主要是因为它的性能是不是最佳的。
在直接模式下,你使用像电话glBegin
和glEnd
。 因此原语的渲染取决于程序的命令时,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/
从字面上试着去忘记你所知道的,到目前为止,即时模式早已过时,不应再使用,而是专注于新技术;)
编辑 原谅我,如果我用“中间”而不是“即时”,我认为它实际上是所谓的“直接”,我倾向于混合起来。
他们为什么要举报这些特点过时?
首先,一些术语:他们不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
。