OpenGL Datentyp-Salat?

Hy Leute,
ich habe ein OpenGL-Programm geschrieben in dem ich ein Framebuffer-Objekt benutze, um in Texturen zu rendern. Diese Texturen bearbeite ich nachträglich in zwei Pixel-Shadern. Nun habe ich die Kuriosität, dass ich in meinem ersten Shader die Differenz-Textur von zwei Texturen („Textur1“ und „Textur2“) bilde:
glFragColor = color1 - color2;
Ich lasse den ersten Pixel-Shader in die Textur „Differenztextur“ schreiben. Als nächstes übergebe ich die Differenztextur und die Textur2 an den zweiten Shader und berechne dort:
glFragColor = color2 + differenz;

Das sollte ja nun eigentlich color2 + (color1 - color2) = color1 ergeben. Ich bekomme aber eine geringfügig andere Textur. Zudem sind einige Werte des zweiten Shaderergebnisses negativ.
Außerdem sage ich dem Framebuffer an den ich die Texturen binde, dass das Texturformat GL_BYTE sein soll. Trotzdem habe ich in meinem Shader-Programm Texturwerte von 0.0 bis 1.0 also eigentlich float.
Warum??? Kann dies die Fehlerquelle sein?
Ich bin gespannt auf eure Lösungsvorschläge…
(Den Code für die Framebufferobjekte und die Shader-Programme habe ich von Gamedev.net und lighthouse3d ziemlich wörtlich übernommen)

Gruß,
Lars Hoffmann