我已经从this教程中了解了如何在OpenGL中使用UBO,其中建议将投影和相机位置矩阵存储在单个UBO中,在着色器之间共享,如下所示: / p>
layout(std140) uniform global_transforms
{
mat4 camera_orientation;
mat4 camera_projection;
};
但在我看来,更有意义的是在UBO中存储相机投影*位置矩阵乘法的乘积,这样每次调用时矩阵乘法不必发生一次到顶点缓冲区。您将在每一步向缓冲区发送相同数量的数据,但在GPU上只交换一个矩阵乘法,只需在CPU上进行一次。
我的问题:我是否正确地认为这甚至会更加高效一点?也许着色器编译器足够聪明,每次绘制只执行一次制服操作?
(我只是用几千个多边形来测试它,但这是我第一次使用可编程管道而且我还没有完成UBO的工作:P)