iOS (iPhone) Высокоточный вывод текстур - PullRequest
1 голос
/ 29 ноября 2011

Я пытаюсь создать гистограмму значений яркости из большого изображения (порядка 2048 x 2048), для этого я следую этому методу для расчета гистограммы на графическом процессоре.

По сути, все сводится к созданию точки для каждого пикселя и выборки текстуры через вершинный шейдер в этой точке, а затем к выводу значения 1 / (число пикселей) в одномерную текстуру (256 x1).Если вы установите режим смешивания на glBlendFunc (GL_ONE, GL_ONE), это будет означать, что ваша одномерная текстура в конечном итоге будет накапливать эффективную гистограмму.

Однако, по моему опыту, у выходной текстуры недостаточно точности для увеличенияна 1 / количество пикселей, когда число пикселей является чем-то разумным.

Есть ли способ повысить точность текстуры на iPhone до чего-то, что будет соответствовать увеличению этой точности

1 Ответ

2 голосов
/ 08 декабря 2011

В настоящее время OpenGL ES на iOS не поддерживает рендеринг с текстурой с точностью выше одного байта на цветовой канал.См. рендеринг в текстуру с плавающей точкой под iOS .Вы захотите увеличить каждую ячейку на 1, что означает, что ваш шейдер будет выводить 1/256.

Чтобы предотвратить насыщение, кажется, вы могли бы использовать метод, описанный в разделе 2.2 («Точные соображения для накопления содержимого ячейки»).") из статьи, на которую вы ссылались.То есть распределить пиксели по локальным гистограммам, а затем собрать их в конце.

...