Для этого вам не обязательно нужен специальный шейдер, вы можете просто использовать точечные спрайты. Это в основном означало бы рисовать VBO как набор точек (используя glDrawArrays(GL_POINTS, ...)
) и разрешать точечным спрайтам рисовать текстурированный квадрат (с текстурой 'X') в позиции каждой точки, предполагая, что размер точки больше чем 1 пиксель.
Для фактического создания геометрии в месте каждой точки вы можете использовать геометрический шейдер. Таким образом, вы также визуализируете VBO как набор точек и генерируете две линии ('X') или любую другую геометрию для каждой точки внутри геометрического шейдера.
Альтернативой геометрическим шейдерам являются инстансированные массивы (требующие того же оборудования GL3 / DX10, что и для геометрических шейдеров). Таким образом, вы рисуете несколько экземпляров формы 'X' и получаете исходные позиции экземпляров 'из точки VBO, используя атрибут, индекс которого передвигается один раз за экземпляр.
Последней альтернативой будет генерирование геометрий фигур вручную в ЦП, чтобы в итоге вы получили набор линий или набор четырех квадратов, объединяющий все буквы X в виде линий или спрайтов или чего-либо еще.
Но самым простым (и, возможно, самым быстрым, неуверенным в этом) способом должен быть упомянутый вначале подход с точечным спрайтом, поскольку их обычные проблемы с отсечением не должны быть такой большой проблемой в вашем случае, и вы, похоже, этого не делаете все равно нужны 3d формы. Таким образом, вам не нужно генерировать геометрию самостоятельно на процессоре, а также вам не нужны специальные шейдеры или аппаратное обеспечение GL3 / DX10 (хотя это довольно часто встречается в настоящее время). Все, что вам нужно, это текстура фигуры и активация точечных спрайтов (которые должны быть ядром начиная с GL 1.5).
Если все эти общие идеи ничего вам не говорят, возможно, вы захотите немного углубиться в OpenGL и компьютерную графику в реальном времени в целом.