jest moc!
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
TURGEN 9.3.0 Kolejna wersja multiplatformowego narzędzia do zarządzania obrazami taśm.
SV 2024 WE - program imprezy Już za tydzień odbędzie się zimowa edycja Silly Venture
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
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_words
W 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
Wygenerowano w 0.017 sekund, wykonano 60 zapytań