opengl - GLSL Matrix 的意外行为

标签 opengl glsl

以下简单的片段着色器表现出非常奇怪的行为。如果没有循环,输出全是红色,如预期的那样。但随着循环它变成黄色,i。 e. RGB(1,1,0)。有人可以告诉我这里发生了什么吗?

void main(void)
{
    mat4 redUnit = mat4(
        1.0, 1.0, 1.0, 1.0,
        1.0, 1.0, 1.0, 1.0,
        1.0, 1.0, 1.0, 1.0,
        1.0, 1.0, 1.0, 1.0
    );
    mat4 greenUnit = mat4(
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
    );
    mat4 blueUnit = mat4(
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
    );

    for (int x = -1; x < 3; x++) {
        for (int y = -1; y < 3; y++) {
            redUnit[x+1][y+1] = 1.0;
            greenUnit[x+1][y+1] = 0.0;
            blueUnit[x+1][y+1] = 0.0;
        }
    }

    gl_FragColor = vec4(redUnit[0][0], greenUnit[0][0], blueUnit[0][0], 1.0);
}

编辑:输出颜色取决于声明变量的顺序。所以不知何故内存边界被侵犯了。但仍然没有解释这种行为。

最佳答案

如果其他人遇到此问题:这是英特尔 GMA 显卡驱动程序中的错误。在另一台具有不同显卡的机器上一切正常。

关于opengl - GLSL Matrix 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770497/

相关文章:

c++ - OpenGL 3.0 窗口碰撞检测

opengl - 具有深度立方体贴图的全向阴影贴图

c++ - 检查所有使用的 OpenGL 扩展

c++ - 在 OpenGL 中用于头部跟踪的倾斜平截头体/离轴投影

opengl - 在 OpenGL 中绘制对象 X 秒

geometry - 如何将着色器转换为 azimuthal_equidistant

c++ - OpenGL:gluUnProject 的结果不是预期的结果

c - OpenGL glUniform1f 不更新顶点着色器

optimization - 一个简单的着色器优化案例,如果我做对了?

opengl - GLSL 2D 圆角