2012-05-30 4 views
0

Как я могу сделать следующий алгоритм? :Как получить предыдущее значение в буфере глубины?

if(Color.a < 0.9) 
    gl_FragDepth = gl_PrevFragDepth; 
else 
    gl_FragDepth = gl_FragCoord.z; 

это я могу сделать с glDepthMask(false);, но он работает с полигонами, которые имеют все пиксели с alpha < 1. Если у полигонов есть пиксели с alpha = 1 и alpha < 1 У меня есть некорректное изображение. Мне нужно это для рендеринга текстовых масок, содержащих любые альфа-значения!

Я не могу использовать текстуру глубины, потому что мне нужно работать в режиме реального времени с буфером глубины!

ответ

0

Как я могу сделать следующий алгоритм? :

В OpenGL-4 вы можете сделать это, используя записи глубинной текстуры в шейдере фрагментов. Но производительность будет ужасной, поскольку графические процессоры оптимизированы для сбора доступа, а не для разброса доступа, которые, тем не менее, вы пытаетесь сделать.

С OpenGL-3 и ниже вы не можете этого сделать. Сожалею.

+1

, но как насчет рендеринга только для текстуры глубины ... и затем читать его в следующем проходе? – fen

+0

@fen: Это сработает, но ОП конкретно сказал, что он не может или не хочет использовать несколько проходов. – datenwolf