Я пишу программу, которая рисует несколько слоев, которые должны имитировать входное (растровое) изображение. После рисования фигур мне нужно сравнить мое визуализированное изображение с входным, а затем решить, достиг ли я своей цели или нет. В настоящее время я использую библиотеку CIMG для рисования. Вся программа работает на процессоре. Я попытался использовать SFML, который использует OpenGL для рисования - рендеринг был очень быстрым, но копирование изображения с графического процессора в CPU (для создания коагуляции со входным изображением) занимает очень много времени. Я хочу:Сравнение двух изображений с использованием OpenGL
- визуализации многоугольников на GPU
- отправить вход (растровые) изображения на GPU
- сравнить изображения на GPU с помощью простой "пиксель после пикселя" сравнения: (r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2
- отправить результат сравнения (один номер) к CPU
Unfortunatelly Я не знаю, если он (сравнение двух изображений) является возможно достигнуть wi го OpenGL. Если это возможно, я изучу OpenGL или любую другую библиотеку, которая позволяет выполнять мою задачу очень быстро.
Вы можете сделать это в OpenGL, используя программирование в стиле GPGPU. В вашем случае, возможно, фрагментарный шейдер для сравнения отдельных значений пикселей, а затем другой шейдерный проход для вычисления максимальной разницы. Но это не похоже на разумное решение. На самом деле можно получить идеальную копию изображения с графического процессора до CPU. Ваш исходный код копирования GPU-> CPU был неправильным. Я бы поработал над его исправлением вместо кодирования сравнения на стороне GPU. – Angew
Копирование с GPU на CPU работает хорошо, но я занимаю очень много времени, я повторяю эту операцию тысячи раз, поэтому для меня важно ускорить эту операцию. – Sparkzi
Я вижу. Не совсем ясно, что значит «уничтожить все». В этом случае вы можете попробовать подход фрагментарного шейдера. – Angew