Как суммировать пиксели треугольника с OpenGL ES - PullRequest
1 голос
/ 25 апреля 2019

Я новичок в OpenGL ES. В настоящее время я читаю документы о версии 2.0 OpenGL ES. У меня есть треугольная 2D-сетка, 2D-текстура RGB, и мне нужно вычислить для каждого треугольника следующие величины:

formula

formula

где N - количество пикселей данного треугольника. Эти количества необходимы для дальнейшей обработки ЦП. Идея состоит в том, чтобы использовать растеризацию GPU для суммирования величин по треугольникам. Я не могу понять, как это сделать с OpenGL ES 2.0 (это самая популярная версия среди устройств Android). Другой вопрос, который у меня есть: возможно ли выполнять вычисления такого типа с помощью OpenGL ES 3.0?

1 Ответ

1 голос
/ 25 апреля 2019

Я не могу увидеть, как это сделать с OpenGL ES 2.0

Вы не можете; API просто не предназначен для этого.

Можно ли выполнить этот тип вычислений с OpenGL ES 3.0?

В общем случае нет. Если вы можете использовать OpenGL ES 3.1 и контролировать геометрию ввода, то жизнеспособным алгоритмом будет:

  • Добавьте атрибут вершины, который является идентификатором примитива для каждого треугольника в сетке (мы можем использовать в качестве индекса массива).
  • Выделите атомарный буфер GL_ATOMIC_COUNTER_BUFFER по одному атомному элементу на примитив, который предварительно обнуляется.
  • В фрагментном шейдере увеличивается атом, соответствующий текущему примитиву (загружается из атрибута вершины).

Производительность, вероятно, будет довольно ужасной - атомные технологии, как правило, отстой для большинства реализаций GPU.

...