MacBook Pro의 기하학 쉐이더를 사용하여 Intel HD 4000 그래픽에서 Maverick을 실행하고 있습니다. EndPrimitive()
전화에서 이상한 행동을 감지합니다. 여기 내 지오메트리 쉐이더는 다음과 같습니다GLSL EndPrimitive()가 삼각형 스트립을 끊습니다.
#version 150 core
layout(points) in;
layout(triangle_strip, max_vertices = 512) out;
void main() {
vec4 start_pos = gl_in[0].gl_Position + vec4(-0.5, -0.5, 0.0, 0.0);
vec4 bottom_vertex = start_pos;
for (int i = 0; i < 17; ++i) {
bottom_vertex = start_pos + vec4(float(i) * float(1.0/16.0), 0.0, 0.0, 0.0);
gl_Position = bottom_vertex;
EmitVertex();
gl_Position = bottom_vertex + vec4(0.0, 1.0/16.0, 0.0, 0.0);
EmitVertex();
}
//EndPrimitive();
}
이 프로그램은 glfw
를 사용하고는 OpenGL 3.2의 핵심 컨텍스트를 요청합니다. [0, 0]
에 하나의 정점 만 그립니다. 목표는 궁극적으로 내 기하학 셰이더 출력에 여러 개의 삼각형 스트립으로 구성된 정사각형 격자를 출력하는 것입니다. 셰이더는있는 그대로 그리드의 단일 행을 출력합니다. 다음은 결과입니다 : 내가 프리미티브 현재 삼각형 스트립을 종료하고 다음 행을위한 새로운 하나를 시작하려는 시점에서
. 그러나 단순히 결과까지 나사 위의 쉐이더에서 EndPrimitive()
전화의 주석 :
내가 뭔가에 대한 EndPrimitive()
를 오해하고 있는가? 내 이해는 현재 삼각형 스트립을 끝내고 새로운 삼각형 스트립을 시작해야한다는 것입니다. 루프 이후에 아무 것도하지 않기 때문에 쉐이더의 결과는 EndPrimitive()
과 같거나 같아야합니다.
또한 지금 다른 구현에서 테스트 할 수 없습니다. 내 것이 버그 일 수 있습니까? 이 문제를 정확히 파악할 수있는 방법이 있습니까?