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