Estoy pensando en una escena tipo minecraft, donde por voxel te refieres a un mundo de bloques que en realidad se representan usando polígonos:
Si usa un sombreador de geometría, será difícil evitar tener exactamente tres caras (o lo que sea) por vóxel.
Si tiene muchos bloques adyacentes que tienen la misma textura, puede usar el mosaico de las texturas para tener mucho menos triángulos en su tira (degenerada) en un enfoque VBO. Quiero decir, si hay un área grande y plana de 6x6 de vóxeles de hierba, puedes dibujar toda la parte superior en solo 2 triángulos en lugar de 64.
Con el enfoque GS no puede hacer el sacrificio trivial de caras ocluidas por vóxeles adyacentes que es muy sencillo con un enfoque VBO.
No he probado el enfoque GS, pero puedo decir que el enfoque VBO con la combinación de mosaicos adyacentes repetidos funciona muy bien. Descubrí que jugar con los índices de elementos es mucho más lento que simplemente repetir los vértices. Si divide su mundo en bonitos cubos pequeños, generalmente puede usar solo un byte por componente por vértice e incluso empacar la información de textura y las normales (una cara en un cubo alineado con un eje tiene solo 3 posibles normales), etc.en un cuarto byte para hacer 4 bytes por vértice, que es agradable y rápido.
He usado VBO por separado para cada una de las 6 caras: solo es necesario dibujar como máximo 3 de ellas obviamente. Esto encaja muy bien con las diferentes texturas que generalmente se usan en las partes superiores de los vóxeles estilo minecraft. Porque para cada conjunto lo normal y tal es entonces uniforme.
Con el uso de pixmaps en mosaico vertical en un atlas con GL_REPEAT
el eje horizontal y con versiones rotadas de 90 grados de los pixmaps en el mismo atlas, descubrí que puedo dibujar cantidades masivas de bloques aparentemente diferentes usando el mismo VBO en la misma llamada. En el ejemplo del área de césped 6x6, lo habría dividido en 12 triángulos ya que solo tengo repetir en una dimensión en mi atlas.
Principalmente he estado haciendo que esto funcione en el extremo más bajo de los chips gráficos integrados y dispositivos móviles, donde GS es algo con lo que puedo soñar algún día jugar.