Cześć,
Mój bufor kolorów to u_int32, RGBA, A nie używam oczywiście.
Czy można jakoś przyśpieszyć operacje na kolorach bez wyłuskiwania RGB?
Najbardziej zależy mi na obliczeniu średniej z dwóch takich kolorów.
Do tej pory robiłem tak, jeśli chciałem zmienić intensywność całego pixela:
output_buffer_32[index] =
intensity_premultipled[texture_pixel >> 16 & 0x0ff] << RC_ch1 |
intensity_premultipled[texture_pixel >> 8 & 0x0ff] << RC_ch2 |
intensity_premultipled[texture_pixel & 0x0ff] << RC_ch3;
czyli najpierw wyłuskiwałem każdy RGB osobno a potem znowu składałem w całość robiąc shifty (przy czym swifty były jako zmienne RC_ch1, 2,3 żeby zawsze mi sie kolory zgadzaly w zaleznosci of formatu pixela, i ustawiałem je wcześniej)
Teraz teraz zamiast jednej tablicy zrobiłem 3 tablice ktore na wyjściu mają już przesunięty kolor na właściwe miejsce, więc pozbyłem się przesunięcia i wydajność mocno wzrosła:
output_buffer_32[index] = intensity_premultipled_CH1[texture_pixel >> 16 & 0x0ff] |
intensity_premultipled_CH2[texture_pixel >> 8 & 0x0ff] |
intensity_premultipled_CH3[texture_pixel & 0x0ff];
Natomiast chciałem spróbować zrobić coś takiego. Mój bufor kolorów byłby wypełniony co drugi pixel - po pierwszym przejściu (to pixele otrzymane w wyniku obliczeń). Natomiast chciałbym na koniec zrobić drugie przejście, które by interpolowało pomiędzy istniejącymi już kolorami. Zakładam, że
guzik bym zyskał na koniec, ale wale sprawdzić lub zapytać. Sens miało by to jeśli operacja interpolacji dałaby się zrobić jakoś szybko. Może są jakieś asemblerowe sztuczki? Poniżej schematycznie o co chodzi:
ps.
zamiana bufora kolorów z u_int32 na unię z osobnymi komponentami typu char r,g,b,a nie wiele daje..
Ostatnia aktualizacja: 10.04.2021 16:52:24 przez mateusz_s