O
Ich würde ein FBO verwenden:
-Das FBO mit dem Mittelwert füllen. (Also 0.5f bzw. 127 aus Byte Sicht)
-Dann das erste Bild einblenden. Dabei die Deckkraft halbieren (So dass aus dem max. Wert 255 ein 127 wird, z.B. mit einem blend Wert von 0.5f)
-Nun das zweite Bild negativ in das FBO blenden (Siehe: http://wiki.delphigl.com/index.php/glBlendFunc, das ist zwar eine Delphi Seite, aber die haben sehr gut veranschaulicht was die ganzen Modi machen)
Deckkraft natürlich auch halbieren.
-dann aus dem FBO eine Textur machen und die Mipmap von OpenGL erstellen lassen. (glGenerateMipmap <-- ist so schön schnell )
-die Textur jetzt in klein (Je nach dem wie genau du Unterschiede erkennen willst versus wie schnell du es später auslesen willst) in ein FBO rendern.
-Dann diesen FBO-Inhalt in den Ram kopieren und zusammenzählen wie weit jeder Pixelwerte von 127 abweicht.
Wie größer dieser Wert ist, um so Ungleicher sind die Bilder. Und bei 0 handelt es sich um gleiche oder nahezu gleiche Bilder.
PS: Wenn ich es richtig verstanden habe, kann man mittels eines PBO beim auslesen der Textur->Ram nochmal einiges an Geschwindigkeit raus holen. Aber damit habe ich noch nicht gearbeitet.
Es wäre auch einen Versuch wert zu schauen ob man das ganze mit einem floating point FBO machen kann. Dann sollten es relativ genaue Resultate gäben, ohne dass man ein sehr großes Bild von der GPU zum Ram kopieren muss. Das unterstützen aber erst "neuere" Grafikkarten. Wohingegen die anderen Funktionen auch von relativ alten Grafikkarten unterstützt werden.
Das ganze lohnt sich aber nur wenn die Texturen ohnehin in OpenGL herumliegen. Sie dafür extra zur GPU zu senden könnte ohne PBO teurer sein als sie nur auf der CPU zu vergleichen.
Ja, ich habe auch ein kleineres Projekt geplantes wo ich so etwas gebrauchen könnte.