GL_QUADS有什么不好的?

Roo*_*kie 63 opengl deprecated

我听说GL_QUADS将在OpenGL版本> 3.0中删除,为什么会这样?我的旧程序将来不会有用吗?我已经进行了基准测试,GL_TRIANGLES或者GL_QUADS在渲染速度方面没有差异(甚至可能GL_QUADS更快).那么重点是什么?

jal*_*alf 84

关键是你的GPU呈现三角形,而不是四边形.从两个三角形构造一个矩形非常简单,因此API实际上不需要具有本地渲染四边形的能力.OpenGL正在经历一个重大的修剪过程,削减了15年前有意义的许多功能,但不再与GPU的工作方式相匹配,或者GPU 将如何运作.我相信,固定功能管道也已从最新版本中消失,因为再一次,它不再是必需的,它不再与GPU工作方式(可编程着色器)相匹配.

关键是OpenGL API越小越紧,供应商编写健壮,高性能的驱动程序就越容易,并且学习正确有效地使用API​​就越容易.

几年前,OpenGL中几乎任何东西都可以用3-5种不同的方式完成,这给开发人员带来了很大的负担,如果你想要最佳的性能,就要找出哪种实现是正确的.

所以他们试图简化API.

  • @jalf:从技术上讲,没有十年的停滞和微小的更新; GLSL几乎不会轻微.Khronos得到ARB(而且大多数Khronos ARB成员都是原始成员)的唯一原因是因为ARB的前所有者SGI正在死亡.不,当ARB决定尝试重写整个API时,停滞发生了.这花了2年,并没有实际_happen_. (3认同)
  • @jalf:我同意OpenGL在一段时间内"与3d世界格格不入".我甚至写了一篇关于他们失败的[半流行答案](http://programmers.stackexchange.com/questions/60544/why-do-game-developers-prefer-windows/88055#88055).问题是你首先说的是"十年的停滞和非常小的更新",这是一个非常不同的事情.ARB的问题是没有更新API; ARB的问题是_wrongly_更新它.如果你要走下坡路,那不是_stagnation_ (3认同)
  • 这就是它被删除的原因.15年前,四边形和三角形一样好,因为你要么在CPU上渲染,在任何一种情况下都没有专用硬件,要么在各种类似GPU的硬件上渲染,其中一些本身支持四边形.但今天,*没有*GPU原生支持四边形.因此,OpenGL在现代实现中对四边形的支持归结为它在内部将每个四边形切割成两半,并渲染生成的三角形.没有必要使用3d API来做到这一点.如果你真的想要四边形,你可以轻松定义一个外部帮助库 (3认同)
  • @jalf,现在经过了更多测试,无论我有什么设置,GL_QUADS总是更快。我尝试将所有缓冲区计数设置为相同,将所有缓冲区大小设置为相同,依此类推。但是GL_QUADS总是赢,当我将它们设置为使用完全相同的缓冲区数量时,这两者之间的差异最小:三角形为33fps,四边形为36fps。所以,还有其他人做过这样的测试吗?这让我想到了为什么他们想摆脱它,甚至更快。 (2认同)

小智 10

人们已经对你的问题做出了很好的回答.除了答案之外,GL_QUADS被弃用的原因之一是由于四边形的未定义性质.

例如,尝试用点建模2d方形(0,0,0), (1,0,0), (1,1,1), (0,1,0).这是一个扁平的四边形,一个角落被拉起来.以这种方式绘制NORMAL平面是不可能的.根据驱动程序,它将以一种或另一种方式分成2个三角形 - 这是我们无法控制的.这样的模型必须用两个三角形建模. - 三角形的所有三个点总是位于同一平面上.

  • 四边形不具有“未定义的性质”,只是因为您可以使用它们来定义几何上不平坦的东西。谁说聚必须是平的?如果程序员想要它平坦,他可以将其平坦化。如果程序员认为并非所有在同一平面上的点都可以形成一个平面,那只是程序员的天真想法。即使使用三角形你仍然无法实现这一点,所以提出这个是无关紧要的。显然他们只会在所有的 Poly 中使用 Tri。他们必须。插值是平坦的。四边形只是将两个三角形与 4 个顶点(而不是 6 个顶点)放在一起的一种方式。 (3认同)

Nic*_*las 8

它不会"成为"任何东西.与许多其他功能一样,GL_QUADS在3.0版中已弃用,在3.1 版中已删除.显然,如果您创建兼容性上下文,这一切都无关紧要.

任何人都可能因为弃用它们而给出的任何答案都是绝对的猜测.

  • @pst:现在存在主要版本以与实际的新硬件相对应.GL 3.2可以在与3.1和3.0相同的硬件上实现.但4.0无法在与3.3相同的硬件上实现.有点像现在的Direct3D主要版本. (4认同)
  • 我不确定弃用它们的答案完全是猜测;-) 无论如何,实际删除“次要”中的功能要积极得多。 (2认同)