jest moc!
Megafile30 Atari1050 DDDHDD XCA12 SF314 / AVGCART SUBCART SidecarTridge ACSI2STM FujiNet LynxMultiCard SkunkBoard CosmosEx SatanDisk UltraSatan USBFloppyDriveEmulator SDrive SIO2PC Eiffel
http://260ste.atari.org
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Aktualizacja firmware A8PicoCart Nowe wydanie oprogramowania dla taniego kartridża A8PicoCart z obsługą kolejnych typów cartów.
THE 800XL osiągnął status Gold! Zakończono prace nad oprogramowaniem dla THE800XL. Retro Games Ltd rozpoczyna etap produkcji.
PiST 0.11.0 Środowisko programistyczne PiST dla Atari ST doczekało się nowej wersji 0.11.0.
bm800xl 0.5.9 Emulator bm800xl dla Raspberry Pi zyskał szybszy start, scanlines i pełne stany pamięci.
xasm 3.3.0 i wtyczka do VSCode Po czteroletniej przerwie powraca asembler skrośny xasm.
atari.area forum » Programowanie - 16/32bit » Algorytm obcinania wielokątów
Strony Poprzednia 1 2
Zaloguj się lub zarejestruj by napisać odpowiedź
jest moc!
Dzisiaj po południu powinienem wrzucić gotową wersję i powiem tylko tyle: drukuje kod, tapetuję ścianę i codziennie się do niego modlę :P Niestety nie mam chyba możliwości (halo panie adminie :)) wrzucenia obrazka z wersji przed i po, ale trójkąt w 4 planach, oczywiście na cały ekran zabiera tylko około 52% czasu ramki!!!
Podsyłam obiecaną wersję. Doszło kilka flag, którymi można manipulować: clipOn - włącza/wyłącza clipping, debug - wersja pomocna w czasie debugowania kodu - teraz działanie programu można przejrzeć (oczywiście w debugerze) w sposób łatwy, prosty i przyjemny. Wersja jest już bardzo mocno zoptymalizowana i jedyne co można jeszcze zrobić, to rozwinąć pętlę rysującą linie poziome - uwalniamy wtedy jeden rejestr na wprowadzenie optymalizacji pod kątem adresowania blittera. Tak swoją drogą, to tylko dwóch optymalizacji adresowych zabrakło mi do pełnej optymalizacji pętli wypełniającej - jeszcze dwa rejestry i byłoby genialnie, a tak jest tylko super :P )
Edit: Kurde! Dla linii dłuższych od 16 pix. (dla krótszych musi być bra, więc będzie podobnie jak w pętli) do wyciągnięcia jest od 12 do 16 cykli zegara plus 4 na optymalizację adresową. Hmmmm... :D
Gratulacje! Ostatnio nie sledziłem Waszych kodów i trochę się pogubiłem bo nigdy nie używałem line number, smudge i halft tone blitter'a. Będę musiał w końcu to prześledzić i przeanalizować. Anyway prędkość jest znacznie większa niż mojej wypełniarki. Piszcie demo!
nie zaglądałem jeszcze do kodu ale mam w głowie jeszcze jedną optymalizację.
Jeśli adres ekranu (ekranów) będzie zaczynał się od pełnej 16bitowej strony, np $10000, wtedy:
- zapisujemy tylko jedno - młodsze słowo do dstAddr BLiTTERa (4 cykle oszczędzone);
- zastępujemy "add.l (a5)+,d0" przez "add.w (a5)+,d0" w poniższym kodzie (4 cykle oszczędzone):
movem.w (a2)+,d0-d3 ;left x offset, right x offset, left mask, right mask
sub.w d0,d1 ;line width
ext.l d0
add.l (a5)+,d0
asr.w #3,d1
bgt.s .multi_wordsW takim razie może uda się zejść poniżej 50% czasu ramki :D
No i w końcu jest... Wersja ekstremalna z rozwiniętą pętlą wypełniającą. :) I znowu 9 scanlinii mniej :D
Edit: Tylko źródła jeszcze dodam :P
Strony Poprzednia 1 2
Zaloguj się lub zarejestruj by napisać odpowiedź
atari.area forum » Programowanie - 16/32bit » Algorytm obcinania wielokątów
Forum oparte o: PunBB