필자는 매우 간단한 통과 스 캐도 쉐이더 셰이더를 작성했습니다. 내 입력 프리미티브는 포인트이고 출력 프리미티브는 또한 포인트입니다. 또한 버텍스 쉐이더에서 기하학 셰이더를 통해 프래그먼트 쉐이더로 색상과 법선을 전달하고자합니다. 셰이더는 컴파일되고 완벽하게 연결되지만 최종 색상은 매우 이상합니다. 이 포워딩에 문제가 있다고 생각합니다. 누구든지 문제를 지적 할 수 있습니까? 여기 내 쉐이더는 다음과 같습니다일반 및 색상이있는 간단한 통과 형상 쉐이더
버텍스 쉐이더 :
#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;
}
셰이더 단계 사이에 구조체를 전달하는 것을 중지합니다. 예, 표준에 따라 기술적으로 허용됩니다. 그러나 아무도 그것을 사용하지 않으므로 IHV는 잘 테스트하지 않습니다. 입력 및 출력 그룹화가 필요한 경우 [인터페이스 블록 사용] (http://www.opengl.org/wiki/Interface_Block_%28GLSL%29). –
답변 해 주셔서 감사합니다. 나는 그것을 따라야한다! fData의 –