为什么人们倾向于混合已弃用的固定功能管道功能,如矩阵堆栈、gluPerspective()、glMatrixMode(),以及当这意味着手动完成并作为统一推送到 GLSL 中时,为什么不这样做。
这种方法有什么好处吗?
为什么人们倾向于混合已弃用的固定功能管道功能,如矩阵堆栈、gluPerspective()、glMatrixMode(),以及当这意味着手动完成并作为统一推送到 GLSL 中时,为什么不这样做。
这种方法有什么好处吗?
就用户的理智而言,这样做是有正当理由的。固定功能矩阵(以及 GLSL 中跟踪的其他固定功能状态)是全局状态,在所有 Uniform 之间共享。如果要更改每个着色器中的投影矩阵,只需在一个地方更改即可。
在没有固定功能的 GLSL 中执行此操作需要使用统一缓冲区。要么,要么您必须构建一些系统,将状态信息发送到您要使用的每个着色器。后者是完全可行的,但很麻烦。前者比较新,2009年才推出,需要DX10级硬件。
仅使用固定功能和 GLSL 状态跟踪要简单得多。
据我所知,没有任何好处(除非您认为不必重新编码功能是一种好处)。
很可能只是懒惰,或者对替代方法缺乏了解。
本质上是因为这些应用程序需要着色器才能运行,但程序员太懒惰/压力太大,无法重新实现那些使用 OpenGL 兼容性配置文件已经可用的功能。
“难以”替换的显着特征是线条宽度(大于 1)、线条点画和单独的前后多边形模式。
大多数教程都教授过时的 OpenGL,所以也许人们不知道更好。
好处是您使用的是众所周知的、经过全面测试且可靠的代码。如果它用于 MS Windows 或 Linux 专有驱动程序,由构建您的 GPU 的人编写,因此可以假定知道如何使其真正快速。
小组项目的另一个好处是只有一种方法可以做到。关于您是否应该编写自己的 C++ 矩阵类、应该调用什么、要重载哪些运算符以及内部实现应该是 1D 还是 2D 数组,没有任何争论...