这是代码:
顶点着色器:
#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)”或其中的一些其他常量,这样可以创建一个非零的数组,并且它的索引符合预期几何着色器。这似乎告诉我顶点着色器出了点问题,但我无法想象它是什么。