你可以在同一个程序中有多个像素(片段)着色器吗?

问题描述:

我想有两个像素着色器;第一个做一件事,然后下一个做别的事。这是可能的,还是我必须将所有内容都打包到一个着色器中?你可以在同一个程序中有多个像素(片段)着色器吗?

你可以做这样做,例如通过从主入口点执行函数调用到各种着色器对象中实现的函数。

main() { 
    callToShaderObject1() 
    callToShaderObject2() 
} 

每个的那些callToShaderObject功能可以生活在不同的着色器对象,但是所有对象都具有附接和连接在同一程序中可使用之前。

+0

出于好奇心,你为什么要这么做,而不是简单地在片段着色器中使用所有函数呢?这是否可以让代码与其他着色器程序共享,而不必重复? – 2012-07-15 09:35:33

+0

@尼克:我没有看到它用过我自己。当我第一次阅读规范时,我很惊讶地从着色器对象中构建着色器程序 - 因此,为什么我知道你可以做到这一点。它是从标准的编译模型建立... – Bahbar 2012-07-15 18:39:29

+2

更新:我已经在使用中看到了这一点,现在,在研究改装成的Minecraft着色器。在这种情况下,它非常有用,因为每个着色器都有很多可以打开和关闭的选项,并且各种效果可以与其他各种效果结合使用。在这样的情况下,以及涉及多个作者的情况下,将功能分成单独的文件变得更有用。 – 2012-10-07 10:53:40

他们不能在同一时间运行,但您可以*使用不同的着色器不同的几何形状,或者多个渲染使用不同的着色器通过。

+1

所以就需要一个不同的程序?那么每个传球都有不同的计划?就像在一个程序中,我可以有一个顶点和片段着色器(这是一次传递?),然后在另一个程序上有顶点和片段着色器(第二遍?)?当我感觉喜欢它时,我可以只更改glUseProgram()吗?所以我本质上是渲染一个场景两次......? – Harry 2010-02-26 21:22:30

+1

没错。就像固定管道中的多遍渲染一样,但不是在传递之间更改OpenGL设置,而是加载不同的程序。 – 2010-03-01 14:20:59