Вот код:
Вершинный шейдер:
#version 330
layout(std140) uniform;
layout(location = 6) in vec4 worldPosition;
layout(location = 7) in int FIndex;
flat out int[] passFIndex;
uniform Projection
{
mat4 view;
mat4 projection;
};
uniform mat3[6] FMatrix;
void main()
{
gl_Position = worldPosition;
passFIndex = int[](FIndex);
}
геометрический шейдер:
#version 330
layout(std140) uniform;
layout(points) in;
layout(triangle_strip, max_vertices = 136) out;
flat in int[] passFIndex;
uniform Projection
{
mat4 view;
mat4 projection;
};
uniform mat3[6] FMatrix;
void main()
{
vec3 newPos = FMatrix[passFIndex[0]] * vec3(-0.5f, -0.5f, 0.5f);
...
Итак, проблема в том, что passFIndex не устанавливается должным образом, когда я устанавливаю его равным массиву, состоящему только из атрибута вершины в местоположении 7. Проблема в том, что он всегда установлен в 0. Однако я ЗНАЮ базовые данные вершины для FIndex не равно 0, потому что я могу использовать другую шейдерную программу (без GS), и FIndex меняется соответствующим образом.
Я могу заменить «passFIndex = int [] (FIndex)» на «passFIndex = int [] (2)» или какую-то другую константу там, и это работает для создания массива с ненулевым значением, и он индексируется, как и ожидалось, в шейдер геометрии. Кажется, это говорит мне, что что-то не так в вершинном шейдере, но я не могу представить, что это такое.