多个着色器实例

joh*_*ers 1 opengl glsl opengl-es-2.0

我最近读到你可以

"有多个OpenGL着色器实例"

但没有提供其他细节.

我想澄清一下这究竟是什么意思.

首先,我知道你可以运行多个glProgram,并且可以在它们之间切换.这是指所有这些吗?我假设每帧在几个创建的着色器程序之间切换基本上意味着我"同时"使用几个程序.

或者它是否以某种方式引用具有相同着色器程序的多个"实例" ?那对我来说毫无意义.

在这里可以享受一些基本的澄清!

dat*_*olf 6

创建程序对象时,您将几个着色器链接在一起.通常至少有一个顶点和一个片段着色器.现在说你要渲染,说一些物体周围有些发光.该发光将由不同的片段着色器创建,但顶点着色器将与常规外观相同.现在为了节省资源,您可以在多个程序中使用相同的顶点着色器,但链接的是不同的片段着色器.当然,您也可以使用相同的片段着色器和不同的顶点着色器.

简而言之,您可以将单个着色器链接到任意数量的程序.只要链接的着色器阶段彼此兼容,这就有助于模块化.

  • @SebbyJohanns这最终是使用不同着色器渲染对象的唯一方法,所以这是正常的.但是*Michael*是正确的,你通常会尝试使用某种基于渲染状态的排序来减少程序开关(和其他开关,如纹理绑定).另一种选择是单个着色器程序,它可以在多种模式下运行,基于制服的值(您仍然会尝试不为每个对象更改).但是如果特定模式太不同并且自带着色器程序本身运行时间增加的成本,这将无法工作. (3认同)
  • 它会影响性能.你应该尽可能地减少程序切换.通常它是通过材料分类在图形引擎中完成的. (2认同)