2017-10-09 14 views
2

저는 한 달 정도 OpenGL을 배웠고, 기하학 쉐이더로 게임을 시작했습니다. 원래는 더 복잡한 셰이더를 작성 했으므로 작동하지 않았습니다. 그래서 모든 것이 단순한 패스 스루 쉐이더로 제거되었습니다. 여전히 작동하지 않습니다.GLSL 패스 스루 기하학 쉐이더

버텍스 쉐이더 :

#version 420 core 

layout (location = 0) in vec3 position; 

uniform mat4 transform; 

void main() 
{ 
    gl_Position = transform * vec4(position, 1); 
} 

지오메트리 쉐이더 :

#version 420 core 

layout (triangles) in; 
layout (triangle_strip) out; 

void main() 
{ 
    int i; 
    for(i = 0; i < gl_in.length(); i++) 
    { 
     gl_Position = gl_in[i].gl_Position; 

     EmitVertex(); 
    } 

    EndPrimitive(); 
} 

조각 쉐이더 :

#version 420 core 

layout (binding = 0) uniform sampler2D diffuse; 

layout(location = 0) out vec4 color; 

void main() 
{ 
    color = vec4(1, 1, 1, 1); 
} 

그것은 윈도우의 오른쪽 하단에 흰색 사각형을 그리고 한다 지오메트리 셰이더가 없다면, 그것은 무엇입니까? uld는 기대한다. Geometry Shader를 사용하면 아무것도 렌더되지 않습니다. 정보 로그는 모든 것이 컴파일되고 잘 링크되어 있음을 보여줍니다.

무엇이 누락 되었습니까?

+2

은 명백한 오류를 볼 수 없지만 셰이더 컴파일 및 링크 오류를 확인 했습니까? – Rabbid76

+0

그래, 각 컴파일 후에 링크를 확인했다. 오류 없음. –

+0

'layout (triangle_strip, max_vertices = 3)을 시도해라. ' – Rabbid76

답변

0

출력에 대해 max_vertices 선언이 있어야합니다. 이 숫자는 컴파일 타임 상수 여야하며 GS의 단일 호출로 작성되는 최대 정점 수를 정의합니다. 구현 정의 한계 인 MAX_GEOMETRY_OUTPUT_VERTICES

+0

그래, 그 속임수를했다. 왜 그 오류가 컴파일/링크 infologs에 나타나지 않습니까? –

+0

제공되지 않을 경우 기본값이 있어야합니다. 그것의 이상한하지만 당신이 쉐이더를 컴파일하는 코드를 공유 할 수있는 몇 가지 오류를 던져야한다고 생각합니까? –