아마 알고 있겠지만, 이것은 OpenGL 4.3에서 소개 된 상당히 새로운 기능입니다. 사양을 읽는 방식에 따라 속성과 버퍼 간의 매핑이 간접적 인 수준을 갖습니다.
- 각 속성에는 사용하는 바인딩 인덱스를 지정하는 속성이 있습니다.
- 버퍼는 바인딩 인덱스에 바인딩됩니다.
두 테이블, 하나는 인덱스 이름을 버퍼 인덱스를 바인딩에서 다른 하나를 바인딩 속성 인덱스에서 매핑을 정의로이 볼 수 있습니다. 이 두 표는 모두 VAO 상태의 일부입니다.
나는 이것이 완전히 독립적으로, 그리고 어떤 순서로든 지정 될 수 있다고 생각한다. glVertexAttribBinding()
은 속성 색인과 바인딩 색인 사이에 첫 번째 연관을 설정합니다. glBindVertexBuffer()
은 바인딩 인덱스와 버퍼 이름 간의 연결을 설정합니다.
이 이해는 상태 표에서 사양으로 확인됩니다. GL의 4.4 스펙 표 23.4, 자막 "버텍스 어레이 오브젝트 상태", 목록 : glGetVertexAttribiv()
으로 조회 할 수 있습니다
VERTEX_ATTRIB_BINDING
는, 지정된 속성 지수의 결합 인덱스의 값입니다.
VERTEX_BINDING_BUFFER
은 glGetIntegeri_v()
으로 쿼리 할 수 있으며 지정된 바인딩 인덱스의 버퍼 이름 값입니다.
는이를 바탕으로 특정 질문에 주소 : VBO 이름은 그 인덱스에 바인딩 또한
만들어
은 (glBindVertexBuffer
를 통해) 단지 VBO 지수 VAOs 트랙을, 또는?
두 가지를 모두 추적합니다.
나는 인덱스 0 직전 무승부 호출에 다른 VBO를 결합하고 그 VBO의 내용을 사용하게
예, 인덱스 0 바인딩에 다른 VBO를 결합하는 경우, 모든 수 바인딩 색인 0의 속성은 해당 VBO의 내용을 사용합니다.
나는 VAO 트랙 만있는 경우 필요는 없습니다 glBindVertexBuffer
에 전화로 glVertexAttribFormat
및 glVertexAttribBinding
에 대한 호출을 앞에 찾을 수 많은 예제
VAO이 모든 설정 상태를 추적와 indices 따라서 VAO를 설정하는 과정에서이 모든 것을 사용하는 것이 합리적입니다. VAO에서 전체 버텍스 셋업 상태를 추적하는 것이 우선 VAO를 갖는 주요 목적입니다. 초기화하는 동안 한 번 상태를 설정할 수있게하고 전체 상태를 다시 설정하기 위해 draw를 호출하기 전에 glBindVertexArray()
에 한 번만 호출하면됩니다.
귀하의 질문은 OpenGL 4.3 이상에서만 사용 가능한 기능에 관한 것입니다. OpenGL 4.1 만 지원하는 구성에서 어떻게 테스트 했습니까? –
맞습니다. 4시에 시험하지 않았습니다.3+ 그리고 정점 버퍼를 0이 아닌 인덱스에 바인딩 할 수는 없습니다. 그러나 VAO가 4.1에서 VBO 이름을 추적하지 않으면 4.3+에서도 VAO를 추적하지 않을 것이라고 가정합니다. 그러나 그것이 내 시스템에 대한 사양을 포함하는 이유입니다. YMMV. – jorgander