我正在开发一个OpenGL 4.3应用程序,它使用统一缓冲区来处理很多事情,主要是多次绘制(所有矩阵和材料数据都打包到两个UBO中,每帧只进行一次绘制调用)。
除了着色器需要很长时间才能链接(最多<{>> glLinkProgram
)之外,这种方法效果很好。
我注意到链接时间取决于着色器中使用的UBO的大小。通过将所有缓冲区限制为几百个字节,我获得了更好的性能。 (我通常只在我的实现中分配最大大小为64kB)
虽然nVidia驱动程序着色器缓存在限制此功能方面做得很好(同样可以使用着色器二进制文件完成),但是在制作经常生成新着色器的编辑器时尤其令人讨厌。
我真的想知道除了使用更小的UBO之外还有其他工作吗? 而驱动程序需要花费很多时间。