只执行一次GLSL函数



是否有一种方法可以在GLSL上只执行一次布尔检查?还是我错过了什么重要的东西?下面的代码似乎没有帮助。

bool once = false;
DoOnce()
{
    for (int i = 0; i < someConst; i++)
    {
        //do some things...
    }
    once = true;
}
void main()
{
    if ( !once )
    {
       DoOnce();
    }
    //do other things         
}

或者我必须使用计算着色器来处理这种行为?

看起来你想要生成一些可以稍后由着色器调用使用的数据,而这不是你怎么做的。@Nicol当然是对的,那个函数将被每次调用,这将是一次对每个顶点顶点着色器等等。理论上,你可以使用转换反馈缓冲区来存储done值,但这肯定不是一个好的解决方案。

如果您想编写生成这种缓存的GLSL代码,请将该代码分成两部分:缓存生成和缓存使用。首先,将缓存生成运行到一些缓冲区中(它们的类型取决于您正在生成的数据;这些可以是纹理,vbo或不同的东西),然后在实际的绘图代码中绑定和使用这些缓冲区。

如果你指定缓存内容,我可能能够帮助你更多的设置,但由于变化相当多(纹理/VBO结构,然后通过顶点属性绑定,也许与实例除数或适当的纹理采样器),这将只是一个盲目的猜测现在。

相关内容

  • 没有找到相关文章

最新更新