Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Nuta
W przypadku aplikacji w systemie Windows 10 zalecamy używanie interfejsów API Windows.UI.Composition zamiast directComposition. Aby uzyskać więcej informacji, zobacz Modernizuj aplikację klasyczną przy użyciu warstwy wizualnej.
W tym temacie opisano typy powierzchni, które obsługuje program Microsoft DirectComposition.
-
powierzchni logicznej DirectComposition
- Aktualizowanie powierzchni logicznej
- zawieszanie aktualizacji na powierzchni logicznej
- wznawianie aktualizacji do powierzchni logicznej
- Zakończenie aktualizacji powierzchni logicznej
- Przykład użycia powierzchni logicznej
- powierzchni wirtualnej DirectComposition
- Tematy pokrewne
Powierzchnia logiczna DirectComposition
DirectComposition uwidacznia obiekt IDCompositionSurface reprezentujący powierzchnię kompozycji logicznej. Funkcja DirectComposition uwidacznia interfejsy API, których można użyć do tworzenia, aktualizowania i usuwania tych powierzchni logicznych. Każda powierzchnia może być skojarzona z co najmniej jedną wizualizacją. Aplikacja jest odpowiedzialna za zarządzanie okresem istnienia powierzchni logicznych.
Aktualizowanie powierzchni logicznej
Aplikacja może zaktualizować powierzchnię logiczną, wywołując BeginDraw i określając rozmiar i przesunięcie prostokąta na powierzchni logicznej, którą aplikacja chce zaktualizować. DirectComposition przydziela prostokąt określonego rozmiaru, a następnie zwraca powierzchnię i odpowiednie przesunięcie, które aplikacja musi rysować lub aktualizować. Limity prostokąta aktualizacji są powiązane z rozmiarem powierzchni. Na przykład prostokąt aktualizacji dla powierzchni 40-do-100 pikseli może być do (0,0,40,100). Ponadto region możliwy do aktualizacji jest wymuszany przez prostokąt ochrony. Ponieważ jednocześnie może istnieć tylko jeden prostokąt ochrony, jednocześnie można zaktualizować tylko jedną powierzchnię logiczną. BeginDraw zwraca kod błędu, jeśli endDraw lub SuspendDraw nie została wywołana po poprzednim wywołaniu BeginDraw. Aplikacja może dodać zatwierdzone wywołanie do BeginDraw do partii, ale nie zacznie obowiązywać, dopóki EndDraw nie zostanie wywołana i zatwierdzona.
Zawieszanie aktualizacji na powierzchni logicznej
Aplikacja, która musi zaktualizować różne powierzchnie, może wywołać SuspendDraw w bieżącej aktualizacji, a następnie wywołać BeginDraw, aby rozpocząć nową aktualizację. Funkcja Microsoft DirectComposition zezwala na wiele aktualizacji, ale tylko jedna może być aktywna naraz. Oznacza to, że musisz wywołać SuspendDraw lub EndDraw na jednej powierzchni przed wywołaniem BeginDraw w następnym. W przeciwieństwie do endDraw, zatwierdzona partia może zawierać powierzchnię, która znajduje się w stanie SuspendDraw, ale takie aktualizacje nie będą wyświetlane na ekranie do momentu wywołania EndDraw.
Wznawianie aktualizacji na powierzchni logicznej
Aplikacja może wznowić aktualizację powierzchni, która znajduje się w stanie SuspendDraw, wywołując ResumeDraw. Tę metodę można wywołać tylko na zawieszonej powierzchni.
Kończenie aktualizacji powierzchni logicznej
Wywoływanie EndDraw i Commit jest jedynym sposobem wyświetlenia zmian aktualizacji mapy bitowej na ekranie. Każde wywołanie EndDraw musi mieć odpowiednie wywołanie BeginDraw, aby usunąć prostokąt ochrony. Powierzchnia logiczna zachowuje wszystkie aktualizacje do momentu wywołania commit. Można również wywołać EndDraw na powierzchni, która znajduje się w stanie SuspendDraw, ponieważ EndDraw jest dorozumianym wznawianiem/końcem. Po wywołaniu EndDrawzaktualizowana zawartość zostanie wyświetlona na ekranie i odrzucona, aby pamięć aktualizacji mogła zostać ponownie użyta do późniejszej aktualizacji.
Przykład użycia powierzchni logicznej
W poniższym przykładzie opisano kroki wykonywane przez aplikację w przypadku utworzenia drzewa wizualnego składającego się z dwóch wizualizacji, a następnie konieczności zaktualizowania określonych regionów dwóch powierzchni logicznych skojarzonych z wizualizacjami:
- Utwórz urządzenie DirectComposition.
- Utwórz drzewo wizualne składające się z węzła głównego i wizualizacji 1 i 2.
- Utwórz powierzchnie logiczne 1 i 2.
- Wywołaj SetContent, aby skojarzyć powierzchnię logiczną z wizualizacjami 1 i 2.
- Wywołaj BeginDraw na pod prostokątie powierzchni logicznej 1.
- Zaktualizuj powierzchnię z przesunięciem zwróconym przez DirectComposition.
- Opcjonalne kroki:
- Wywołaj SuspendDraw na powierzchni logicznej 1.
- Wywołaj BeginDraw w podremisji powierzchni logicznej 2.
- Zaktualizuj powierzchnię z przesunięciem zwróconym przez DirectComposition.
- Wywołaj EndDraw na powierzchni logicznej 2.
- Wywołaj ResumeDraw na powierzchni logicznej 1.
- Zaktualizuj powierzchnię z przesunięciem zwróconym przez DirectComposition.
- Wywołaj EndDraw na powierzchni logicznej 1.
- Wywołaj commit.
Powierzchnia wirtualna DirectComposition
Funkcja DirectComposition uwidacznia interfejs IDCompositionVirtualSur face w celu reprezentowania powierzchni wirtualnej, która jest kolekcją powierzchni logicznych (kafelków) rozmieszczonych w stałej siatce z kafelkami o stałym rozmiarze. Aplikacja określa rozmiar tekstury wirtualnej w czasie tworzenia. Rozmiar określa granice dla powierzchni wirtualnej. Powierzchnię można skojarzyć z co najmniej jedną wizualizacją.
Po zainicjowaniu powierzchni wirtualnej nie jest ona wspierana przez rzeczywiste alokacje. Innymi słowy, nie przechowuje żadnych bitów. DirectComposition przydziela kafelki (czyli obiekty powierzchni kompozycji) po rozpoczęciu aktualizowania powierzchni przez aplikację. Aplikacja aktualizuje powierzchnię wirtualną, wywołując BeginDraw i określając region zainteresowania względem współrzędnych powierzchni wirtualnej. Następnie directComposition przydziela niezbędne kafelki do przechowywania aktualizacji i zwraca powierzchnię kompozycji i przesunięcie w celu aktualizacji.
Podobnie jak w przypadku powierzchni logicznych, można wywoływać BeginDraw, SuspendDraw, ResumeDraw i EndDraw na powierzchni wirtualnej. Ponadto funkcja DirectComposition uwidacznia metody, których można użyć do zmiany rozmiaru i przycinania istniejącej powierzchni wirtualnej.
Zmiana rozmiaru powierzchni wirtualnej
Metoda Resize zmienia granice powierzchni wirtualnej, co oznacza, że wszystkie nowe aktualizacje lub alokacje muszą mieścić się w granicach ustawionych przez nowy rozmiar. Aplikacja używa Resize, aby poinformować DirectComposition, że konkretny region powierzchni wirtualnej nie jest już potrzebny i można go odzyskać. Jeśli Zmień rozmiar zmniejsza powierzchnię wirtualną, aplikacja nie może już aktualizować regionów poza nowymi granicami.
Na poniższej ilustracji przedstawiono rozmiar powierzchni wirtualnej 3-by-3 zmieniony na 2-by-2. Czerwony region reprezentuje kafelki, które są odrzucane w ramach operacji zmiany rozmiaru, a pamięć jest odzyskiwane przez funkcję DirectComposition. Po zmianie rozmiaru aplikacja nie może wprowadzać aktualizacji do czerwonego regionu bez ponownego zmiany rozmiaru powierzchni wirtualnej.
Operacja zmiany rozmiaru jest wykonywana natychmiast. Funkcja DirectComposition nie czeka na wywołanie aplikacji Commit w celu dokonania aktualizacji zmiany rozmiaru. Załóżmy na przykład, że aplikacja wykonuje następującą sekwencję wywołań.
pVirtualSurface->Resize(0, 0);
pVirtualSurface->Resize(INT_MAX, INT_MAX);
pDevice->Commit();
W tym przykładzie aplikacja traci całą zawartość przy pierwszym zmianie rozmiaru. Drugi rozmiar nie ma wpływu, mimo że został wywołany przed commit. W tym przypadku na ekranie nic nie jest wyświetlane.
Przycinanie powierzchni wirtualnej
Metoda Trim identyfikuje region powierzchni wirtualnej, którego potrzebuje aplikacja. Nie zmienia on rozmiaru granic powierzchni wirtualnej, ale informuje directCompozycję, które powierzchnie logiczne muszą być obecnie przydzielone.
Na poniższej ilustracji zielony kwadrat to widok aplikacji. Aplikacja początkowo renderuje się na pierwszych sześciu kafelkach (niebieski) powierzchni wirtualnej (jasnoszary), które znajdują się w obszarze viewport. Ponieważ strona reprezentowana przez przewijanie powierzchni wirtualnej jest widoczna, aplikacja musi renderować ostatnie sześć kafelków. Aplikacja wywołuje Trim, aby wskazać, że region zdefiniowany przez ostatnie sześć kafelków to miejsce, w którym znajduje się zawartość, a reszta nie jest potrzebna w tej chwili. DirectComposition może następnie zdecydować się na odtwarzanie powierzchni logicznych, które pierwotnie reprezentowały pierwsze sześć kafelków (ciemnoszary).
powierzchni wirtualnej
Tematy pokrewne