Thuật ngữ này bắt nguồn từ lịch sử của OpenGL. Điều quan trọng cần nhớ là, đối với hầu hết các phiên bản GL có liên quan ở đây, OpenGL đã được phát triển dần dần và bằng cách thêm chức năng mới vào API đã có sẵn thay vì thay đổi API.
Phiên bản đầu tiên của OpenGL không có loại đối tượng này. Vẽ đã đạt được bằng cách phát hành nhiều cuộc gọi glBegin / glEnd, và một vấn đề với mô hình này là nó rất không hiệu quả, về mặt chi phí gọi hàm.
OpenGL 1.1 đã thực hiện các bước đầu tiên để giải quyết vấn đề này bằng cách giới thiệu các mảng đỉnh. Thay vì trực tiếp chỉ định dữ liệu đỉnh, bây giờ bạn có thể lấy nguồn từ mảng C / C ++ - do đó có tên. Vì vậy, một mảng đỉnh chỉ là như vậy - một mảng các đỉnh và trạng thái GL cần thiết để chỉ định chúng.
Sự phát triển lớn tiếp theo đến với GL 1.5 và cho phép lưu trữ dữ liệu mảng đỉnh trong bộ nhớ GPU thay vì trong bộ nhớ hệ thống ("phía máy khách"). Một điểm yếu của đặc tả mảng đỉnh GL 1.1 là toàn bộ dữ liệu đỉnh phải được chuyển sang GPU mỗi khi bạn muốn sử dụng nó; nếu nó đã có trên GPU thì việc chuyển đổi này có thể tránh được và đạt được hiệu suất tiềm năng.
Vì vậy, một loại đối tượng GL mới đã được tạo để cho phép lưu trữ dữ liệu này trên GPU. Giống như một đối tượng kết cấu được sử dụng để lưu trữ dữ liệu kết cấu, đối tượng đệm đỉnh lưu trữ dữ liệu đỉnh. Đây thực sự chỉ là một trường hợp đặc biệt của một loại đối tượng bộ đệm tổng quát hơn có thể lưu trữ dữ liệu không cụ thể.
API để sử dụng các đối tượng bộ đệm đỉnh được hỗ trợ dựa trên API mảng đỉnh đã có sẵn, đó là lý do tại sao bạn thấy những điều kỳ lạ như chuyển đổi các byte bù sang con trỏ trong đó. Vì vậy, bây giờ chúng ta có API mảng đỉnh chỉ lưu trữ trạng thái, với dữ liệu được lấy từ các đối tượng bộ đệm thay vì từ mảng trong bộ nhớ.
Điều này đưa chúng ta gần như đến cuối câu chuyện của chúng tôi. API kết quả khá dài dòng khi chỉ định trạng thái mảng đỉnh, do đó, một cách tối ưu hóa khác là tạo một loại đối tượng mới tập hợp tất cả trạng thái này lại với nhau, cho phép nhiều thay đổi trạng thái mảng đỉnh trong một lệnh gọi API và cho phép GPU để có khả năng thực hiện tối ưu hóa do có thể biết trạng thái nào sẽ được sử dụng trước thời hạn.
Nhập đối tượng mảng đỉnh, tập hợp tất cả những thứ này lại với nhau.
Vì vậy, để tóm tắt, một mảng đỉnh bắt đầu cuộc sống như một tập hợp trạng thái và dữ liệu (được lưu trữ trong một mảng) để vẽ với. Bộ đệm đỉnh thay thế bộ lưu trữ mảng trong bộ nhớ bằng loại đối tượng GL, để mảng đỉnh chỉ ở trạng thái. Một đối tượng mảng đỉnh chỉ là một đối tượng chứa cho trạng thái này, cho phép nó được thay đổi dễ dàng hơn và với ít lệnh gọi API hơn.
char* buffer = socketRead();
(mã giả). Mặt khác, nhật ký tồn tại trong toàn bộ vòng đời của ứng dụng. Vì vậy, bạn tạo một mảng ở đâu đó và bắt đầu đọc ổ cắm, bất cứ khi nào bạn nhận được dữ liệu bạn viết đoạn đó vào mảng, cung cấp cho bạn một danh sách gọn gàng tất cả dữ liệu bạn nhận được.