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.
Łańcuchy wymiany kontrolują rotację buforu wstecznego, tworząc podstawę animacji graficznej.
Przegląd
Model programowania dla łańcuchów wymiany w wersji Direct3D 12 nie jest identyczny z tym we wcześniejszych wersjach D3D. Wygoda programowania, na przykład obsługa automatycznej rotacji zasobów, która była obecna w D3D10 i D3D11, nie jest już obsługiwana. Automatyczne obracanie zasobów umożliwia aplikacjom renderowanie tego samego obiektu interfejsu API, podczas gdy rzeczywista powierzchnia renderowana zmienia każdą ramkę. Zachowanie łańcuchów wymiany jest zmieniane z Direct3D 12, aby umożliwić innym funkcjom direct3D 12 niskie obciążenie procesora CPU. Automatyczny klucz kolorów i wieloamperowanie nie są obsługiwane, chociaż nadal trwa rozciąganie i obracanie.
Okres istnienia buforu
Aplikacje mogą przechowywać wstępnie utworzone deskryptory odwołujące się do buforów tylnych. Jest to możliwe dzięki temu, że zestaw buforów należących do łańcucha przełączania nigdy nie zmienia się przez cały czas istnienia łańcucha. Zestaw zwracanych przez IDXGISwapChain::GetBuffer nie zmienia się do momentu wywołania niektórych interfejsów API:
Kolejność zwracanych przez GetBuffer nigdy się nie zmienia.
IDXGISwapChain3::GetCurrentBackBufferIndex zwraca indeks bieżącego buforu wstecznego do aplikacji.
Efekty zamiany
Jedynymi obsługiwanymi efektami zamiany są DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL i DXGI_SWAP_EFFECT_FLIP_DISCARD, co wymaga, aby liczba przekraczała jedną wartość.
Przechodzenie między trybami okna i pełnoekranowym
Funkcja Direct3D 12 nie obsługuje trybu wyłączności pełnoekranowego (FSE). Zamiast tego, gdy gra jest jedyną widoczną aplikacją na ekranie, system operacyjny wykorzystuje strategię o nazwie optymalizacje pełnoekranowe (FSO), aby osiągnąć podobny efekt do FSE bez wad wydajności. Aby uzyskać więcej informacji na temat FSO, zobacz Demystifying Fullscreen Optimizations.
Direct3D 12 utrzymuje ograniczenie, że aplikacje muszą wywoływać ResizeBuffers po przejściu między trybami okien i pełnoekranowymi (łańcuchy wymiany modelu przerzucania D3D11 mają te same ograniczenia).
Przejścia IDXGISwapChain::SetFullscreenState nie zmieniają zestawu widocznych dla aplikacji w łańcuchu wymiany. Tylko ResizeBuffers i ResizeTarget wywołania tworzenia lub niszczenia widocznych dla aplikacji. Jednak w trybie Direct3D 12 IDXGISwapChain::SetFullscreenState nie wchodzi w tryb wyłączności pełnoekranowy, a po prostu zmienia rozdzielczości i szybkości odświeżania, aby umożliwić optymalizację pełnoekranową. Te zmiany mogą zostać wprowadzone przez aplikację bez użycia tej metody
Gdy lub IDXGISwapChain::P resent lub IDXGISwapChain1::P resent jest wywoływany, bufor wsteczny, który ma być prezentowany, musi znajdować się w stanie D3D12_RESOURCE_STATE_PRESENT. Obecność zakończy się niepowodzeniem z DXGI_ERROR_INVALID_CALL, jeśli tak nie jest.
Łańcuchy wymiany pełnoekranowej nadal mają ograniczenie, które SetFullscreenState(FALSE, NULL) musi być wywoływane przed ostatecznym wydaniem łańcucha wymiany. SetFullscreenState(FALSE) kończy się powodzeniem w łańcuchach wymiany uruchomionych na urządzeniach Direct3D 12.
Obecne operacje występują w kolejce 3D udostępnianej podczas tworzenia łańcucha wymiany, a aplikacje mogą współbieżnie prezentować wiele łańcuchów wymiany oraz rejestrować i wykonywać listy poleceń.
Gdy ostatnia część pracy grafiki (na przykład przetwarzanie po przetworzeniu ramek) odbywa się w kolejce obliczeniowej lub nie obejmuje kolejki grafiki urządzenia, utworzenie drugiej kolejki 3D do wyświetlenia może być korzystne i zapobiec opóźnieniu prezentacji opóźnienia rozpoczęcia następnej ramki.
Przykład
Poniższy przykładowy kod będzie obecny w głównej pętli renderowania:
void Present()
{
m_swapChain->Present(0, m_presentFlags);
m_backBufferIndex = (m_backBufferIndex + 1) % m_backBufferCount;
}
Tworzenie łańcuchów wymiany
W przypadku korzystania z CreateSwapChainForHwndCreateSwapChainForCoreWindowlub CreateSwapChainForComposition wywołania, należy pamiętać, że parametr pDevice rzeczywiście wymaga wskaźnika do kolejki poleceń bezpośrednich w direct3D 12, a nie urządzenia.
Prezentowanie w systemie Windows 7
W przypadku określania wartości docelowej Direct3D 12 w systemie Windows 7 niezbędne typy DXGI dla direct3D 12 nie są obecne, więc należy użyć dostarczonego ID3D12CommandQueueDownLevel (odpytywane z kolejki poleceń bezpośrednich) do przedstawienia.
Należy podać otwartą listę poleceń dla obecnej metody systemu Windows 7, która będzie następnie używana, zamknięta i automatycznie przesłana do urządzenia. Musisz podać bufor wsteczny, który musi być utworzony przez aplikację, musi być zatwierdzonym zasobem, musi być jednoseksowy i musi być jednym z następujących formatów.
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB