Díky za další díl pro mne velmi objevného seriálu. Jak jsem tehdy nechtěl s PC HW na nízké úrovni nic mít a rád jsem se od něj nechal odstínit Linuxem, tak mě teď zpětně spousta věcí překvapuje. Tady např. to chybějící VBI. Rozhlédl jsem se po internetu a opravdu jsem našel, že ačkoliv teoreticky měly VGA karty podporovat VBI stejně jako EGA, tak ve skutečnosti na to u většiny klonů od různých výrobců nebyl spoleh. Jinými slovy, dovedu si představit, že hry na to rozhodně spoléhat nemohly. Jak se to tedy v praxi řešilo? I ten obyčejný double buffering? Prostě se fakt čekalo ve smyčce na CPU?
Možná to vidím všechno moc složitě, protože jsem v zajetí zkušeností s 8bit ATARI, kde se masivně využívalo supermocných možností ANTIC, takže nevím, jak se to dělalo na jiných HW platformách.
no Antic je oproti tomuto systému hodně vepředu. Tam nějaký split screen jde řešit klidně několikrát na jedné obrazovce, stejně jako nezávislý scrolling těchto částí. Systém, který opravdu posouval Atárko dopředu (společně s režimy 12 a 13).
Na CPU se čekalo při double bufferingu. Při tripple bufferingu se mohla mezitím počítat další scéna (tam kde to mělo význam) a čekalo se max až potom. I proto mám raději grafické režimy se 70 Hz, kde to přece jen "odsejpalo" trošku rychleji, než u 60 Hz (320x240, 320x480).
Dodnes na kartách se nastavuje, zda je nutné čekat na v-sync
V začátcích tam byl ještě jeden problém. Pokud člověk nastavil offset, tak ten se aplikoval až při návratu paprsku. Pokud člověk nepočkal, a začal klasickým smazáním back bufferu pro nakreslení scény, tak si nemusel všimnout, že stále ještě maže front buffer. Výsledkem bylo blikání a pokud framerate renderingu byl nižší než framerate obrazovky, pak typicky problikávala černá.
Proto i DOOM používá triple buffering, kdy front buffer je vidět, první back buffer je připraven ke zobrazení a do druhého back bufferu se maluje.
Čekání CPU na vsync zas takový problém není. Obrazovka má 70Hz a často z bídou dosahovaly polovic na běžném PC. Já byl rád, když mi DOOM jel 20fps. Tedy většinu času se strávilo renderingem a game logic a jen krátký okamžik ve smyčce na čekání vsync. Případně při triple bufferingu se nečekalo, tedy za předpokladu, že fps hry nebylo vyšší než frekvence monitoru
Novější karty pak uměly přepínat buffery za běhu, tedy změna byla aktivní okamžikem přepnutí a čekání nebylo třeba. Dnes tedy triple buffering moc nemá smysl, pokud tedy člověku nevadí "trhání obrazu" při rychlém pohybu, kdy k přepnutí dojde uprostřed obrazovky. Tam pak triple buffering smysl má spolu s vsyncem
Jo, ty pinbally ;) Furt jsem si říkal, jak to dělaj. Teď je to jasný. Celej stůl v jedný obrazovce se "scrollingem zadarmo" a druhej screen se simulací displeje se skóre (kde se navíc ještě spojilo příjemné s užitečným - ten rastr, kdy každý druhý pixel vertikálně i horizontálně byl vynechán, dokázal uspořit docela dost dat).
Jinak mám doma ještě někde schovaný PCPRO, což byl takový placený diagnostický nástroj pro výrobce PC sestav (jméno výrobce je tam někde vkódováno jako „vodoznaková ochrana proti kopírování“), a myslím, že právě v něm je jeden test, kde je v běžném textovém režimu split screen a jedna půlka se posunuje horizontálně a druhá vertikálně, samozřejmě s jemností na jeden pixel, plus ta jedna půlka ještě dělá scrolling přes tu druhou.
20. 8. 2024, 15:16 editováno autorem komentáře
Já mám dojem, že to tak mají odjakživa: helloworld začíná i končí zaklínáním systému a uprostřed jsou jedna nebo dvě instrukce, které zařídí, že se vytiskne Hello world! Ale chápu to, že to tak mají: já když navrhuju nebo stavím hardware, který budu programovat, taky nemyslím na to, aby to šlo programovat snadno.