【问题标题】:Error in for-loop due to non-constant expression initialization由于非常量表达式初始化导致的 for 循环错误
【发布时间】:2018-12-29 03:14:53
【问题描述】:

我正在尝试在GLSL中实现插入排序,但是编译shader时for循环出现错误:

three.min.js:592 THREE.WebGLShader: gl.getShaderInfoLog() ERROR: 0:254: 'j' : Loop index cannot be initialized with non-constant expression

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;
        }
    }
}

知道如何解决这个问题吗?

【问题讨论】:

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


    【解决方案1】:

    使用冒泡排序而不是在 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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      相关资源
      最近更新 更多