У меня есть шейдер OpenGL, написанный в glsl. У меня есть глобально определенный массив в верхней части заголовка, например:
const int permutations[256] = int[256](
64 , 34 , 36 , 137 , 120 , 122 , 246 , 46 , 79 , 10 , 37 , 181,
...
);
Когда я запускаю программу, она чрезвычайно медленная, то есть я имею только 1 кадр в секунду при отображении простого чайника с использованием шейдера.
Однако, как только я удаляю "const" из вышеуказанного объявления, все работает нормально, и я возвращаюсь к интерактивным частотам кадров.
Итак, "проблема" на самом деле уже решена... но мне было интересно, почему это может быть так? Очень противоречиво, как и в моем опыте, использование consts обычно делает программы быстрее.
Update
Я на самом деле попытался использовать 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