コードは次のとおりです。
頂点シェーダー:
#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);
...
問題は、位置 7 の頂点属性だけで構成される配列と等しくなるように設定すると、passFIndex が適切に設定されないことです。問題は、常に 0 に設定されることです。ただし、FIndex の基礎となる頂点データはわかっています。別のシェーダー プログラム (GS のないプログラム) を使用でき、FIndex は適切に変化するため、0 ではありません。
「passFIndex = int [ ] (FIndex)」を「passFIndex = int [ ] (2)」またはその他の定数に置き換えることができます。これは、ゼロ以外の配列を作成するために機能し、期待どおりにインデックスを付けますジオメトリ シェーダー。これは、頂点シェーダーで何か問題が発生していることを示しているようですが、それが何であるか想像できません。