Bu terminoloji, OpenGL tarihine dayanır. Unutulmaması gereken, burada alakalı olan GL sürümlerinin çoğu için OpenGL'nin aşamalı olarak ve API'yi değiştirmek yerine mevcut bir API'ye yeni işlevler ekleyerek geliştiğidir.
OpenGL'nin ilk sürümünde bu nesne türlerinden hiçbiri yoktu. Çizim birden fazla glBegin / glEnd çağrısı yapılarak sağlandı ve bu modelle ilgili bir problem, fonksiyon çağrısı yükü açısından çok verimsiz olmasıydı.
OpenGL 1.1, tepe dizileri tanıtarak bu sorunu gidermek için ilk adımları atmıştır. Köşe verilerini doğrudan belirtmek yerine artık C / C ++ dizilerinden kaynaklayabilirsiniz - dolayısıyla adı. Yani bir köşe dizisi sadece - bir dizi köşe ve bunları belirtmek için gereken GL durumu.
Bir sonraki büyük evrim GL 1.5 ile geldi ve köşe dizisi verilerinin sistem ("istemci tarafı") belleğinden ziyade GPU belleğinde depolanmasına izin verdi. GL 1.1 köşe dizisi spesifikasyonunun zayıflığı, her köşe verisi setinin her kullanmak istediğinizde GPU'ya aktarılması gerektiğiydi; zaten GPU'daysa, bu aktarımdan kaçınılabilir ve potansiyel performans kazanımları elde edilebilir.
Bu nedenle, bu verilerin GPU'da depolanmasına izin vermek için yeni bir GL nesnesi türü oluşturuldu. Tıpkı bir doku nesnesinin doku verilerini depolamak için kullanıldığı gibi, bir tepe tamponu nesnesi tepe verilerini saklar. Bu aslında sadece spesifik olmayan verileri depolayabilen daha genel bir tampon nesne tipinin özel bir durumudur.
Köşe tamponu nesnelerini kullanma API'si zaten mevcut köşe dizileri API'sında piggy-back olarak kullanıldı, bu yüzden bayt ofsetlerini içindeki işaretçilere dönüştürmek gibi garip şeyler görüyorsunuz. Şimdi verileri depolayan bir köşe dizisi API'sine sahibiz, veriler bellek içi dizilerden ziyade arabellek nesnelerinden kaynaklanmaktadır.
Bu bizi neredeyse hikayemizin sonuna getiriyor. Sonuçta ortaya çıkan API, köşe dizisi durumunu belirtme söz konusu olduğunda oldukça ayrıntılıydı, bu nedenle başka bir optimizasyon yolu, bu durumun tümünü bir araya toplayan, tek bir API çağrısında birden fazla köşe dizisi durumu değişikliğine izin veren ve GPU'lara izin veren yeni bir nesne türü oluşturmaktı. önceden hangi durumun kullanılacağını bilmesi nedeniyle potansiyel olarak optimizasyon yapmak.
Tüm bunları bir araya getiren köşe dizisi nesnesini girin.
Özetlemek gerekirse, bir tepe dizisi , çizim için durum ve veri (bir dizide depolanan) koleksiyonu olarak hayata başladı. Bir köşe arabelleği , bellek içi dizi depolamasını bir GL nesne türüyle değiştirir ve köşe dizisini yalnızca durum olarak bırakır . Bir köşe dizisi nesnesi , bu durum için yalnızca bir kapsayıcı nesnesidir ve daha kolay ve daha az API çağrısı ile değiştirilmesine izin verir.
char* buffer = socketRead();
(sözde kod) kadar basittir . Diğer yandan günlük, tüm uygulama yaşam döngüsü boyunca yaşar. Böylece bir yerde bir dizi oluşturursunuz ve soketi okumaya başlıyorsunuz, diziye yazdığınız verileri her aldığınızda, aldığınız tüm verilerin temiz bir listesini verir.