Danke, Alphablending ist etwas anderes.
Delphi-Quellcode:
function Scale32(const scale: Byte; const p: cardinal): cardinal;
var
ag, rb: cardinal;
sag, srb: cardinal;
begin
ag := (p and $FF00FF00) shr 8;
rb := p and $00FF00FF;
sag := scale * ag;
srb := scale * rb;
sag := sag and $FF00FF00;
srb := srb shr 8 and $00FF00FF;
result := sag or srb;
end;
function blend_alpha(src, tgt: cardinal): cardinal;
var
alpha, invalpha: Byte;
begin
alpha := (tgt shr 24) and $FF;
invalpha := $FF - alpha;
result := Scale32(alpha, tgt) + Scale32(invalpha, src);
end;
Das ist nicht das Problem. Additive ist etwas anderes:
http://www.learnopengles.com/tag/additive-blending/