【发布时间】:2014-02-03 06:32:11
【问题描述】:
代码如下:
顶点着色器:
#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)”或其中的一些其他常量,这样可以创建一个非零的数组,并且它索引正如几何着色器中所预期的那样。这似乎告诉我顶点着色器出了点问题,但我无法想象它是什么。
【问题讨论】:
标签: opengl graphics glsl vertex-shader geometry-shader