我正在研究多线程OpenGL合成引擎。我有一组着色器,我在多个上下文中共享。出于性能原因,我想避免为每个线程编译每个着色器程序的单独实例。
但是,如果多个线程碰巧使用相同的程序对象,并且我尝试在每个线程上设置不同的制服,则统一值会混淆,因为统一值与共享程序对象一起存储。
到目前为止,我看到了我的选择:
还是有更好的方法吗? (即,有没有办法存储OpenGL程序对象的每个上下文的制服而不是每个程序?)
编辑:我需要通过Mac OS 10.6支持用户几个月,所以在那之前我一直坚持使用OpenGL 2.1以及Mac OS 10.6上可用的任何扩展。如果我理解正确的话,Mac OS 10.8中会出现ARB_separate_shader_objects
。