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.
Aplikacja Direct3D zwykle wyświetla animowaną sekwencję, generując klatki animacji w buforach tylnego planu i prezentując je w sekwencji. Bufory zwrotne są zorganizowane w łańcuchy wymiany. Łańcuch wymiany to seria buforów, które „przerzucają się” na ekran jeden po drugim. Może to służyć do renderowania jednej sceny w pamięci, a następnie przerzucania sceny na ekran po zakończeniu renderowania. Pozwala to uniknąć zjawiska znanego jako rozdzieranie i umożliwia płynniejszą animację.
Każde urządzenie utworzone w usłudze Direct3D ma co najmniej jeden łańcuch wymiany. Podczas inicjowania pierwszego urządzenia Direct3D należy ustawić element BackBufferCount struktury D3DPRESENT_PARAMETERS, który informuje Direct3D o liczbie buforów zapasowych, które będą znajdować się w łańcuchu wymiany ramek. Wywołanie IDirect3D9::CreateDevice następnie tworzy urządzenie Direct3D i odpowiadający łańcuch wymiany.
W przypadku użycia IDirect3DDevice9::Present, aby zażądać operacji przerzucania powierzchni, wskaźniki na pamięć powierzchni dla przedniego bufora i buforów tylnych są zamieniane. Przełączanie odbywa się przez zmianę wskaźników używanych przez urządzenie wyświetlające do odwoływania się do pamięci, a nie przez kopiowanie pamięci obrazu. Gdy łańcuch przerzucania zawiera bufor przedni i więcej niż jeden bufor wsteczny, wskaźniki są przełączane w sposób okólny, jak pokazano na poniższym diagramie.
Można utworzyć dodatkowe łańcuchy wymiany dla urządzenia, wywołując IDirect3DDevice9::CreateAdditionalSwapChain. Aplikacja może utworzyć jeden łańcuch wymiany na widok i skojarzyć każdy łańcuch wymiany z określonym oknem. Aplikacja renderuje obrazy w buforze tylnym każdego łańcucha zamiany, a następnie przedstawia je indywidualnie. Dwa parametry, które IDirect3DDevice9::CreateAdditionalSwapChain przyjmuje, to wskaźnik do struktury D3DPRESENT_PARAMETERS oraz adres wskaźnika do interfejsu IDirect3DSwapChain9. Następnie można użyć IDirect3DSwapChain9::Present, aby wyświetlić zawartość następnego bufora tylnego na bufor przedni. Należy pamiętać, że urządzenie może mieć tylko jeden łańcuch zamian pełnoekranowych.
Dostęp do określonego buforu wstecznego można uzyskać, wywołując metody IDirect3DDevice9::GetBackBuffer lub IDirect3DSwapChain9::GetBackBuffer metody, które zwracają wskaźnik do interfejsu IDirect3DSurface 9, który reprezentuje zwracaną powierzchnię bufora wstecznego. Należy pamiętać, że wywołanie tej metody zwiększa wewnętrzną liczbę odwołań w interfejsie IDirect3DDevice9, dlatego po zakończeniu korzystania z tej powierzchni, należy wywołać interfejs IUnknown, w przeciwnym razie wystąpi wyciek pamięci.
Pamiętaj, że Direct3D przełącza powierzchnie przez zamianę wskaźników pamięci powierzchni w łańcuchu zamiany, a nie przez zamianę samych powierzchni. Oznacza to, że zawsze będziesz renderować do bufora tylnego, który zostanie wyświetlony jako następny.
Należy pamiętać o różnicy między operacją „flipowania”, wykonywaną przez sterownik adaptera wyświetlania, a operacją „Present” zastosowaną do łańcucha wymiany utworzonego za pomocą D3DSWAPEFFECT_FLIP.
Termin "przerzuć" konwencjonalnie oznacza operację, która zmienia zakres adresów pamięci wideo używanych przez adapter wyświetlania do generowania sygnału wyjściowego, powodując w ten sposób wyświetlanie zawartości wcześniej ukrytego buforu wstecznego. W Direct3D 9 termin jest często używany bardziej ogólnie do opisywania prezentacji tylnego bufora w każdej sekwencji wymiany utworzonej przy użyciu efektu zamiany D3DSWAPEFFECT_FLIP.
Chociaż takie operacje "Present" są prawie niezmiennie realizowane przez operacje przerzucania, gdy łańcuch swapujący jest pełnoekranowy, koniecznie muszą być realizowane przez operacje kopiowania, gdy łańcuch swapujący jest okienkowy. Ponadto sterownik adaptera wyświetlania może używać flipowania, aby wykonać operacje na pełnoekranowych łańcuchach wymiany opartych na D3DSWAPEFFECT_DISCARD i D3DSWAPEFFECT_COPY.
Powyższe omówienie dotyczy często używanego przypadku łańcucha zamiany pełnoekranowego utworzonego za pomocą D3DSWAPEFFECT_FLIP.
Aby zapoznać się z bardziej ogólnym omówieniem różnych efektów zamiany dla łańcuchów wymiany zarówno okiennych, jak i pełnoekranowych, zobacz D3DSWAPEFFECT.
Tematy pokrewne
-
powierzchni Direct3D