Создайте текстуру гистограммы буфера глубины с помощью GLSL

Я использую буфер глубины текущего контекста, чтобы влиять на отображаемую текстуру. Текстура одномерная и в оттенках серого. Слева направо - от ближнего к дальнему. Чем больше пикселей находится на определенной глубине, тем ярче текстура в этой точке: черный означает отсутствие пикселей на этой глубине, а белый означает, что все пиксели находятся на этой глубине.

Теперь у меня есть решение, которое делает glReadPixels ( ) в буфере глубины, анализирует его на CPU и затем записывает обратно в текстуру. Естественно, это настоящее узкое место в приложении.

Я ищу решение для всех графических процессоров, в котором буфер глубины анализируется шейдером или каким-то другим способом и таким образом обновляет текстуру. Я подумал о создании фрагментного шейдера, который считывает значение глубины и увеличивается до соответствующего пикселя в текстуре, но для этого потребуется, чтобы шейдеры фрагментов могли писать в другие текстуры. Я научился тому, что нельзя, особенно если они должны писать в один и тот же пиксель.

Есть ли какой-то трюк или метод, который мне не хватает, или я вынужден задействовать для этого центральный процессор?

5
задан Rabbid76 6 October 2017 в 20:09
поделиться