如何存储OpenGL程序对象的每个上下文的制服而不是每个程序?

时间:2013-11-16 15:30:24

标签: multithreading macos opengl graphics core-graphics

我正在研究多线程OpenGL合成引擎。我有一组着色器,我在多个上下文中共享。出于性能原因,我想避免为每个线程编译每个着色器程序的单独实例。

但是,如果多个线程碰巧使用相同的程序对象,并且我尝试在每个线程上设置不同的制服,则统一值会混淆,因为统一值与共享程序对象一起存储。

到目前为止,我看到了我的选择:

  1. 为每个线程编译一个单独的程序对象(浪费时间和资源),或
  2. 对于每个共享程序对象,序列化设置制服和渲染的过程(这在很大程度上抵消了多线程的好处)
  3. 还是有更好的方法吗? (即,有没有办法存储OpenGL程序对象的每个上下文的制服而不是每个程序?)

    编辑:我需要通过Mac OS 10.6支持用户几个月,所以在那之前我一直坚持使用OpenGL 2.1以及Mac OS 10.6上可用的任何扩展。如果我理解正确的话,Mac OS 10.8中会出现ARB_separate_shader_objects

0 个答案:

没有答案