渲染时处理多个过程

时间:2012-05-15 09:01:11

标签: opengl glsl

我想使用仅使用glsl的可编程管道(没有固定管道)来渲染卷(VERSION combined with programmable pipeline and fixed pipeline)。为了实现这一点,我需要多遍渲染器,这意味着按顺序渲染具有不同着色器的不同场景。 我想到了three methods

  1. 使用一个着色器程序并分离着色器 - >附加着色器 - >每当渲染新场景时重新编译程序。
  2. 每次使用一个着色器程序,然后退出多个着色器程序。
  3. 使用glsl中的子程序在渲染不同的传递时选择不同的子程序。
  4. 我想知道何时应该使用第一种方法? 2ed方法?等有经验的开发人员可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

许多问题可以在没有多次通过的情况下解决。只是尝试在没有它们的情况下制作技术。 如果没有其他工作可以使用方法3。

我对此的看法:

  • 方法1非常慢且无法使用。
  • 方法2是很多工作但是如果 做得好,这是“快”。
  • 方法3简单而优雅,但有一个 额外的处理开销。您可以多次渲染对象并将当前的传递号传递给着色器。

方法3的示例:

uniform int currentPass;

/* OTHER UNIFORMS */

void main()
{
    if(currentPass == 1)
    {
         /* DO SOMETHING */
    }
    else if(currentPass == 2)
    {
         /* DO SOMETHING */
    }
    else if(...) { ... }
}

在我看来,最好的方法是只使用很少的着色器(可能是一个材质着色器,一个后处理着色器等),所以你的方法3几乎是完美的。

有没有想过超级明星?他们是“喜欢”你的方法3.谷歌它:) 我还推荐这个question

Also be careful, the if-statements may weaken your performance very much.