Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Prostředek vyrovnávací paměti je kolekce plně zadaných dat seskupených do prvků. Vyrovnávací paměti můžete použít k ukládání široké škály dat, včetně vektorů pozice, normálních vektorů, souřadnic textur ve vyrovnávací paměti vrcholu, indexů ve vyrovnávací paměti indexu nebo stavu zařízení. Prvek vyrovnávací paměti se skládá z 1 až 4 komponent. Prvky vyrovnávací paměti můžou obsahovat zapouzdřené datové hodnoty (například R8G8B8A8 povrchové hodnoty), jedno 8bitové celé číslo nebo čtyři 32bitové hodnoty s pohyblivou desetinnou čárkou.
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. Všechny typy vyrovnávací paměti jsou zapouzdřeny rozhraním ID3D11Buffer.
Vyrovnávací paměť vrcholů
Vyrovnávací paměť vrcholu obsahuje data vrcholů použitá k definování vaší geometrie. Data vrcholu zahrnují souřadnice polohy, barevná data, data souřadnic textury, normální data atd.
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.
Vyrovnávací paměť vrcholů častěji obsahuje všechna data potřebná k úplnému určení 3D vrcholů. Příkladem může být vyrovnávací paměť vrcholů, která obsahuje polohu vrcholu, normální souřadnice a souřadnic textury. Tato data jsou obvykle uspořádaná jako sady prvků vrcholů, jak je znázorněno na následujícím obrázku.
Tato vyrovnávací paměť vrcholů obsahuje data o vrcholech; každý vrchol ukládá tři prvky (souřadnice pozice, normálu a texturové souřadnice). Pozice a normální hodnoty jsou obvykle zadané pomocí tří 32bitových plovoucích objektů (DXGI_FORMAT_R32G32B32_FLOAT) a souřadnic textury pomocí dvou 32bitových plovoucích objektů (DXGI_FORMAT_R32G32_FLOAT).
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. Posun můžete zadat pomocí ID3D11DeviceContext::IASetVertexBuffers metodou.
- BaseVertexLocation – hodnota přidaná ke každému indexu před načtením vrcholu z vrcholového bufferu.
Před vytvořením vyrovnávací paměti vrcholů je nutné definovat jeho rozložení vytvořením rozhraní ID3D11InputLayout; to se provádí voláním metody ID3D11Device::CreateInputLayout. Po vytvoření objektu input-layout jej můžete svázat s fázi input-assembler voláním ID3D11DeviceContext::IASetInputLayout.
Chcete-li vytvořit vyrovnávací paměť vrcholů, zavolejte ID3D11Device::CreateBuffer.
Indexový buffer
Vyrovnávací paměti indexu obsahují celočíselné posuny do vyrovnávacích pamětí vrcholů a slouží k efektivnějšímu vykreslení primitiv. Vyrovnávací paměť indexu obsahuje sekvenční sadu 16bitových nebo 32bitových indexů; každý index se používá k identifikaci vrcholu v vyrovnávací paměti vrcholu. Indexový buffer lze vizualizovat jako na následujícím obrázku.
ilustrace vyrovnávací paměti indexu
Sekvenční indexy uložené ve vyrovnávací paměti indexu se nacházejí s následujícími parametry.
- Posun – počet bajtů od základní adresy bufferu indexu. Posun je zadán do metody ID3D11DeviceContext::IASetIndexBuffer.
- StartIndexLocation – určuje první prvek indexového bufferu na základní adrese a offset poskytnutý ve IASetIndexBuffer. Počáteční umístění je zadáno do metody ID3D11DeviceContext::DrawIndexed nebo ID3D11DeviceContext::DrawIndexedInstanced a představuje první index k vykreslení.
- IndexCount – počet indexů, které se mají vykreslit. Číslo je zadáno do metody DrawIndexed
Začátek vyrovnávací paměti indexu = základní adresa vyrovnávací paměti indexu + posun (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.
Chcete-li vytvořit vyrovnávací paměť indexu, zavolejte ID3D11Device::CreateBuffer.
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.
Každý prvek ukládá konstantu s jednou až čtyřmi komponenty, což je určeno formátem uložených dat. Chcete-li vytvořit konstantní vyrovnávací paměť shaderu, zavolejte ID3D11Device::CreateBuffer a zadejte D3D11_BIND_CONSTANT_BUFFER jako součást výčtu typu D3D11_BIND_FLAG.
Konstantní vyrovnávací paměť může používat pouze jeden příznak připojení (D3D11_BIND_CONSTANT_BUFFER), který nelze kombinovat s žádným jiným příznakem připojení. Pro připojení konstantního bufferu shaderu k pipeline zavolejte jednu z následujících metod: ID3D11DeviceContext::GSSetConstantBuffers, ID3D11DeviceContext::PSSetConstantBuffersnebo ID3D11DeviceContext::VSSetConstantBuffers.
Ke čtení vyrovnávací paměti pro konstanty shaderu ze shaderu použijte načítací funkci HLSL (například, Load). 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.
Související témata