不使用增量运算符时GLSL / WebGL for循环错误

时间:2017-09-05 15:19:09

标签: for-loop three.js fragment glsl webgl

我正在尝试在片段着色器中执行for循环,并且收到以下错误。我真的很困惑,因为这个错误似乎完全无关紧要。

[.Offscreen-For-WebGL-0x7f841f04f600]GL ERROR :GL_INVALID_OPERATION : glDrawArrays: Source and destination textures of the draw are the same.

当我改变

时出现错误
for(float j = 0.0 ; j < particlesPerCell; j++){

for(float j = 0.0 ; j < particlesPerCell; j = j + 1.0){

这种疯狂有什么理由吗?它与j ++完全正常,而不是j = j + 1.0。这不是一个真正的问题,但它似乎很奇怪,并想知道是否有人可以解释这一点。我尝试在线查找,但没有找到任何答案。

3 个答案:

答案 0 :(得分:1)

我现在自己尝试过这个。在循环中使用i = i + 1.0时也会出错,但我收到了不同的错误:'=' : Invalid operator

我在GLSL文档中找不到关于循环表达式中不允许这样做的任何内容。

所以我猜这可能是平台依赖的。它可能是针对性能优化的循环表达式。但优化不会处理除i++i += 1之外的任何其他表达式。这可能是因为优化将循环展开到一个语句列表中,而这对于任何类型的循环表达式都是不可能的。

答案 1 :(得分:0)

错误消息表明您正在将着色器的输出写入缓冲区/纹理,您也在同一渲染中将其用作输入。

<div> <iframe aura:id="vfFrame" src="/partners/B2B_ReCaptcha" frameborder="0" width="100%" allowtransparency="true" /> </div> j++在for循环中应该有相同的结果,所以我的猜测是你的代码的其余部分有问题。真正的问题是为什么错误不会一直显示出来。

您需要在jsfiddle中复制错误,以便我们查看

答案 2 :(得分:0)

如果可能的话,尝试使用 int ,使用 const 进行总计。

const int particlesPerCell = 1000;
for(int j = 0; j < particlesPerCell; j++){
    …
}