我有一个使用GLSL编写的OpenGL着色器。在头部顶部,我有一个全局定义的数组:
const int permutations[256] = int[256](
64 , 34 , 36 , 137 , 120 , 122 , 246 , 46 , 79 , 10 , 37 , 181,
...
);
当我启动程序时,使用着色器显示一个简单的茶壶时,它非常缓慢,即我每秒只有1帧。
然而,一旦我从以上声明中删除“const”,一切都正常了,我又可以交互式地控制帧率了。
所以,“问题”实际上已经解决了...但是我想知道,为什么会出现这种情况?这非常反直觉,在我的经验中,使用const通常可以使程序更快。
更新
我实际上尝试先使用Uniform而不是const int数组,在其他地方完全相同的代码。但是,在这种情况下,编译着色器会崩溃:
Internal error: assembly compile error for fragment shader at offset
34609:
-- error message -- line 651, column 22: error: invalid local parameter number