Sdílet prostřednictvím


Stavové objekty (Direct3D 10)

V Režimu Direct3D 10 se stav zařízení seskupuje do objektů stavu, které výrazně snižují náklady na změny stavu. Existuje několik stavových objektů a každý z nich je navržený tak, aby inicializoval sadu stavů pro určitou fázi kanálu. Můžete vytvořit až 4096 každého typu objektu stavu.

Input-Layout State

Tato skupina stavu (viz D3D10_INPUT_ELEMENT_DESC) určuje, jak fáze vstupního assembleru čte data ze vstupních vyrovnávacích pamětí a sestavuje je pro použití pomocí shaderu vrcholů. To zahrnuje stav, například počet prvků ve vstupní vyrovnávací paměti a podpis vstupních dat. Fáze vstupního assembleru je v kanálu nová fáze, jejíž úlohou je streamování primitiv z paměti do kanálu.

Chcete-li vytvořit objekt input-layout-state, viz CreateInputLayout.

Stav rasterizátoru

Tato skupina stavu (viz D3D10_RASTERIZER_DESC) inicializuje rastrovou fázi. Tento objekt zahrnuje stav, například režimy výplně nebo kroucení, povolení nůžkového obdélníku pro výřez a nastavení parametrů s více razítky. Tato fáze rasterizuje primitiva na pixely a provádí operace, jako jsou výřezy a mapování primitiv na oblast zobrazení.

Chcete-li vytvořit objekt rasterizer-state, viz CreateRasterizerState.

Depth-Stencil State

Tato skupina stavu (viz D3D10_DEPTH_STENCIL_DESC) inicializuje část hloubkového vzorníku fáze fúzi výstupu. Konkrétně tento objekt inicializuje hloubku a testování vzorníku.

Chcete-li vytvořit objekt hloubkového stavu vzorníku, viz CreateDepthStencilState.

Stav blendu

Tato skupina stavu (viz D3D10_BLEND_DESC) inicializuje část fáze fúzi výstupu.

Chcete-li vytvořit objekt blend-state, viz CreateBlendState.

Stav sampleru

Tato skupina stavu (viz D3D10_SAMPLER_DESC) inicializuje objekt sampleru. Objekt sampleru se používá ve fázích shaderu k filtrování textur v paměti.

Rozdíly mezi Direct3D 9 a Direct3D 10:

  • V Režimu Direct3D 10 už objekt sampleru není vázán na konkrétní texturu, ale popisuje, jak provádět filtrování u jakéhokoli připojeného prostředku.

 

Chcete-li vytvořit objekt sampler-state, viz CreateSamplerState.

Důležité informace o výkonu

Návrh rozhraní API pro použití stavových objektů vytváří několik výhod výkonu. Patří sem ověřování stavu při vytváření objektu, povolení ukládání stavových objektů do mezipaměti v hardwaru a výrazně se snižuje množství stavu, které se předává během volání rozhraní API pro nastavení stavu (předáním popisovače objektu stavu místo stavu).

Pokud chcete dosáhnout těchto vylepšení výkonu, měli byste vytvořit stavové objekty při spuštění aplikace, dobře před smyčkou vykreslení. Objekty stavu jsou neměnné, to znamená, že po jejich vytvoření není možné je změnit. Místo toho je musíte zničit a znovu vytvořit. Chcete-li se vypořádat s tímto omezením, můžete vytvořit až 4096 každého typu stavových objektů. Můžete například vytvořit několik objektů sampleru s různými kombinacemi stavu vzorkovníku. Změna stavu sampleru se pak provede voláním příslušného rozhraní SET API, které předá popisovač objektu (na rozdíl od stavu vzorkovníku). Tím se výrazně sníží režijní náklady během každého snímku vykreslení pro změnu stavu, protože počet volání a množství dat se výrazně sníží.

Alternativně můžete použít systém efektů, který automaticky spravuje efektivní vytváření a zničení stavových objektů pro vaši aplikaci.

funkce rozhraní API (Direct3D 10)