Zitat Zitat von Kazesui Beitrag anzeigen
Der eigentliche grund war dass ich es ziemlich spät geschrieben habe und habe schnell gedacht dass vielleicht ginge es direkt die farbe zu addieren ohne die verschiedne Komponente erst mal zu separieren. Zu der zeit fiel es mir nicht ein dass ich ja noch n Branch brauchen wurde um die Komponente an ihrem max werte zu halten, und denkte nur daran zu verhindern dass ein bit von der eine Komponent in das andere fließen wurde.
Achso, ich habe sowas Ähnliches bis jetzt nur im Zusammenhang gesehen, wenn versucht wurde die branches zu eliminieren.

BTW, wenn du schon dabei bist kannst du auch gleich subtraktives Blending implementieren (wenn du es noch nicht getan hast). Ich bin mir sicher die Leute würden sich darüber nicht weniger freuen, vor allem da eine Kombination aus additivem und subtraktivem Blending eine Art dynamische Belichtung ermöglicht. Der Code für subtraktives Blending entspricht in etwa dem Code für additives Blending mit ein paar Ausnahmen:

Code:
unsigned short src = ...;
unsigned short dst = ...;

unsigned char r = std::max(0, (dst >> 11) - (src >> 11));
unsigned char g = std::max(0, ((dst & 0x07E0) >> 5) - ((src & 0x07E0) >> 5));
unsigned char b = std::max(0, (dst & 0x001F) - (src & 0x001F));

unsigned short result = (r << 11) | (g << 5) | b;
Zitat Zitat von Kazesui Beitrag anzeigen
Ich wurde aber sehr gern ein beispiel davon sehen wie man sowas mit simd machen kann. Auch wenn es hier vielleicht nicht schneller wäre könnte es für spätere fälle noch nützlich sein.
Ok, ich schicke dir dann später eine PM.