26

Odp: Algorytm obcinania wielokątów

jest moc!

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
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

Odp: Algorytm obcinania wielokątów

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!!!

Ostatnio edytowany przez Tomasz Wachowiak (2015-04-29 14:37:10)

Odp: Algorytm obcinania wielokątów

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

Ostatnio edytowany przez Tomasz Wachowiak (2015-04-29 16:50:34)

Post's attachments

PolyFill.zip 16.05 kb, liczba pobrań: 4 (od 2015-04-29) 

Tylko zalogowani mogą pobierać załączniki.

29

Odp: Algorytm obcinania wielokątów

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!

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

30

Odp: Algorytm obcinania wielokątów

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
Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
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

Odp: Algorytm obcinania wielokątów

W takim razie może uda się zejść poniżej 50% czasu ramki :D

Odp: Algorytm obcinania wielokątów

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

Ostatnio edytowany przez Tomasz Wachowiak (2015-05-07 18:43:47)

Post's attachments

PolyFill.zip 16.33 kb, liczba pobrań: 5 (od 2015-05-07) 

Tylko zalogowani mogą pobierać załączniki.