非常に単純なパススルージオメトリシェーダーを作成しました。私の入力プリミティブはポイントであり、出力プリミティブもポイントです。また、カラーと法線を頂点シェーダーからジオメトリシェーダーを介してフラグメントシェーダーに転送したいと思います。シェーダーは完璧にコンパイルおよびリンクされていますが、最終的な色は非常に奇妙です。この転送には何か問題があると思います。誰かが問題を指摘できますか?これが私のシェーダーです:
バーテックスシェーダー:
#version 330 compatibility
struct vData
{
vec3 normal;
vec4 color;
};
out vData vertex;
void main()
{
vertex.normal = gl_NormalMatrix * gl_Normal;
vertex.color = gl_Color;
gl_Position = ftransform();
}
ジオメトリシェーダー:
#version 330
layout (points) in;
layout (points) out;
layout (max_vertices = 1) out;
struct vData
{
vec3 normal;
vec4 color;
};
in vData vertices[];
out vData frag;
void main()
{
int i;
for(i = 0;i < gl_in.length();i++)
{
frag.normal = vertices[i].normal;
frag.color = vertices[i].color;
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
}
フラグメントシェーダー:
#version 330
struct vData
{
vec3 normal;
vec4 color;
};
in vData frag;
void main()
{
gl_FragColor = frag.color;
}