Rendering API and structure(OpenGL 3.0)
- 개선점
- OpenGL 2.0에서는 VAO(Vertex Array Object)가 하나
- VAO를 통해 Vertex Attribute를 관리함
-
즉, 여러 개의 물체를 그릴 때에는 각 물체의 바인딩을 반복해주어야 한다
// 이 과정을 모든 물체마다 반복 glBindBuffer(positionVBO); glVertexAttribPointer(0,...); glBindBuffer(colorVBO); glVertexAttribPointer(1,...); glDrawArray();
- OpenGL 2.0에서는 VAO(Vertex Array Object)가 하나
→ 물체별로 바인딩 함수를 한 번만 호출할 순 없을까?
- 사용자가 VAO를 만들 수 있게 하여, 여러 개의 VAO를 두자
- 렌더링 루프에서 수행하는 바인딩의 횟수가 줄어듦
- 초기화 단계에서 각 물체마다 VAO를 만들어 속성을 미리 바인딩
- 이후 각 물체를 그릴 때마다 VAO만 바인딩하여 그리면 된다
-
코드 로직
초기화: 모든 물체에 수행 특정 물체를 위한 VAO 생성->저장->바인딩 한 번 그리는 데에 필요한 모든 버퍼(VBO)를 바인딩 VAO 바인딩 해제 렌더링 루프: 모든 물체에 수행 특정 물체 VAO 바인딩 glDrawArry(...) 혹은 glDrawElements(...)를 호출하여 드로잉 VAO 바인딩 해제
- 출처: https://stackoverflow.com/questions/8923174/opengl-vao-best-practices
- 출처: https://m.blog.naver.com/cjdeka3123/220947181159