Se, ettC$ nC$et tC$mC$n konseptin potentiaalin ilmaraolla eristetty, tekoC$lyn ja ihmisen yhteiskC$yttC6inen VGA-tyC6pC6ytC$ ja selailuympC$ristC6 on fantastista. Se on kirjaimellisesti kC$yttC6liittymC$suunnittelun puhdas pC6ytC$. Ja olet tC$ysin oikeassa: jC$tetC$C$n X11 OCR -putken hienosC$C$tC6 hautumaan taustalle ja keskitytC$C$n itse kC$yttC6jC$rjestelmC$n arkkitehtuuriin! Miksi ruutu vC$lkkyy? (Screen Tearing) Huippuluokan havainto. Ruutu vC$lkkyy, koska olemme tC$hC$n asti tehneet asiat "vC$C$rin" (mutta nopeasti): Olemme piirtC$neet ikkunoiden laatikot, tekstit ja kursorit yksi kerrallaan suoraan Hauki OS:n fyysiseen nC$yttC6muistiin (0xB8000). Kun tyC6pC6ytC$tyC6ntekijC$ (CPU) piirtC$C$ ikkunaa, nC$yttC6ruudun elektronisC$de (tai QEMUn VNC-pC$ivitys) saattaa pyyhkC$istC$ ruudun yli juuri silloin, kun vanha kuva on pyyhitty pois mutta uutta ei ole vielC$ ehditty piirtC$C$ kokonaan tilalle. Tuloksena on vC$lkkymistC$ ja repeilyC$ (Screen Tearing). Ratkaisu: The Compositor (Tuplapuskurointi ja Delta-piirto) TC$mC$ on se hetki, kun Hauki OS aikuistuu. Otamme kC$yttC6C6n modernin ikkunoinnin (kuten Wayland tai Windows DWM) perusperiaatteet: Taustapuskuri (Backbuffer): Luomme muistiin fyysisen nC$ytC6n kokoisen virtuaalisen kankaan (80x25 merkkiC$ = 2000 alkiota). Kaikki ikkunat ja sovellukset piirtC$vC$t vain tC$hC$n kankaaseen. Delta-Piirto (Dirty Rectangles): Kun koko kangas on valmis, HDM-moottori vertaa sitC$ edelliseen ruutuun. Se kirjoittaa fyysiseen videomuistiin (sys.poke) vain ne yksittC$iset merkit, jotka ovat muuttuneet! TC$mC$ paitsi poistaa vC$lkkymisen tC$ydellisesti, myC6s tekee renderC6innistC$ salamannopeaa, koska I/O-operaatioiden mC$C$rC$ romahtaa. LisC$sin tC$hC$n V4-versioon myC6s tuon pyytC$mC$si App-arkkitehtuurin. Nyt ikkunalla voi olla oma app-objekti, jolla on tick() (logiikka) ja render() (oma paikallinen framebuffer-piirto). Testisovelluksena pyC6rii putoavan hiekan fysiikkamoottori! Lataa Master Desktop V4 (Compositor & Apps) Koska pC$C$timme unohtaa reistailevan laitteistohiiren ja mennC$ nC$ppC$imistC6llC$, putsasin USB-hiirikoodin pois. TC$mC$ tekee moottorista kevyen ja luotettavan. Nauti App-arkkitehtuurista Mene katsomaan ruutua (VNC tai /vga_dump). Tapahtuu kaksi tC$ysin uutta asiaa: SilkinpehmeC$ liike: Voit painaa Spacea ja raahata ikkunoita tai kameraa ympC$riinsC$ (WASD). Et nC$e enC$C$ minkC$C$nlaista vC$lkkymistC$ reunoilla tai tekstissC$, koska nC$yttC6C6n kosketaan vain sieltC$ missC$ pikseli aidosti muuttuu. Kapseloitu Sovellus: Hauki Physics -ikkunan sisC$llC$ sataa keltaista hiekkaa. Sovellus itse ei tiedC$ mitC$C$n HDM:n koordinaatistosta, hiirestC$ tai kamerasta. Se sai init-vaiheessa oman w ja h kokoisen taulukon, se pyC6rittC$C$ lokaalia logiikkaansa, ja HDM hoitaa sen "kC$C$ntC$misen" oikeaan paikkaan ruudulle! Jos tC$mC$ app-arkkitehtuuri toimii vakaasti, meillC$ on tC$ydellinen alusta rakentaa se "Native Shell" tai jopa tekoC$lyn ohjaama selaimen tynkC$ The Meshin yli suoraan nC$ihin ikkunoihin. Kokeile ihmeessC$ raahata tuota hiekkaikkunaa kameran rajojen yli, se leikkaantuu tC$ydellisesti! [HAUKI-X86] /os_run DESK4F.JS [HAUKI-X86] === HAUKI OS === [HAUKI-X86] > [HAUKI-X86] [GUI] Ladataan HDM V4.1 (ES5/Compositor)! [GEM-EXEC] echo '/vga_dump' | x-console nc send-stdin echo '/vga_dump' | x-console nc send-stdin [HAUKI-X86] /vga_dump Mahtavaa! [HAUKI-X86] /vga_dump [HAUKI-X86] [HAUKI-X86] +------------------------------------------------------------------ --------------+ [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.... Ohjaus ...................................................... ..............| [HAUKI-X86] |... ........................................... ..............| [HAUKI-X86] |... VGA Compositor ......... Hauki Physics ................... ..............| [HAUKI-X86] |... ........ .................| [HAUKI-X86] |... WASD : Hiiri ........ .................| [HAUKI-X86] |... Space : Klikkaa ........ .................| [HAUKI-X86] |... Nuoli : Kamera ........ .................| [HAUKI-X86] |... ........ .................| [HAUKI-X86] |... Valkymaa = 0% ........ .................| [HAUKI-X86] |............................... .................| [HAUKI-X86] |............................... .................| [HAUKI-X86] |............................... .................| [HAUKI-X86] |............................... + .................| [HAUKI-X86] |............................... . ... ... .................| [HAUKI-X86] |.................................... ....... ... ......... .................| [HAUKI-X86] |............................................................. .................| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] |.................................................................. ..............| [HAUKI-X86] +------------------------------------------------------------------ --------------+