1. Blitter operuje na słowach, więc bitmapa musi mieć szerokość wielokrotności 16px.
Czasami, zwłaszcza przy dziwnych i nierównych wartościach srcx/dstx specyfika blittera powoduje, że potrzebne jest dodatkowe słowo na źródłowej bitmapie. Ale to są przypadki ekstremalne i na 95% tylko potrzebne jak srcX jest nierówne. Na 95% możesz tę swoją bitmapę mieć na szerokość 16px. Problem tylko taki, że żeby wyświetlić tę piłkę np na x=5 to musisz na szerokość blitować na pierwszym jak i drugim słowie bitplanu - pierwszy załatwi piksele x=5..15, drugi 16..21. Bltsize jest pod to ustawione, dlatego tam masz właśnie 32/16. Ustawienie bltmod robi ciche założenie że blit ma szerokość bitmapy, dlatego setowany jest na zero. Musiałbyś ustawić bltamod/bltbmod na -2 żeby to dobrze działało, by po każdej linii blitter wracał na spodziewane miejsce.
2./3. Blitter nie wie co to kolory, podajesz mu bitplane'y źródłowe i jeden docelowy. Mógłbyś mieć 5bpp boba i 1bpp maskę i 5 razy setupować blit, podając każdorazowo jeden bitplane boba i jeden bitplane maski, ale jest to wolne. Zblitowanie "ciurem" jest tylko możliwe jak masz wszystkie bitplane'y przy sobie (najczęściej w formacie interleaved czyli przeplot linii bitplane'ów), ale też wtedy musisz dostarczyć takiej samej wielkości dane maski, stąd maska jest 5bpp. Klasyczna zamiana czasu wykonania na większe zużycie pamięci.
Jest bodaj funkcja systemowa, której możesz powiedzieć który kolor to maska, ale ona wykonuje sporo dodatkowych operacji by najpierw tę maskę wyłuskać do użycia w blicie, co daje dodatkowy narzut przy każdym jej wywołaniu.
Masz dwie opcje:
- zrobić sobie jakiś tool który będzie Ci przygotowywał odpowiednio bitmapy z maską, potem tylko je załączasz/wczytujesz w produkcji i używasz
- robisz to samo, tylko na początku programu i godzisz się na dłuższy loading.
Generalnie blitter to chyba najbardziej skomplikowany element hw Amigi, ogarnięcie w miarę uniwersalnych funkcji do jego używania zajęło mi sporo czasu. To co tam masz to mocno wyspecjalizowany kod, który się rozwali jak zaczniesz w nim dłubać bez przygotowania merytorycznego. Polecam przeczytanie rozdziału o blitterze w Hardware Reference Manual, prześledzenie co ten przykładowy kod faktycznie robi i potem zagmeranie tak, żeby faktycznie to z bitmapą szeroką na 16px w każdym przypadku zadziałało. A jak chcesz gotowca to możesz co nieco wyrypać
z ACE ;)
Ostatnia aktualizacja: 03.02.2024 10:14:43 przez teh_KaiN