Я не уверен, как вы делаете бит XOR (по крайней мере, он должен быть медленным; я не думаю, что какой-либо из существующих GPU ускоряет это), но вот моя идея:
- имеют два входных изображения
- включить окклюзионный запрос.
- выводит два изображения на экран (т.е. полноэкранный квад с двумя настроенными текстурами), с фрагментным шейдером, который вычисляет abs (texel1-texel2) и убивает пиксель ( discard в GLSL) если пиксели одинаковы (разница равна нулю или ниже некоторого порогового значения). Возможно, проще всего просто использовать фрагментный шейдер GLSL, и там вы просто читаете две текстуры, вычисляете abs () разницы и отбрасываете пиксель. Здесь достаточно базовых знаний GLSL.
- получить количество пикселей, которые прошли запрос. Для одинаковых пикселей запрос не пройдет (пиксели будут отброшены шейдером), а для разных пикселей запрос пройдет.
Сначала я подумал о более сложном подходе, включающем буфер глубины, но потом понял, что достаточно просто убить пиксели. Вот мой оригинал (но вышеприведенный проще и эффективнее):
- имеют два входных изображения
- очистить экран и буфер глубины
- выводит два изображения на экран (т.е. полноэкранный квад с двумя настроенными текстурами) с фрагментным шейдером, который вычисляет abs (texel1-texel2) и убивает пиксель ( discard в GLSL) если пиксели разные. Нарисуйте четырехугольник так, чтобы его значение буфера глубины было близко к плоскости.
- после этого шага буфер глубины будет содержать небольшие значения глубины для одинаковых пикселей и большие значения глубины (в дальней плоскости) для разных пикселей.
- включите запрос окклюзии и нарисуйте еще один полноэкранный четырехугольник с глубиной ближе, чем в дальней плоскости, но больше, чем в предыдущем квадрате.
- получить количество пикселей, которые прошли запрос. Для одинаковых пикселей запрос не пройдет (буфер глубины уже ближе), а для разных пикселей запрос пройдет. Вы бы использовали SAMPLES_PASSED_ARB, чтобы получить это. Вот пример запроса окклюзии на CodeSampler.com , чтобы начать.
Конечно, все это требует графического процессора с поддержкой запросов окклюзии. Это поддерживается большинством графических процессоров, начиная с 2002 года, за исключением некоторых бюджетных (в частности, Intel 915 (GMA 900) и Intel 945 (GMA 950)).