Я не могу увидеть, как это сделать с OpenGL ES 2.0
Вы не можете; API просто не предназначен для этого.
Можно ли выполнить этот тип вычислений с OpenGL ES 3.0?
В общем случае нет. Если вы можете использовать OpenGL ES 3.1 и контролировать геометрию ввода, то жизнеспособным алгоритмом будет:
- Добавьте атрибут вершины, который является идентификатором примитива для каждого треугольника в сетке (мы можем использовать в качестве индекса массива).
- Выделите атомарный буфер
GL_ATOMIC_COUNTER_BUFFER
по одному атомному элементу на примитив, который предварительно обнуляется.
- В фрагментном шейдере увеличивается атом, соответствующий текущему примитиву (загружается из атрибута вершины).
Производительность, вероятно, будет довольно ужасной - атомные технологии, как правило, отстой для большинства реализаций GPU.