Вам нужно объявить UnpackValues
до того, как вы его называете.GLSL похож на C и C ++;имена должны иметь декларацию, прежде чем их можно будет использовать.
КСТАТИ: То, что вы пытаетесь сделать , не будет работать .Поплавки - это поплавки;если вы не работаете с GLSL 4.00 (и поскольку вы продолжаете использовать старые термины, такие как «варьирование», я думаю, нет), вы не можете извлечь биты из числа с плавающей точкой.Действительно, оператор сдвига вправо определен только для целых чисел;попытка использовать его в плавающих файлах не удастся с ошибкой компилятора.
GLSL не C или C ++ (по иронии судьбы).
Если вы хотите упаковать ваши данные, используйте OpenGL, чтобы упаковать их для вас,Отправьте два атрибута vec4, которые содержат нормализованные байты без знака:
glVertexAttribPointer(X, 4, GL_UNSIGNED_BYTE, GL_TRUE, 8, *);
glVertexAttribPointer(Y, 4, GL_UNSIGNED_BYTE, GL_TRUE, 8, * + 4);
Ваш вершинный шейдер будет принимать два значения vec4
в качестве входных данных.Поскольку вы не используете glVertexAttrib I Pointer, OpenGL знает, что вы передаете значения, которые должны интерпретироваться как числа с плавающей запятой.