Einzelnen Beitrag anzeigen

schty

Registriert seit: 13. Dez 2003
5 Beiträge
 
Delphi 6 Personal
 
#1

Alphablending mit MMX / SSE Befehle

  Alt 13. Dez 2003, 12:01
Hier gibt's meine 'weiterentwickelte' alpha-blending procedure (sehe unten). Das Original "CombineMem" findet man im Freeware Komponenten-Source "Graphics32" von Alex Denissov.

// Result = Alpha * (Foreground - Background) + Background

Die Ergebnisse fuer R, G und B Werte werden parallel berechnet mit inline MMX / SSE Assembler-Befehle.

Weiss jemandem weitere Optimierungen oder sogar noch schnellere Algorithmen fuer Alphablending?

MfG,
Arjan


Delphi-Quellcode:
procedure AlphaBlend(PenColor:TColor32; DIB:PColor32; Alpha:DWORD);
asm
    MOVD MM1, EAX
// MM1 = 00 00 00 00 ** Fr Fg Fb
    MOVD MM2,[EDX]
// MM2 = 00 00 00 00 ** Br Bg Bb
    PUNPCKLBW MM1, MM0
// MM1 = 00 ** 00 Fr 00 Fg 00 Fb
    MOVD MM3, ECX
// MM3 = 00 00 00 00 00 00 00 AA
    PUNPCKLBW MM2, MM0
// MM2 = 00 ** 00 Br 00 Bg 00 Bb
    PSHUFW MM3, MM3, 0
// MM3 = 00 AA 00 AA 00 AA 00 AA
    PSUBW MM1, MM2
    PSLLW MM2, 8
    PMULLW MM1, MM3
    PADDW MM1, MM2
    PSRLW MM1, 8
    PACKUSWB MM1, MM0
    MOVD [EDX],MM1
end;
[edit=Admin]Code in Tags [delphi ]..[ /delphi] gesetzt. Künftig bitte selber machen. Mfg, Daniel[/edit]
  Mit Zitat antworten Zitat