Opět kousek historie, kterou jsem měl možnost si osobně vyzkoušet. Vzpomínám i na různé DOSové "VESA rezidenty" suplující ten VBE.
Moje první grafika byla OAK cosi do ISA slotu s 512 kB paměti, když jsem do toho kdysi slavnostně přidal ještě jednou tolik, mohl jsem vykreslit obrázek v 1024×768×256, ale trvalo to dlouho, bylo to viditelně pomalé. I ve Win3.x, když se tomu dal driver, to kreslilo pohyb kurzoru "viditelně", o přesunu a kreslení oken ani nemluvě. Bylo to typické demo typu "jde to, ale dře to, pročež jsem pochopil, proč se tam srandardně dávalo jen 512k (a často jen 256k). Ale možnost dát tam 1M byla.
Na 2/386 sme si nekdy v roce 92 (+-) hrali s 3D animacema. Samozrejme ze pokud se to vykreslovalo "SW" cestou, bylo to pomale a videl si jak se to prekresluje. Ale uz od dob 8mibitu existuje figl, ze se to nejdriv vykresli, a pak se prepne pametova banka. Coz je "instantni" vec (stihne se to za 1 refresh zobrazovadla).
Osobne sem si s podobnejma volovinama hral na atarku. Slo udelat zcela plynulou animaci.
Samo to vyzadovalo znat ten HW, a primo do nej zapisovat, zadny ovladace nebo apicka na to nebyly.
Ta defaultni ramka na tech kartach bohate stacila pro rozliseni ktery se pouzivaly i nekolikrat. Dneska ti soudruzi prodaji grafarnu co ma 24GB, gamesa si to klidne zkousne cely (D4 napr) ale videt to nikde neni.
V době, o které je řeč v článku, toho karty zase tak moc neuměly, takže paměť karty k ničemu jinému ani využít nešlo. Ale ono jí ze začátku až takový přebytek nebyl, např. v novém počítači z prosince 1992 jsem měl 1MB, takže rozlišení 1024x768 šlo používat jen v osmitibovém barevném režimu (a tím myslím 8 bitů dohromady, ne 8 na kanál). I později s už o trochu lepší kartou, která měla 2MB, jsem musel snížit rozlišení na 800x600, pokud bych chtěl 24-bitové barvy.
Ses mimo, chybi ti v tom treti cislo. Ono to taky muze byt B&W. A dokonce ani to neni omezeni. Kdyz vemes, ze zobrazovadlo ti davat 50Hz, a budes prepinat jednobarevny obrazky, tak se tobe slozej jako jeden vicebarevnej.
Presne takhle se na tom atarku dalo barevne kreslit pri maximalnim rozliseni. (tzn mimo vsechny standardni rezimy). Standardne byl totiz ten rezim jen monochromatickej.
Double buffering - to je to prepinanie "pamatovych baniek" (teda v mode x len zmena plane, z ktoreho sa zobrazoval buffer) sa ako technika pouziva dodnes. Pouziju sa dva buffre, do jedneho sa kresli, druhy sa zobrazuje, ked dokreslim, prehodim. Napr. vo Vulkane sa to dnes nazyva "swap chain". Gnome je dnes ochotne pouzivat na pomalsom hardveri aj tripple buffer, aby to moc nesklbalo ked sa nestihne dokreslit vcas, ale to samozrejme zvysuje latenciu.
Dalsia optimalizacia bola minimalizovat prenos medzi systemovou ram a videoram, ked isa, ale aj neskor vlb a pci boli uzke miesta, takze vo videoram sa menilo len to, co bolo treba. Kvoli tomu sa sledovali "dirty rectangles" (zmeny voci predoslemu stavu) a kopirovali sa iba tie. Jedna z prvych hw akceleracii bola bitblt (a odvodene stretchblt), ktore prehodili starost o prenos z ram do videoram na grafiku.
Kopírování SystemRAM --> VRAM bylo na prvních PC, jako 286, pomalé. Nicméně techniky byly (viz uvedené dirty rectangles). Známá je v tomto hra Stunt Island, kde autor renderingu drží shadow buffer v SystemRAM a vůči němu porovná pixely v novém obraze v SystemRAM a po sběrnici pošle do VRAM jen ty nutné. Hra tak byla zcela plynulá i na 286. Grafika hry je totiž flat-shaded, jednoduchý stupňovitý gradient na obloze a letadla zabírají jen zlomek pixelů (měla na tu dobu ohromující smooth-shading, plynulé gradienty).
Uvážíme-li, že přenosová rychlost 16bitové ISA sběrnice byla 16 MB za sekundu, jeden snímek zabere 0.75 megabajtu, tak to vychází maximálně na 21 plných snímků za vteřinu, a to je počítané bez jakékoliv režie. Není divu, že se Win 3.X vykreslovala pomalu. Systém neměl na takovou porci obrazových dat dostatečnou propustnost.
Režim 640x480x256 byl na dané sestavě asi mnohem použitelnější.
Taky bych nechtěl vidět ostrost obrazu v 1024x768.
10. 6. 2025, 16:55 editováno autorem komentáře
Ne, nebylo. Na 8mibitech byla cast ramky namapovana na nejaky zobrazovani, a co se do ty casti zapsalo se instantne zobrazilo. Kdyz se objevily extra grafiky se svoji pameti, tak ta byla namapovana do adresniho prostoru, takze se dala primo adresovat, potazmo se dala adresovat neprimo pres nejaky prepinani ruznych bitu ale nikdy se nic nikam nekopirovalo.
To by to totiz vubec nefungovalo.
Taky byla RAMka ku_evsky drahá. A je jedno, jestli ty RAM čipy byly na desce nebo grafické kartě. Double buffering se tak používal jen ve hrách, kde ale i z důvodu rychlosti kreslily v menším rozlišení, než se pracovalo, např. plocha Windows. Kreslení bylo přímý zápis pixelů do VRAM (později ještě akcelerovaných operací, jako blitter).
Už jsem se setkal i s tím, že si někdo myslel, že už Windows 3.x si držel bitmapy otevřených oken. Tehdy byla paměť drahá, ale CPU stačil (protože neběžely operace v pozadí jako dnes, lidi taky byly trpělivější - furt byl vidět rozdíl rychlosti oproti analogovému světu). Takže se jen řeklo oknům při každé příležitosti, aby obsah znovu vykreslily.
Přesně tohle si pamatuji z jednoho ze svých několika programů pro Windows 3.x.
Jako na potvoru to kreslení byla hlavní část programu, navíc nijak efektivně napsaná, čili pomalá. A stačilo pohnout oknem nebo kousek překrýt - a kreslilo se to celé znova!
Řešením bylo po vykreslení sejmout bitmapu, a pokud se neměnila velikost okna, tak při každé výzvě k překreslení ji položit zpět. Žralo to cennou RAMku, překreslení bylo vidět, ale i tak to bylo stokrát rychlejší, než to celé počítat a kreslit znova.
2panelový správce souborů Salamander 1.52, nebo jaká to verze byla strašně dlouho free (dnes už je asi i ta mnohem novější free), má dokonce v nastavení checkbox, zda má kreslit double buffered (aby postupné kreslení "neblikalo"). Váš program tedy taky mohl mít takové nastavení, případně autodetekce podle velikosti RAM 😉
12. 6. 2025, 22:05 editováno autorem komentáře
Windows posielaju WM_PAINT, resp X11 posiela XExposeEvent a v parametroch je, ktoru cast prekreslit. Teda nie je treba kreslit vsetko, ale staci tu cast, ktora bola "poskodena". Ked zacali aplikacie uploadovat na X server pixmapy namiesto pouzivania X primitiv, tak X server potom este isiel o kus dalej s XDamage extension.
Pruser je, ked sa to neda kreslit po castiach a treba cely buffer. Na to je potom dobre nakresleny buffer cachovat. Neskor to zacal aj Windows, aj X server cachovat na svojej strane. Programy renderovali svoje data do textury ktore nikdy neboli poskodene prekrytim inym oknom, takze display server si to vzdy vedel skomponovat sam.