[#2]
Re: Nasza pierwsza gra - kurs programowania AmigaOS i C - część 3
@Zalewa,
post #1
Hej, jeśli mogę coś doradzić - błyskanie wynika z tego, że komputer (wiązka obrazu) cały czas wyświetla modyfikowaną część pamięci graficznej. Rozwiązania są na to dwa:
1. Wykorzystać wspomniane przez Ciebie podwójne buforowanie. Wtedy obraz nie będzie błyskać, bo wyświetlony jest jeden bufor w pamięci graficznej, podczas gdy Ty rysujesz w drugi. Przełączanie buforów nie zajmuje w ogóle czasu żadnego z procesorów Amigi. Tak samo przeskakiwanie w pamięci graficznej Amigi (np. scrolling) jest całkowicie darmowy, jeśli chodzi o czas operacji. Po prostu wiązka obrazu odczytuje z innego miejsca w pamięci graficznej.
2. Czyścić ekran tam, gdzie w tej chwili nie jest wyświetlany. Wymaga to synchronizacji z wiązką obrazu. Da się to zrobić wykorzystując np. przerwanie Coppera. Copper to jeden z dwóch koprocesorów odpowiedzialnych za wideo Amigi. Ustawiasz przerwanie na interesującą Cię linijkę obrazu i będzie on wywoływany wówczas, gdy wiązka obrazu osiągnie wyznaczony punkt. Wtedy wszystko powyżej jest w danym momencie bezpieczne do rysowania. Możesz wówczas np. wyczyścić ten obszar za pomocą procesora.
Można również czyścić lub rysować za pomocą Blittera na wyświetlanej pamięci graficznej w synchronizacji z wiązką obrazu w analogiczny sposób, tutaj najlepiej umieścić ustawianie rejestrów wewnątrz tej Copperlisty. Tylko pamiętaj, by opatrzyć tę Copperlistę instrukcją WAIT ze zgaszonym (wyzerowanym) bitem BFD (Blitter-Finish-Disable), ponieważ Copper będzie musiał poczekać jak Blitter skończy pracę (oczywiście jeśli jest zajęty jakąkolwiek pracą). Pamiętaj również, że Copper dostaje dostęp do rejestrów Blittera dopiero, gdy procesor ustawi bit 1 w rejestrze COPCON (Copper-Control). Jest to potrzebne, gdyż procesor przecież też może sterować Blitterem.
Generalnie jak Ci się uda zdążyć z czyszczeniem i rysowaniem podczas gdy generowany jest obraz komputera (a pamiętajmy że to niewielkie czasy, gdyż prędkość piksela w niskiej rozdzielczości 320x256 to 140 nanosekund), to jest dobrze. Używając tych metod nie uświadczysz wówczas błyskania, gdyż komputer będzie rysował w miejsca, które nie są aktualnie wyświetlane przez wiązkę obrazu, co pozwoli na płynną animację w 50/60Hz. Nawet na procesorze MC68020/14MHz.
Amiga CD32 pozwala dodatkowo nanosić grafikę w formacie chunky w ten sposób, dzięki sprzętowej konwersji.
Amiga CD32 (system Amiga OS 3.1) pozwala również w wygodny sposób wyłączać systemowe przerwania za pomocą funkcji bibliotecznej.
Ostatnia aktualizacja: 06.11.2018 02:58:18 przez Hexmage960