이전 장에서 우리는 처음으로 OpenGL Pipeline을 이용해 그림을 그렸다. 이제 이 Pipeline에 대해 자세하게 알아보자.
우리는 앞 장 에서 Simplified Rendering Pipeline에 대해 배웠다. OpenGL 역시 이 Pipeline에 따라 동작한다.
OpenGL Pipeline에서는 일반적으로 Application 을 실행하면 CPU Memory에 기본적인 Objects의 vertex data를 생성하고 이를 GPU 메모리(이하 Arrays)에 Vertex Buffer Objects(이하 VBOs) 형태로 전달한다. GPU는 VBOs에서 vertex data를 읽어 각 vertex에 대해 shader 프로그램을 실행한다. 최종적으로 화면에 출력 될 데이터들은 Framebuffer에 저장되어 출력 된다.
Geometric Objects는 vertex의 조합을 이용해 표현된다. 이때 vertex는 다음의 정보를 갖고있다.
이러한 vertex data는 VBOs(Vertex Buffer Objects) 형태로 저장되고, VBOs 는 VAOs(Vertex Array Objects) 의 bind 되어 GPU에 전달된다.
VBO는 GPU의 메모리에 vertex data 를 저장하는데 사용되는 버퍼이다. 이 버퍼는 정점의 위치, 색상, 법선 벡터, 텍스처 좌표 등과 같은 데이터를 저장하며, CPU에서 GPU로 데이터를 전송하는 역할을 한다.
VAO는 정점 속성(Vertex Attribute) 설정을 저장하는 객체이다. VBO 자체는 단순히 데이터를 저장할 뿐이지만, 이 데이터가 어떻게 해석될지(위치, 크기, 속성 등)는 VAO에서 관리한다. VAO는 VBO의 속성 설정을 한 번 정의해 놓고, 여러 번 사용할 수 있도록 도와준다.