我写了一个blur的shader,里面用到了for循环,结果告诉我说
Loop index cannot be initialized with non-constant expression
必须使用常量,但for的值是uniform的,不可能是常量
然后又打算试试while,但是发现while和do while都不可用,报错说
This type of loop is not allowed
想问下是我哪里使用的有问题吗
我写了一个blur的shader,里面用到了for循环,结果告诉我说
Loop index cannot be initialized with non-constant expression
必须使用常量,但for的值是uniform的,不可能是常量
然后又打算试试while,但是发现while和do while都不可用,报错说
This type of loop is not allowed
想问下是我哪里使用的有问题吗
楼主,我这也碰到这个问题了,你后面有找到解决方案吗?
试试递归函数 看看能不能绕过去
嗐!循环次数必须是常量…
兄嘚 英语可以塞
用for 性能低
兄嘚,楼上都说 了,for循环会被展开。相当于 代码复制了好几遍
3.8.4 会报错:ERROR: 0:667: ‘for’ : Invalid init declaration
嗯,虽然这个帖子过去了很久,但是有个很取巧的办法绕过这个问题,值得回复一下:
// 这样会报错
for (int i = 1; i < halfSampleCount; i++) { // halfSampleCount 是 uniform 参数,不是常量
// ...
}
// 改为在循环内部判断就不会报错了:
for (int i = 1; i < 100; i++) { // 循环上限写死为 100
if (i > halfSampleCount) break; // 实际由 sampleCount 控制循环上限
// ...
}