Sdílet prostřednictvím


Vrstvy rozhraní API (Direct3D 10)

Modul runtime Direct3D 10 je sestaven s vrstvami, počínaje základními funkcemi v jádru a vytváření volitelných funkcí a funkcí pomocníka pro vývojáře ve vnějších vrstvách.

Základní vrstva

Základní vrstva existuje ve výchozím nastavení; poskytuje velmi dynamické mapování mezi rozhraním API a ovladačem zařízení, což minimalizuje režijní náklady na volání s vysokou frekvencí. Vzhledem k tomu, že základní vrstva je nezbytná pro výkon, provádí pouze kritické ověření.

Zbývající vrstvy jsou volitelné. Obecně platí, že vrstvy přidávají funkce, ale nemění stávající chování. Základní funkce budou mít například stejné návratové hodnoty nezávislé na vytvoření instance vrstvy ladění, i když je možné poskytnout další ladicí výstup, pokud se vytvoří instance vrstvy ladění.

Vytvoření vrstev při vytvoření zařízení voláním D3D10CreateDevice a zadáním jedné nebo více hodnot D3D10_CREATE_DEVICE_FLAG.

Ladicí vrstva

Ladicí vrstva poskytuje rozsáhlé další ověřování parametrů a konzistence (například ověřování propojení shaderu a vazby prostředků, ověřování konzistence parametrů a hlášení popisů chyb). Výstup vygenerovaný vrstvou ladění se skládá z fronty řetězců, které jsou přístupné pomocí rozhraní ID3D10InfoQueue (viz Přizpůsobení výstupu ladění pomocí ID3D10InfoQueue (Direct3D 10)). Chyby vygenerované základní vrstvou jsou zvýrazněné upozorněními vrstvy ladění.

Pokud chcete vytvořit zařízení, které podporuje vrstvu ladění, musíte nainstalovat sadu DirectX SDK (abyste získali D3D10SDKLayers.DLL) a pak při volání D3D10CreateDevicezadat příznak D3D10_CREATE_DEVICE_DEBUG . Samozřejmě spuštění aplikace s ladicí vrstvou bude podstatně pomalejší. Chcete-li povolit nebo zakázat ladicí zprávy pro rozhraní API D3DX10, zavolejte D3DX10DebugMute.

Když ladicí vrstva vypíše nevracení paměti, vypíše seznam ukazatelů rozhraní objektů spolu s popisnými názvy. Výchozí popisný název je "<nepojmenovaný>". Popisný název můžete nastavit pomocí metody ID3D10DeviceChild::SetPrivateData a identifikátoru GUID WKPDID_D3DDebugObjectName, který je v souboru D3Dcommon.h. Pokud chcete například pojmenovat pTexture s názvem SDKLayer mytexture.jpg, použijte následující kód:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

Obvykle byste je měli zkompilovat z produkční verze.

Přepnout na referenční vrstvu

Tato vrstva umožňuje aplikaci přecházet mezi hardwarovým zařízením (HAL) a referenčním nebo softwarovým zařízením (REF). Pokud chcete přepnout zařízení, musíte nejprve vytvořit zařízení, které podporuje vrstvu switch-to-reference (viz D3D10CreateDevice) a potom volat ID3D10SwitchToRef::SetUseRef.

Všechny stavy zařízení, prostředky a objekty se udržují prostřednictvím tohoto přechodu zařízení. Někdy ale není možné přesně odpovídat datům o prostředcích. Důvodem je skutečnost, že některé informace jsou k dispozici pro hardwarové zařízení, které není dostupné pro referenční zařízení.

Prakticky všechny aplikace v reálném čase používají implementaci kanálu HAL. Když se kanál přepne z hardwarového zařízení na referenční zařízení, operace vykreslování se provádějí současně v hardwaru i softwaru. Při vykreslování softwarového zařízení bude vyžadovat stažení prostředků do systémové paměti. To může vyžadovat, aby se místo vyřadily další prostředky uložené v systémové paměti.

Poznámka

Tato funkce přepínače na referenční vrstvu je podporována pouze v Direct3D 10 a Direct3D 10.1 a už není podporována v Direct3D 11 a novějších verzích.

 

vrstva Thread-Safe

Tato vrstva je navržená tak, aby umožňovala vícevláknovým aplikacím přístup k zařízení z více vláken.

Aplikace Direct3D 10 může řídit synchronizaci zařízení pomocí funkcí zařízení. To aplikaci umožňuje povolit nebo zakázat kritické oddíly (dočasně povolení nebo zakázání ochrany multithreadingu) a vzít nebo uvolnit zámek kritického oddílu přes více vstupních bodů rozhraní API Direct3D 10. Vrstva bezpečná pro přístup z více vláken je ve výchozím nastavení povolená. U jednovláknových aplikací nemá vrstva bezpečná pro přístup z více vláken žádný vliv na výkon.

Rozdíly mezi Direct3D 9 a Direct3D 10:

  • Na rozdíl od Direct3D 9 je rozhraní API Direct3D 10 ve výchozím nastavení plně bezpečné pro přístup z více vláken.

 

funkce rozhraní API (Direct3D 10)