Что ж, ваша проблема в том, что этот шейдер может работать только с одной вершиной за раз и не может получить доступ к другим, если они не являются униформой. Это хороший пример для геометрического шейдера, вы можете просто отправить центр, и он будет производить все, что вам нравится ... круг, прямоугольник ... с несколькими другими формами, такими как аспект или размер ...
Но и с вершинным шейдером все в порядке. Вы создадите свои вершины, реалистичные по центру. Для 2х2 квадратных вершин будет выглядеть так:
1. -1, -1
2. 1, -1
3. 1, 1
4. -1, 1
Затем вы можете просто переместить центр этой фигуры и установить его масштабирование. Как вы видите, вы просто масштабируете 2D-векторы, легко выполняете задачу и добавляете их в центральное положение ... таким образом, вы получаете 4 позиции в нужном месте и можете нарисовать свой квадрат. Идея этого заключается в том, что вы можете создать любую фигуру (не только прямоугольники, которые возможны с шириной, высотой, сверху, слева ...), и вы можете загрузить эти фигуры в буфер текстур. Для рисования с помощью шейдера вы просто указываете, какая фигура, где находится центр и какой размер ... я думаю, что будет довольно быстро и легко добавлять новые вещи ..
И да, вы правы, отображая все, и обновление очень медленное. На самом деле я вчера проводил некоторые исследования с картографированием, и это показало довольно плохую производительность ..