Если вам нужно так поступить, то лучше всего использовать простой индекс массива:
in uint axisIndex;
const vec3[4] table = {
vec3(0, 0 ,0),
vec3(1, 0, 0),
vec3(0, 1, 0),
vec3(0, 0, 1)
};
Тогда просто используйте table[axisIndex]
, чтобы получить значение. Вы можете предоставить целочисленные значения шейдеру, используя glVertexAttribIPointer
. Хотя вы можете использовать неподписанный байт для типа, который вы предоставляете, лучше просто перейти к неподписанному int; Реализациям OpenGL не нравятся атрибуты вершин, которые не выровнены по 4 байта.
Как говорится, это действительно не нужно. Вы можете просто передать 3 нормализованных, подписанных байтов в качестве атрибута, а не один индекс. Это не займет больше места в ваших данных вершин (поскольку опять же реализации не любят смещенные атрибуты) и, вероятно, не будет медленнее обрабатывать.