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.
Środowisko uruchomieniowe Direct3D 10 jest konstruowane z warstwami, począwszy od podstawowych funkcji podstawowych oraz tworzenia opcjonalnych i pomocniczych funkcji dla deweloperów w warstwach zewnętrznych.
Warstwa podstawowa
Warstwa podstawowa istnieje domyślnie; zapewnienie bardzo elastycznego mapowania między interfejsem API a sterownikiem urządzenia, minimalizując obciążenie wywołań o wysokiej częstotliwości. Ponieważ podstawowa warstwa jest niezbędna do wydajności, przeprowadza tylko weryfikację krytyczną.
Pozostałe warstwy są opcjonalne. Ogólnie rzecz biorąc, warstwy dodają funkcje, ale nie modyfikują istniejącego zachowania. Na przykład podstawowe funkcje będą miały te same wartości zwracane niezależnie od utworzenia wystąpienia warstwy debugowania, chociaż w przypadku utworzenia wystąpienia warstwy debugowania mogą zostać udostępnione dodatkowe dane wyjściowe debugowania.
Utwórz warstwy podczas tworzenia urządzenia, wywołując D3D10CreateDevice i podając co najmniej jedną D3D10_CREATE_DEVICE_FLAG wartości.
Warstwa debugowania
Warstwa debugowania zapewnia obszerną dodatkową walidację parametrów i spójności (na przykład weryfikowanie powiązania cieniowania i powiązania zasobów, weryfikowanie spójności parametrów i raportowanie opisów błędów). Dane wyjściowe generowane przez warstwę debugowania składają się z kolejki ciągów, które są dostępne przy użyciu ID3D10InfoQueue Interface (zobacz Customize Debug Output with ID3D10InfoQueue (Direct3D 10)). Błędy generowane przez warstwę podstawową są wyróżnione ostrzeżeniami przez warstwę debugowania.
Aby utworzyć urządzenie obsługujące warstwę debugowania, należy zainstalować zestaw SDK DirectX (aby uzyskać D3D10SDKLayers.DLL), a następnie określić flagę D3D10_CREATE_DEVICE_DEBUG podczas wywoływania D3D10CreateDevice. Oczywiście uruchomienie aplikacji z warstwą debugowania będzie znacznie wolniejsze. Aby włączyć/wyłączyć komunikaty debugowania dla interfejsów API D3DX10, wywołaj D3DX10DebugMute.
Gdy warstwa debugowania wyświetla listę przecieków pamięci, zwraca listę wskaźników interfejsu obiektu wraz z ich przyjaznymi nazwami. Domyślna przyjazna nazwa to "<bez nazwy>". Przyjazną nazwę można ustawić przy użyciu ID3D10DeviceChild::SetPrivateData metody i identyfikatora GUID WKPDID_D3DDebugObjectName w D3Dcommon.h. Aby na przykład nazwać element pTexture nazwą zestawu SDKLayer mytexture.jpg, użyj następującego kodu:
const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );
Zazwyczaj należy skompilować te wywołania z wersji produkcyjnej.
Warstwa przełączania do odwołania
Ta warstwa umożliwia aplikacji przejście między urządzeniem sprzętowym (HAL) a odwołaniem lub urządzeniem programowym (REF). Aby przełączyć urządzenie, należy najpierw utworzyć urządzenie obsługujące warstwę przełączania do odwołania (zobacz D3D10CreateDevice), a następnie wywołać ID3D10SwitchToRef::SetUseRef.
Wszystkie stany urządzeń, zasoby i obiekty są utrzymywane za pośrednictwem tego przejścia urządzenia. Jednak czasami nie można dokładnie dopasować danych zasobów. Wynika to z faktu, że niektóre informacje są dostępne dla urządzenia sprzętowego, które nie jest dostępne dla urządzenia odniesienia.
Praktycznie wszystkie aplikacje w czasie rzeczywistym używają implementacji hal potoku. Gdy potok zostanie przełączony z urządzenia sprzętowego do urządzenia odniesienia, operacje renderowania są wykonywane jednocześnie w sprzęcie i oprogramowaniu. Ponieważ urządzenie programowe renderuje, będzie wymagać pobrania zasobów do pamięci systemowej. Może to wymagać, aby inne zasoby buforowane w pamięci systemowej mogły zostać eksmitowane, aby zrobić miejsce.
Nuta
Ta funkcja przełączania do warstwy referencyjnej jest obsługiwana tylko w wersjach Direct3D 10 i Direct3D 10.1 i nie jest już obsługiwana w wersjach Direct3D 11 i nowszych.
warstwa Thread-Safe
Ta warstwa została zaprojektowana tak, aby umożliwić aplikacjom wielowątkowy dostęp do urządzenia z wielu wątków.
Aplikacja Direct3D 10 może kontrolować synchronizację urządzeń przy użyciu funkcji urządzenia. Dzięki temu aplikacja może włączać/wyłączać sekcje krytyczne (tymczasowo włączając/wyłączając ochronę wielowątkową) oraz podjąć/zwolnić blokadę sekcji krytycznej dla wielu punktów wejścia interfejsu API Direct3D 10. Warstwa bezpieczna wątkowo jest domyślnie włączona. W przypadku aplikacji jednowątkowych warstwa bezpieczna wątkowo nie ma wpływu na wydajność.
Różnice między direct3D 9 i Direct3D 10:
- W przeciwieństwie do direct3D 9 interfejs API Direct3D 10 domyślnie jest bezpieczny wątkowo.
Tematy pokrewne
-
funkcje interfejsu API (Direct3D 10)