我有一个片段着色器,它使用作为一个统一的int变量传入的传递次数进行for循环。
uniform int numPasses;
void main(void) {
for (int i=0; i<numPasses; i=i+1) {
//do something
}
}
我看到随着循环次数的增加,性能急剧下降。那么这是在片段着色器中执行循环计算的正确方法,还是应该只使用两个帧缓冲附件之间的乒乓来执行CPU上的循环?
我正在尝试乒乓球,但我只是想知道可能早些时候遇到这种情况的人的观点。
答案 0 :(得分:0)
鉴于您不需要来自相邻线程的数据,看起来更快不打扰多个渲染过程并避免绘制调用,同步和光栅化。
也就是说,如果你的循环很大,总计算量会有很大的变化,或者你没有足够的片段着色器来保持GPU的繁忙,这可能会影响性能。
GPU非常复杂,很容易出错。正如你已经做的那样,测试两者可能是最好的。当你改变传球和碎片的数量时,看到差异会很有趣。