Che cos’è un buffer di vertice OpenGL®?

Un vertex buffer Open Graphics Library® (OpenGL®) è un’area di memoria del computer spesso situata direttamente su una scheda grafica che consente un accesso molto rapido a una serie di vertici e alle loro proprietà. Molto spesso, viene utilizzato un buffer di vertice OpenGL® per creare un oggetto buffer di vertice (VBO), consentendo il rendering di oggetti all’interno di una scena tridimensionale (3D) come parte di un elenco di visualizzazione e non in modalità immediata. Occasionalmente, tuttavia, è possibile utilizzare un vertex buffer all’esterno di un VBO per memorizzare informazioni su un oggetto o per facilitare le trasformazioni su modelli complessi. Va notato che un vertex buffer non deve essere posizionato nella memoria della scheda grafica, perché può essere allocato come qualsiasi struttura di dati. Se il buffer di vertice OpenGL® verrà utilizzato come parte di un VBO, la scheda grafica utilizzata deve supportare la speciale estensione OpenGL® VBO per garantire che il buffer venga inserito nella memoria grafica.

Al livello più elementare, un buffer di vertice OpenGL® è solo un semplice buffer, un’area di memoria allocata in cui i dati possono essere archiviati. Diventa un vertex buffer quando al suo interno viene memorizzato un array di vertici. Un array di vertici OpenGL® è un array di strutture dati che definisce tutte le proprietà dei singoli vertici. Queste informazioni possono includere le posizioni X, Y e Z del vertice nella scena 3D, il colore del vertice, la normale e altre proprietà.

Nel rendering in modalità immediata, i comandi OpenGL® vengono eseguiti direttamente non appena vengono chiamati dall’interno di un programma. In questi casi non è necessario disporre di un array di vertici, poiché i comandi per posizionare e disegnare un vertice possono essere dati direttamente all’hardware, sebbene ciò possa causare seri problemi di prestazioni. Per il rendering in modalità non immediata, le informazioni su un oggetto o modello 3D devono prima essere collocate in un array di vertici in modo che abbia una struttura che OpenGL® possa facilmente interpretare; quell’array deve quindi essere archiviato in un’area speciale di memoria nota come buffer di vertice OpenGL®.

Di per sé, il buffer dei vertici non ha necessariamente alcun attributo speciale oltre ad essere una raccolta completa di informazioni utilizzate per disegnare un oggetto. Quando il buffer di vertice OpenGL® viene convertito in un oggetto buffer di vertice OpenGL® tramite l’estensione OpenGL, tuttavia, si verifica una sequenza speciale di eventi per aiutare a ottimizzare il disegno dell’oggetto definito nel buffer di vertice. Vale a dire, il buffer viene allocato e archiviato nella memoria della scheda grafica, sul lato server della configurazione client-server utilizzata da OpenGL®. Alcuni calcoli possono anche essere eseguiti in anticipo sul VBO in modo che possa essere eseguito il più velocemente possibile. Al di fuori di un VBO, un normale buffer di vertice di solito non riceve questo trattamento e può essere allocato e utilizzato come qualsiasi altro tipo di dati.