GLSL: Почему массив const int намного медленнее, чем обычный массив?

У меня есть шейдер OpenGL, написанный на glsl. У меня есть глобально определенный массив в верхней части заголовка, вот так:

const int permutations[256] = int[256](
    64 ,  34 ,  36 , 137 , 120 , 122 , 246 ,  46 ,  79 ,  10 ,  37 , 181,
    ...
    );

Когда я запускаю программу, она работает очень медленно, то есть у меня всего 1 кадр в секунду, при отображении простого чайника с помощью шейдера.

Однако, как только я убираю "const" из приведенного выше объявления, все работает нормально, и я возвращаюсь к интерактивной частоте кадров.

Итак, "проблема" фактически уже решена... но мне интересно, почему это может быть так? Очень нелогично, поскольку, по моему опыту, использование констант обычно делает программы быстрее.


Обновление

Я действительно попытался использовать Uniform first вместо массива const int, с точно таким же кодом везде. Однако в этом случае компиляция шейдера завершилась с ошибкой:

Internal error: assembly compile error for fragment shader at offset
34609:
-- error message -- line 651, column 22:  error: invalid local parameter number
13
задан Jan Rüegg 1 December 2011 в 14:52
поделиться