Šířka vs. Rozteč (Direct3D 9)
I když se termíny šířky a rozteče často používají neformálně, mají velmi důležité a zřetelně odlišné významy. V důsledku toho byste měli porozumět významům jednotlivých hodnot a interpretovat hodnoty, které Direct3D používá k jejich popisu.
Direct3D používá D3DSURFACE_DESC strukturu k přenosu informací popisujících povrch. Mimo jiné je tato struktura definována tak, aby obsahovala informace o rozměrech povrchu a také o tom, jak jsou tyto rozměry reprezentovány v paměti. Struktura používá členy Výška a Šířka k popisu logických rozměrů povrchu. Oba členy se měří v pixelech. Hodnoty Výšky a šířky pro povrch 640 x 480 jsou tedy stejné bez ohledu na to, jestli se jedná o 8bitovou plochu nebo 24bitovou plochu RGB.
Když zamknete povrch pomocí metody IDirect3DSurface9::LockRect, metoda vyplní D3DLOCKED_RECT strukturu, která obsahuje výšku povrchu a ukazatel na uzamčené bity. Hodnota člena Rozteč popisuje výšku paměti povrchu, označovanou také jako stride. Rozteč je vzdálenost mezi dvěma adresami paměti, které představují začátek jedné rastrové čáry a začátek dalšího rastrového řádku. Vzhledem k tomu, že se rozteč měří v bajtech místo pixelů, má povrch 640x480x8 velmi odlišnou hodnotu sklonu než povrch se stejnými rozměry, ale jiným formátem pixelů. Kromě toho hodnota rozteče někdy odráží bajty, které má Direct3D rezervovanou jako mezipaměť, takže není bezpečné předpokládat, že výška je pouze šířka vynásobená počtem bajtů na pixel. Místo toho vizualizovat rozdíl mezi šířkou a výškou, jak je znázorněno v následujícím diagramu.
V tomto diagramu jsou přední vyrovnávací paměť i zadní vyrovnávací paměť 640x480x8 a mezipaměť je 384x480x8.
Při přímém přístupu k povrchům dbejte na to, abyste zůstali v paměti přidělené rozměrům povrchu a zůstali mimo jakoukoli paměť vyhrazenou pro mezipaměť. Pokud navíc uzamknete jenom část povrchu, musíte zůstat uvnitř obdélníku, který určíte při zamknutí povrchu. Pokud tyto pokyny nebudete dodržovat, budou mít nepředvídatelné výsledky. Při vykreslování přímo do paměti povrchu vždy používejte výšku vrácenou metodou IDirect3DSurface9::LockRect. Nepředpokládáme, že je rozteč založený výhradně na režimu zobrazení. Pokud vaše aplikace funguje na některých adaptérech zobrazení, ale vypadá zkomoleně na jiných, může to být příčinou problému.
Další informace najdete v tématu Přímý přístup k paměti surface (Direct3D 9).
Související témata