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.
Poznámka
U aplikací ve Windows 10 doporučujeme místo DirectComposition používat rozhraní API pro Windows.UI.Composition. Další informace najdete v tématu Modernizace desktopové aplikace pomocívrstvy vizuálu .
Toto téma popisuje typy typů povrchů, které Microsoft DirectComposition podporuje.
- logické plochy DirectComposition
- virtuálního povrchu DirectComposition
- související témata
Logický povrch DirectComposition
DirectComposition zveřejňuje objekt IDCompositionSurface objekt, který představuje logickou plochu složení. DirectComposition zveřejňuje rozhraní API, která můžete použít k vytváření, aktualizaci a odstraňování těchto logických povrchů. Každý povrch může být přidružený k jednomu nebo více vizuálům. Aplikace zodpovídá za správu životnosti logických povrchů.
Aktualizace logické plochy
Aplikace může aktualizovat logickou plochu zavoláním BeginDraw a určením velikosti a posunu obdélníku na logické ploše, kterou chce aplikace aktualizovat. DirectComposition přidělí obdélník zadané velikosti a pak vrátí plochu a odpovídající posun, který aplikace potřebuje nakreslit nebo aktualizovat. Limity aktualizačního obdélníku jsou vázané na velikost povrchu. Například aktualizační obdélník povrchu o rozměrech 40×100 pixelů může být až (0 0 40 40 100). Aktualizovatelná oblast se také vynucuje obdélníkem stráže. Vzhledem k tomu, že najednou může být jen jeden obdélník ochrany, lze současně aktualizovat pouze jeden logický povrch. BeginDraw vrátí kód chyby, pokud EndDraw nebo SuspendDraw nebyl volána po předchozím volání BeginDraw. Aplikace může přidat potvrzené volání BeginDraw do dávky, ale neprojeví se, dokud EndDraw není volána a potvrzena.
Pozastavení aktualizací logické plochy
Aplikace, která potřebuje aktualizovat různé povrchy, může volat SuspendDraw na aktuální aktualizaci a potom zavolat BeginDraw zahájit novou aktualizaci. Microsoft DirectComposition umožňuje více aktualizací, ale najednou může být aktivní jenom jeden. To znamená, že potřebujete volat SuspendDraw nebo EndDraw na jednom povrchu před voláním BeginDraw na další. Na rozdíl od EndDrawmůže potvrzená dávka obsahovat povrch, který je ve stavu SuspendDraw, ale tyto aktualizace se na obrazovce nezobrazí, dokud EndDraw nebude volána.
Obnovení aktualizací logické plochy
Aplikace může obnovit aktualizaci povrchu, který je ve stavu SuspendDraw voláním ResumeDraw. Tuto metodu lze volat pouze na pozastavené ploše.
Ukončení aktualizací logické plochy
Volání EndDraw a commit je jediný způsob, jak zobrazit změny aktualizace rastru na obrazovce. Každé volání EndDraw musí mít odpovídající volání BeginDraw k odebrání ochranného obdélníku. Logická plocha zachová všechny aktualizace, dokud se potvrzení nevolá. Můžete také volat EndDraw na povrchu, který je ve stavu SuspendDraw, protože EndDraw je implicitní životopis/konec. Po volání EndDrawse aktualizovaný obsah zobrazí na obrazovce a zahodí se tak, aby paměť pro aktualizaci bylo možné znovu použít pro pozdější aktualizaci.
Příklad použití logické plochy
Následující příklad popisuje kroky, které by aplikace podnikla, pokud vytvořila vizuální strom skládající se ze dvou vizuálů, a pak je potřeba aktualizovat konkrétní oblasti dvou logických ploch přidružených k vizuálům:
- Vytvořte zařízení DirectComposition.
- Vytvořte strom vizuálu skládající se z kořenového uzlu a vizuálů 1 a 2.
- Vytvoření logických ploch 1 a 2
- Volání SetContent pro přidružení logické plochy k vizuálům 1 a 2.
- Volání BeginDraw na podúhelníku logické plochy 1.
- Aktualizujte povrch na posunu vrácené metodou DirectComposition.
- Volitelné kroky:
- Volání SuspendDraw na logické ploše 1.
- Volání BeginDraw na dílčím nákresu logické plochy 2.
- Aktualizujte povrch na posunu vrácené metodou DirectComposition.
- Volání EndDraw na logické ploše 2.
- Volání ResumeDraw na logické ploše 1.
- Aktualizujte povrch na posunu vrácené metodou DirectComposition.
- Volání EndDraw na logické ploše 1.
- Volání potvrzení.
Virtuální plocha DirectComposition
DirectComposition zveřejňuje rozhraní IDCompositionVirtualSurface představující virtuální povrch, což je kolekce logických ploch (dlaždic) uspořádaných v pevné mřížce s dlaždicemi s pevnou velikostí. Aplikace určuje velikost virtuální textury při vytváření. Velikost určuje hranice pro virtuální plochu. Povrch může být přidružený k jednomu nebo více vizuálům.
Když je virtuální plocha inicializována, není zajištěna skutečnými přiděleními. Jinými slovy, neudržuje žádné bity. DirectComposition přiděluje dlaždice (tj. povrchové objekty složení) po zahájení aktualizace povrchu aplikace. Aplikace aktualizuje virtuální plochu voláním BeginDraw a určením oblasti zájmu s ohledem na souřadnice virtuálního povrchu. DirectComposition pak přidělí potřebné dlaždice pro uložení aktualizace a vrátí povrch složení a posun k aktualizaci.
Stejně jako u logických ploch můžete volat BeginDraw, SuspendDraw, ResumeDraw a EndDraw na virtuální ploše. DirectComposition navíc zveřejňuje metody, které můžete použít ke změně velikosti a oříznutí existující virtuální plochy.
Změna velikosti virtuálního povrchu
Metoda Změnit velikost změní hranice virtuálního povrchu, což znamená, že všechny nové aktualizace nebo přidělení musí spadat do hranic nastavených novou velikostí. Aplikace používá Změnit velikost k tomu, aby directComposition řekl, že konkrétní oblast virtuálního povrchu už není potřebná a lze ji uvolnit. Pokud velikost zmenší virtuální plochu, aplikace už nemůže aktualizovat oblasti mimo nové hranice.
Následující obrázek znázorňuje prostorovou plochu 3 po 3 změně velikosti na 2 po 2. Červená oblast představuje dlaždice, které se zahodí v rámci operace změny velikosti a paměť se uvolní pomocí DirectComposition. Po změně velikosti nemůže aplikace znovu aktualizovat červenou oblast, aniž by znovu změnila velikost virtuálního povrchu.
povrchu
Operace změny velikosti se projeví okamžitě. DirectComposition nečeká, až aplikace zavolá Commit, aby se změna velikosti aktualizovala. Předpokládejme například, že aplikace provede následující posloupnost volání.
pVirtualSurface->Resize(0, 0);
pVirtualSurface->Resize(INT_MAX, INT_MAX);
pDevice->Commit();
V tomto příkladu aplikace ztratí veškerý obsah při první změně velikosti. Druhá změna velikosti nemá žádný vliv, i když byla volána před Potvrzení. V tomto případě se na obrazovce nic nezobrazí.
Oříznutí virtuálního povrchu
Metoda Trim identifikuje oblast virtuálního povrchu, kterou aplikace potřebuje. Nemění velikost hranic virtuálního povrchu, ale říká DirectComposition, které logické plochy aktuálně musí být přiděleny.
Na následujícím obrázku je zelený čtvereček oblast zobrazení aplikace. Aplikace se zpočátku vykreslí na prvních šest dlaždic (modrá) virtuálního povrchu (světle šedá), které jsou v oblasti zobrazení. Vzhledem k tomu, že se stránka reprezentovaná virtuálním povrchem posouvá, musí aplikace vykreslit posledních šest dlaždic. Aplikace volá Trim označující, že oblast definovaná posledními šesti dlaždicemi je místo, kde je obsah, a zbytek v tuto chvíli není potřeba. DirectComposition se pak může rozhodnout pro recyklaci logických povrchů, které původně představovaly prvních šest dlaždic (tmavě šedé).
povrchu
Související témata