Úvod do HGFX - ZX-Planar 3. díl =============================================================== Ve třetí a čtvrté části úvodu do HGFX opustíme teorii planaru a povíme si o několika šikovných drobnostech tohoto grafického rozšíření. 1. Nelineární vs. lineární uspořádání paměti. Zvláštní způsob řazení obrazových dat u ZX Spectra je jasně patrný při pomalém nahrávání ZX-screenu z pásky. Linky jsou vykreslovány po třetinách obrazovky v pořadí linek 0, 8, 16, ... až 56, a po nich následují linky 1, 9, ... až 57 atd. ZX Spectrum bitmap structure 1st line ... byte 0 to 31 2nd line ... byte 256 to 287 ... 8th line ... byte 32 to 63 9th line ... byte 288 to 319 ... Aby HGFX bylo snadno použitelné s téměř každým dosavadním programem pro ZX Spectrum, má defaultně nastavené toto původní nelineární uspořádání videoram. Pokud nepotřebujeme kompatibilitu se ZX-screenem, zkusme lineární uložení paměti. Umožní to úsporné a rychlé operace typu kopírování částí screenu a DMA přenosy, třeba posuny screenu o jeden pixel. HGFX Linear video memory 1st line ... byte 0 to 31 2nd line ... byte 32 to 63 3rd line ... byte 64 to 95 ... 2. Transparentnost Původní ZX-screen s atributy může být zachován i při zapnutém HGFX. Pokud povolíme transparenci, ZX-screen bude zobrazován jakoby pod vrstvou HGFX a bude vidět jen tam, kde má HGFX grafika nastavenu indexovou barvu č. 0. S HGFX videoram nastavenou defaultně, od 16384, kreslíme současně do ZX videoram i do videopaměti HGFX. Buffer HGFX má však v zobrazení přednost a není-li zapnuta transparence, vždy zastíní atributovu ZX grafiku svou barvou. Zachování ZX-screenu souběžně s HGFX ukáže své kouzlo při úpravě programů a her pro HGFX. Ne všechny grafické prvky je ale nutno převádět do HGFX, např. herní pozadí, to by mohlo být navíc velmi pracné. 3. Offsety Na offsety si určitě vzpomenou ti, kdo programovali v Beta Basicu a používali systémové proměnné XOS a YOS. My ostatní si zapamatujme prostou definici, že offset nastavuje pozici kreslení na obrazovce. Souřadnice X a Y v pixlech jsou v systému HGFX dány takto: --------------------------------------------------------------- | X,Y: 0,0 X,Y: 255,0 | | adr. 16384 adr. 16415 | | | | 256 pixels, 32 bytes per line | | | | | | | | 192 lines | | 192*32 = 6144 bytes | | | | | | | | | | | | | | X,Y: 0,191 X,Y: 255,191| | adr. 22496 adr. 22527 | --------------------------------------------------------------- Příklad 1: Nastavíme OffsetX=0, OffsetY=16 a vykreslíme znak do videoram. Uložíme první bajt na adresu 16384, další bajt na 16416 (16384+32) atd. Znak se na obrazovce zobrazí tak, jako bychom tiskli pomocí basicového PRINT AT 2,0; Příklad 2: Tisk písmen o šířce 6 pixelů. Nastavíme offsety na 0,0. Tiskneme už klasicky, jako v prvním příkladu na adresu 16384. Souřadnice pro druhé písmeno nastavíme také offsetem, dáme OffsetX na 6, a tiskneme... zase na adresu 16384 (?! jo, skutečně odpadá nutnost přepočítat souřadnice na bajty a bity přesného umístění v paměti ani není třeba rolovat bitové předlohy znaků). Pro třetí znak nastavíme OffsetX na 12 a opět tiskneme na 16384. Takto pokračujeme se všemi znaky. Další příklady si už jistě představíte sami. Úspora strojového času je při použití offsetů ohromná. Ať už se jedná o práci s fonty proporcionálními (či s nestandarní šířkou 4 - 7 pixelů) nebo o pohyblivou grafiku. Do příští kapitoly o HGFX si zkusme spočítat, kolik nám offsety ušetří námahy při vykreslení sprajtů na jiné pozice než jsou násobky osmi. A zvídavým čtenářům lze do některé z expertních kapitol napovědět, že offsety umí překvapit, např. mohou být záporné a třeba nám pomůžou s HiRes grafikou. :-O