Terminologi ini berakar pada sejarah OpenGL. Yang penting untuk diingat adalah bahwa, untuk sebagian besar versi GL yang relevan di sini, OpenGL berevolusi secara bertahap dan dengan menambahkan fungsionalitas baru ke API yang sudah ada daripada mengubah API.
Versi pertama OpenGL tidak memiliki tipe objek ini. Menggambar dicapai dengan mengeluarkan beberapa panggilan glBegin / glEnd, dan satu masalah dengan model ini adalah bahwa itu sangat tidak efisien, dalam hal fungsi panggilan overhead.
OpenGL 1.1 mengambil langkah pertama untuk mengatasinya dengan memperkenalkan array vertex. Alih-alih secara langsung menentukan data titik Anda sekarang dapat sumbernya dari array C / C ++ - karenanya namanya. Jadi array vertex hanya itu - array verteks dan status GL yang diperlukan untuk menentukannya.
Evolusi besar berikutnya datang dengan GL 1.5 dan memungkinkan menyimpan data array vertex dalam memori GPU daripada dalam memori sistem ("sisi klien"). Kelemahan dari spesifikasi vertex array GL 1.1 adalah set lengkap data vertex harus ditransfer ke GPU setiap kali Anda ingin menggunakannya; jika sudah ada pada GPU maka transfer ini dapat dihindari dan potensi peningkatan kinerja tercapai.
Jadi tipe objek GL baru dibuat untuk memungkinkan penyimpanan data ini pada GPU. Sama seperti objek tekstur digunakan untuk menyimpan data tekstur, objek buffer verteks menyimpan data verteks. Ini sebenarnya hanya kasus khusus dari tipe objek buffer yang lebih umum yang dapat menyimpan data non-spesifik.
API untuk menggunakan objek vertex buffer didukung oleh API array vertex yang sudah ada, itulah sebabnya Anda melihat hal-hal aneh seperti mengonversi byte offset ke pointer di dalamnya. Jadi sekarang kita memiliki API array vertex yang baru saja menyimpan status, dengan data yang bersumber dari objek buffer daripada dari dalam array memori.
Ini membawa kita hampir ke akhir cerita kita. API yang dihasilkan cukup bertele-tele ketika menentukan keadaan array vertex, jadi jalan lain optimasi adalah membuat tipe objek baru yang mengumpulkan semua state ini bersama-sama, memungkinkan beberapa perubahan status array vertex dalam satu panggilan API, dan memungkinkan GPU untuk berpotensi melakukan optimasi karena dapat mengetahui keadaan apa yang akan digunakan sebelumnya.
Masukkan objek array vertex, yang mengumpulkan semua ini bersama-sama.
Jadi, untuk meringkas, array vertex mulai hidup sebagai kumpulan status dan data (disimpan dalam array) untuk menggambar. Sebuah penyangga vertex menggantikan di memori penyimpanan array dengan tipe GL objek, meninggalkan berbagai titik hanya menjadi negara. Sebuah benda titik array yang hanya objek wadah untuk negara ini, yang memungkinkan untuk diubah lebih mudah dan dengan sedikit panggilan API.
char* buffer = socketRead();
(pseudocode). Log di sisi lain, hidup melalui seluruh siklus hidup aplikasi. Jadi Anda membuat array di suatu tempat dan mulai membaca socket, kapan pun Anda mendapatkan data yang Anda tuliskan potongan itu ke array, memberi Anda daftar rapi semua data yang Anda terima.