Я сделал это с помощью вершинного и фрагментного шейдера.
Я объявляю точечную вершину для каждого пикселя в текстуре и визуализирую их.
Я объявляю закадровую текстуру рендеринга, которая является 1D и имеет длину нужного мне количества сегментов. Вы можете сделать это 1 ведро, но это замедлит вас, пока каждый фрагмент ожидает записи в один и тот же пиксель. Я обнаружил, что 32 обычно работает очень хорошо для меня.
Установите режим наложения на аддитивный.
В вершинном шейдере я изменяю gl_VertexID на количество сегментов и устанавливаю этот диапазон между -1‹->1.
Выберите текстуру для каждой вершины (которая на самом деле равна каждому пикселю) и установите для gl_Color белый цвет для действительного пикселя и черный цвет для нет (в основном 1 или 0).
Сделайте считывание 1D-текстуры и просуммируйте значения. Это будет количество пикселей.
Второй способ, который я делал в прошлом, состоит в том, чтобы сделать первый проход к закадровой текстуре того же размера, что и ввод, и классифицировать ввод как 1 или 0. Затем выполните рендеринг в текстуру, которая имеет половину ширины и высоту и образец 4 раза добавить и написать. Продолжайте делать это, пока не дойдете до 1x1 и не прочитаете значение.
person
Jose
schedule
13.04.2010