Die sind beide schon in R5G6B5 Format, und die von dir gebene implementierung funktioniert schon um welten besser. Bleibt nur für mich rauszufinden wo ich bei meinem additiven algorithmus falsch ging
Erscheint mir im Prinzip das gleiche zu tun, gibt wohl aber irgendein Denkfehler drin. Da werde ich wohl später es genauer ansehen müssen.
Die Byte-Reihenfolge sollte nicht das Problem sein, da du nicht explizit auf einzelne Bytes zugreifst. Ich glaube das Problem bei diesem Code ist, dass die Sättigung nicht funktioniert. Ist etwas schwierig nachzuvollziehen was genau du dir dabei gedacht hast.
Die gedanke wars der höchste Bit beim jedem Farbe raus zu maskieren damit es keine overflows bis in die anderen farben ginge sobald ich die beiden farben zusammen gelegt habe, und dannach das höchste bit wieder reinzu tun. Sehe jetzt aber das es bei so einem overflow doch schlimm geht weil dann sollten die ganzen bits ja einfach 1 sein, und nicht mehr oder weniger zufällig wie bei mir da oben.
Ich nehme an, der Grund dafür war die conditional branches zu eliminieren? In dem Fall würden sich SSE2 intrinsics anbieten, also im Besonderen __m128i _mm_adds_epu8. Erfordert dann etwas mehr Vorbereitung, d.h. die Farbkomponenten müssen entpackt, hochskaliert und später wieder runterskaliert und gepackt werden, dafür werden die conditional branches komplett eliminiert und 4-5 Pixel können mit einer einzigen Operation verarbeitet werden. Wenn du möchtest, kann ich dir später eine Beispiel-Implementierung zeigen. Ob das dann auch tatsächlich schneller wäre, müsste man genau testen.
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.
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.
@wer sonst noch mitliest, so sieht es aus mit dem richtigen Additiven Blending von Kyuu
Das ist jetzt mit DynRPG gemacht, wenn ich das richtig verstanden habe... oder?
Das würde bedeuten... ich muss das unbedingt noch irgendwie in AVoR reinbekommen O_______O
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:
Zitat von Kazesui
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.
Oh me likes. Aber du musst nicht meinen Screen in abschreckender Farbreduzierung dafür nutzen,
etwas eigenes würde auch zur Demonstration gehen. ^-^
Und noch immer stellt sich mir da in den Weg, dass das mit meinem Spiel so auf Dyn nicht kompatibel ist.
Man müsste sowieso nochmal anders programmieren, denn ich nutze eine XRGB-Modifikation aus dem
DestinyV2-Patcher, um mehr als 16bit auf dem Spielbildschirm zu haben, da würde eine Verrechnung mit
R5G6B5 sicher zu einem seltsamen Ergebnis führen.
--
Solange es hier falschzitierende Ärsche gibt, dulde ich keinerlei Zitatboxen, die von mir sein sollen.