GLES에서 그려질 정점 데이터를 전송하는 방법은 두가지가 있습니다.
- 직접 전송
- 버퍼로 캐시
1. 직접 전송
기본 방식입니다.
정점을 GPU로 바로 전송해 그리도록 합니다. 매번 그릴 때마다 정점이 전송되므로 VRAM이 필요없는 대신, 전송 대역이 필요합니다.
정점이 매우 많이 필요한 데이터가 아니라면, 대역이 많이 필요하지 않으므로 VRAM을 아끼기 위해서도 좋은 방법일 수 있습니다. 또한, 매번 정점 데이터를 보낼 때마다 갱신할 수도 있기에 동적인 정점이 필요하다면 이쪽이 더 좋습니다.
2. 버퍼로 캐시
정점이 많아지면 전송 대역에 한계가 오고 성능 저하로 이어집니다. 이에 정점을 VRAM에 캐시하고 이를 사용하도록 하는 방법입니다. 이 캐시를 VBO(Vertex Buffer Object)라 하며, DirectX의 VertexBuffer의 역할을 합니다.
- 그리기 전, 정점을 미리 보내 두어야 합니다.
- VRAM이 필요하며,
- 드로잉 시에는 대역을 아낄 수 있습니다.
- 정점이 많이 필요할 경우 좋습니다.
정점을 수정해야 할 경우, 새로 보내야 하므로 버퍼로 인한 이득이 사라집니다. 그래서 고정된 정점에만 사용해야 합니다.
버텍스 셰이더
그래픽 피델리티가 올라가면서 대량의 정점을 사용하는 것이 불가피하기에 버퍼를 쓸 수 밖에 없는데, 버퍼(=VRAM)에 있는 정점은 CPU가 엑세스할 수 없기에 동적인 변화를 줄 수 없습니다. 그래서 GPU가 버퍼에 있는 정점을 동적으로 사용할 수 있도록 하는 방법을 찾게 됩니다. 이것이 정점 프로그램, 즉 버텍스 셰이더입니다.



