我听说在 OpenGL > 3.0的版本中,GL_QUADS将会被移除,这是为什么呢?那么我的旧程序在将来会不工作吗?我已经基准测试,和 GL_TRIANGLES或 GL_QUADS在渲染速度没有差异(甚至可能是 GL_QUADS更快)。那有什么意义呢?
GL_QUADS
GL_TRIANGLES
不是什么“将要”。与许多其他功能一样,GL_QUADS在版本3.0中被弃用,而 被移除了在版本3.1中被弃用。显然,如果您创建了一个兼容性上下文,那么这些都是无关紧要的。
任何人对于贬低它们的理由给出的任何答案都将是纯粹的推测。
重点是你的图形处理器呈现的是三角形,而不是四边形。由两个三角形构造一个矩形非常简单,因此 API 并不需要负担本地呈现四边形的能力。OpenGL 正在经历一个重要的调整过程,削减了许多15年前有意义的功能,但是不再匹配 GPU 的工作方式,也不再匹配 GPU 的 准备好了工作方式。我相信,最新版本的固定函数管道也不复存在了,因为再一次,它不再是必要的,它也不再与 GPU (可编程着色器)的工作方式相匹配。
关键是 OpenGL API 越小越紧密,供应商就越容易编写健壮的高性能驱动程序,也就越容易学会正确有效地使用 API。
几年前,实际上 OpenGL 中的任何事情都可以通过3-5种不同的方式来完成,如果您想要获得最佳性能,这给开发人员带来了很大的负担,需要确定哪种实现是 正确的那个。
所以他们试图简化 API。
人们对你的问题已经作出了很好的回答。除了他们的回答,GL_QUADS被否定的原因之一是因为四边形的不确定性。
例如,尝试用点 (0,0,0), (1,0,0), (1,1,1), (0,1,0)建模一个2d 平方。这是平的四边形,一个角向上拉。这样画一个正常的平方是不可能的。根据不同的驱动程序,它将被分割成两个三角形,或者一种或另一种方式-这是我们无法控制的。这样的模型必须用两个三角形建模。三角形的三个点总是在同一个平面上。
(0,0,0), (1,0,0), (1,1,1), (0,1,0)