Pat*_*ski 36 c++ opengl shader glsl
哪个更好 ?
到具有一个着色器程序有很多制服指定灯使用,或映射做(例如,我需要一个网格被视差映射,并且映射另一个视差/镜面).我会制作一个缓存转移制服的缓存列表,如果需要的话,只需为每个下一个网格更换一些制服.
要 为每个需要的案例设置很多着色器程序,每个案例都有少量制服,如果需要的话,每个网格都使用glUseProgram进行惰性绑定.在这里,我假设网格已正确批处理,以避免冗余切换.
Axe*_*ing 28
我所知道的大多数现代引擎都有一个"着色器缓存"并使用第二种选择,因为它显然更快.
您还可以查看允许动态链接的ARB_shader_subroutine.但我认为它只适用于DX11级硬件.
Chr*_*odd 15
通常,除非您拥有真正庞大的程序,否则选项2将更快/更好.您还可以使用跨程序共享的缓冲区对象,以便在更改程序时无需重置任何值.
此外,链接程序后,您可以释放链接到程序中的所有着色器.这将释放所有源代码和驱动程序保留的任何预链接信息,只留下内存中的完全链接程序.
归档时间:
14 年,11 月 前
查看次数:
4706 次
最近记录:
9 年,4 月 前