glBlendFunc(GL_SRC_ALPHA, GL_ONE)
Naja, also ich sage mal ganz banal:
Delphi-Quellcode:
function Blend(const src, dst: Cardinal): Cardinal;
var
src_rgba: TRGBQuad absolute src;
dst_rgba: TRGBQuad absolute dst;
res_rgba: TRGBQuad absolute Result;
begin
res_rgba.a := Min(src.a*src.a div 255 + dst.a, 255);
res_rgba.r := Min(src.a*src.r div 255 + dst.r, 255);
res_rgba.g := Min(src.a*src.g div 255 + dst.g, 255);
res_rgba.b := Min(src.a*src.b div 255 + dst.b, 255);
end;
So sollte es eigentlich stimmen (nicht getestet).
Was dein Code da macht, da habe ich überhaupt keine Ahnung. Das scheint auf den ersten Blick extrem hyper-optimiert zu sein. Aber wenn es nicht funktioniert, dann ist es vielleicht doch nicht so clever.
Ich wüsste aber persönlich auch nicht, wie man die Multiplikation nur durch boolsche Operationen ersetzen können sollte, alleine deshalb bin ich etwas skeptisch gegenüber deinem Code. Das kann meiner Meinung nach so nicht funktionieren, aber falls doch, dann wäre ich sehr gespannt zu erfahren, wie.