GLSL:由于非常量表达式初始化,For循环中出现错误

时间:2018-07-20 18:54:38

标签: three.js glsl webgl shader fragment-shader

我正在尝试在glsl中实现插入排序,但是在编译着色器时, FOR循环中存在错误 three.min.js:592 THREE.WebGLShader:gl.getShaderInfoLog()错误:0:254:'j':循环索引无法使用非恒定表达式初始化

      for (int i = 0; i < n - 1; i++)
      {

        for ( int j = i+1; j > 0; j--)
        {
                if (angle[j - 1] > angle[j])
                {
                    float temp = angle[j - 1];
                    angle[j - 1] = angle[j];
                    angle[j] = temp;
                }
        }
        }

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

使用冒泡排序代替插入排序,后者在for循环中不包含非常数表达式。代码写在下面。

       float temp = 0.0;

                    for (int write = 0; write < n; write++)
                    {
                        for (int sort = 0; sort < n - 1; sort++)
                        {
                            if (angle[sort] > angle[sort + 1])
                            {
                                temp = angle[sort + 1];
                                angle[sort + 1] = angle[sort];
                                angle[sort] = temp;
                            }
                        }

                    }