Sdílet prostřednictvím


Úvod do vyrovnávacích pamětí

Prostředek vyrovnávací paměti je kolekce dat, která jsou plně specifikována a seskupena do prvků. Vyrovnávací paměti ukládají data, jako jsou souřadnice textur ve vyrovnávací paměti vrcholů , indexy ve vyrovnávací paměti indexů , data konstant shaderu v konstantní vyrovnávací paměti , vektory pozic, normální vektory nebo stavy zařízení.

Prvek vyrovnávací paměti se skládá z 1 až 4 komponent. Prvky vyrovnávací paměti mohou obsahovat sbalené datové hodnoty (například hodnoty povrchů R8G8B8A8), jedno 8bitové celé číslo nebo čtyři 32bitové plovoucí číselné hodnoty.

Vyrovnávací paměť se vytvoří jako nestrukturovaný prostředek. Vzhledem k tomu, že je nestrukturovaná, vyrovnávací paměť nemůže obsahovat žádné úrovně mipmap, nemůže být filtrována během čtení a nemůže být použita s vícenásobným vzorkováním.

typy vyrovnávací paměti

Níže jsou uvedeny typy prostředků vyrovnávací paměti podporované Direct3D 11.

vyrovnávací paměť vrcholů

Vertex buffer obsahuje data vrcholů použitá k definování vaší geometrie. Vrcholová data zahrnují souřadnice polohy, barevná data, data souřadnic textury, normálová data a tak dále.

Nejjednodušším příkladem vyrovnávací paměti vrcholů je taková, která obsahuje pouze data polohy. Dá se vizualizovat jako na následujícím obrázku.

ilustrace vyrovnávací paměti pro vrcholy, která obsahuje údaje o pozici

Častěji obsahuje vyrovnávací paměť vrcholů všechna data potřebná k plnému specifikování 3D vrcholů. Příkladem může být vyrovnávací paměť vrcholů, která obsahuje polohu pro každý vrchol, normálové vektory a souřadnice textury. Tato data bývají obvykle uspořádána jako sady prvků pro každý vrchol, jak je zobrazeno na následujícím obrázku.

ilustrace vyrovnávací paměti vrcholu, která obsahuje polohová, normálová a texturová data

Tento vyrovnávací buffer obsahuje data o jednotlivých vrcholech; každý vrchol ukládá tři prvky (pozici, normálu a texturové souřadnice). Pozice a normály se obvykle zadávají pomocí tří 32bitových plovoucích bodů a souřadnice textury pomocí dvou 32bitových plovoucích bodů.

Pokud chcete získat přístup k datům z vyrovnávací paměti vrcholů, potřebujete vědět, ke kterému vrcholu se má přistupovat, a navíc následující další parametry vyrovnávací paměti:

  • Posun – počet bajtů od začátku vyrovnávací paměti k datům pro první vrchol.
  • BaseVertexLocation – počet bajtů od posunu k prvnímu vrcholu používanému příslušným voláním kreslení.

Než vytvoříte vyrovnávací paměť pro vrcholy, musíte nejprve definovat její rozložení. Po vytvoření objektu rozložení vstupu jej svážete s fází vstupního assembleru (IA).

vyrovnávací paměť indexu

Indexové vyrovnávací paměti obsahují celočíselné posuny ve vyrovnávacích pamětech vrcholů a slouží k efektivnějšímu vykreslování primitiv. Indexový buffer obsahuje sekvenční sadu 16bitových nebo 32bitových indexů; každý index se používá k identifikaci vrcholu ve vyrovnávací paměti vrcholů. Indexový buffer je možné vizualizovat jako na následujícím obrázku.

ukázka obrázku vyrovnávací paměti indexu

Po sobě jdoucí indexy uložené v indexovém bufferu jsou umístěny s následujícími parametry:

  • Offset – počet bajtů od základní adresy indexového bufferu.
  • StartIndexLocation – určuje počáteční prvek vyrovnávací paměti indexu ze základní adresy a offsetu. Počáteční umístění představuje první index, který se má vykreslit.
  • IndexCount – počet indexů, které se mají vykreslit.

Začátek vyrovnávací paměti indexu = Základní adresa vyrovnávací paměti indexu + Offset (bajty) + StartIndexLocation * ElementSize (bajty);

V tomto výpočtu je ElementSize velikost každého prvku vyrovnávací paměti indexu, což je buď dva, nebo čtyři bajty.

konstantní vyrovnávací paměť

Konstantní buffer umožňuje efektivní poskytování dat konstant shaderu do potrubí. K uložení výsledků fáze datového výstupu můžete použít konstantní vyrovnávací paměť. Pokud jde o koncepci, konstantní vyrovnávací paměť vypadá stejně jako vyrovnávací paměť pro vrcholy s jedním prvkem, jak je znázorněno na následujícím obrázku.

ilustrace vyrovnávací paměti pro konstanty shaderu

Každý prvek ukládá konstantu s 1 až 4 komponentami, určenou formátem uložených dat.

Konstantní vyrovnávací paměť může používat pouze jeden příznak vazby, který nelze kombinovat s žádným jiným příznakem vazby.

Ke čtení konstantního bufferu shaderu ze shaderu použijte načítací funkci HLSL. Každá fáze shaderu umožňuje až 15 vyrovnávacích pamětí shaderu; každá vyrovnávací paměť může obsahovat až 4096 konstant.

Vertexové a indexové buffery