Quick Syntax
// GL 3.3 Core: vao의 정점 버퍼에 정점 4개, 링크된 프로그램이 준비되어 있습니다.
const unsigned short indices[] = {0, 1, 2, 2, 3, 0};
GLuint ebo = 0;
glGenBuffers(1, &ebo);
glBindVertexArray(vao);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, nullptr);
// 마지막 사용 뒤 정리합니다.
glDeleteBuffers(1, &ebo);인덱스 draw의 count는 인덱스 개수, type은 인덱스 한 항목의 저장 타입, 마지막 인수는 EBO 안의 바이트 오프셋입니다. 정점 개수·삼각형 개수·바이트 수와 구분합니다.
연결 규칙
| mode | 구성 | 고를 때 확인할 점 |
|---|---|---|
GL_POINTS | 정점마다 점 | point size와 구현 제한 |
GL_LINES | 두 정점씩 독립 선 | 홀수 마지막 정점은 선을 못 만듦 |
GL_LINE_STRIP/LOOP | 연결 선, LOOP는 끝을 닫음 | 독립 선 목록과 인덱스 순서가 다름 |
GL_TRIANGLES | 세 정점씩 독립 삼각형 | 같은 위치라도 UV·법선이 다르면 분리 정점 필요 |
GL_TRIANGLE_STRIP/FAN | 앞 정점을 재사용하는 연결 | strip의 winding 처리와 연결 끊기 |
| adjacency 계열 | 인접 정점을 함께 제공 | 3.2 이상, geometry shader 입력과 일치 |
GL_PATCHES | tessellation 입력 | 4.0 이상, patch 크기와 단계 구성 필요 |
DrawArrays(mode, first, count)는 연속한 정점 번호를 읽습니다. DrawElements는 EBO 값으로 정점을 선택합니다. 같은 정점 번호는 위치뿐 아니라 모든 활성 속성의 조합을 가리킵니다. 위치는 같아도 텍스처 경계에서 UV가 달라지면 하나의 인덱스로 합칠 수 없습니다.
오프셋과 범위
인덱스 타입은 GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT입니다. 예를 들어 unsigned short 인덱스 세 개를 건너뛰는 바이트 오프셋은 3 * sizeof(unsigned short)입니다. 정점 버퍼가 큰 것과 인덱스 값이 타입에 들어가는 것은 별개의 조건입니다.
Core에서는 EBO가 연결된 VAO를 사용합니다. 클라이언트 메모리 인덱스 포인터를 쓰는 구형 예제를 그대로 넣지 않습니다. 인덱스가 정점 범위를 넘지 않도록 데이터 생성 단계에서 보장합니다. GL 오류 조회가 모든 범위 초과를 안전하게 잡아 준다고 가정하지 않습니다.
Restart와 Base Vertex
3.1의 primitive restart는 지정한 인덱스 값을 연결 끊기 표식으로 사용합니다. 기본적으로 비활성이고, 활성화·표식 설정을 함께 합니다. 표식에 해당하는 값은 실제 정점을 그리지 않으므로 유효 인덱스와 충돌하지 않게 고릅니다. 4.3의 fixed-index restart는 인덱스 타입의 최대값을 사용하며 별도 기능입니다.
3.2의 glDrawElementsBaseVertex는 읽은 인덱스에 정점 기준값을 더합니다. EBO 시작의 바이트 오프셋과 base vertex를 혼동하지 않습니다. 하나는 어디서 인덱스를 읽는지, 다른 하나는 어느 정점을 가리키는지 바꿉니다. restart 표식 비교는 base vertex를 더하기 전에 수행하므로 표식 값을 base vertex만큼 옮기지 않습니다.
구형 프리미티브 이관
1.0의 QUADS·POLYGON은 현대 Core에서 사용할 수 없습니다. 삼각형 목록으로 바꾸되 오목 다각형을 무조건 fan으로 바꾸면 올바르게 채워지지 않을 수 있습니다. 삼각분할, 정점 순서, 속성 경계를 함께 확인합니다. 컬링 증상은 면 방향과 래스터 상태와 연결됩니다.
참고 링크
4 sources