2014-03-03 2 views
1

필자는 크기가 128 인 나 같은 수십만 개의 경로 (예 : GL_LINE_STRIPs)를 생성하는 컴퓨팅 쉐이더를 사용하고 있습니다. 나는 그들을 모두 큰 SSBO에 보관할 것이며 그것들을 렌더링하고 싶습니다.OpenGL 렌더링 단일 VBO에서 많은 스트립

[x1 y1 x2 y2 ... x127 y127] //path 0 
[x1 y1 x2 y2 ... x127 y127] //path 1 
... 
[x1 y1 x2 y2 ... x127 y127] //path n 

이것을 렌더링하는 좋은 방법이 있습니까? 원래 원시적 인 재시작으로 생각하고 있었지만, multiDrawArrays 역시 작동 할 수 있습니까? 나는 드로 콜과 함께 수십만 개의 인덱스를 보내고 싶지 않습니다.

간접 렌더링을 위해 GPU에 다른 배열을 저장하는 것처럼 보일까요? 나는 "모든"m 'vertices "종류의 함수를 원시적으로 다시 시작하는 것과 같은 것이 있는지 궁금합니다.

답변

0

VBO가 아닌 SSBO에서 정점 데이터를 가져오고 각 경로의 정점 수가 같으므로 속성이없는 인스턴스 렌더링이 필요할 수 있습니다.

빈 VAO를 바인드하고 glDrawArraysInstanced(GL_LINE_STRIP, 0, 128, n) (여기서 n은 경로의 수)을 호출하십시오. 버텍스 쉐이더에서 gl_InstanceID * 128 + gl_VertexID을 계산하면 SSBO에서 현재 버텍스의 인덱스를 얻을 수 있습니다.