Direct3D 11 運行時由層(Layer)構成。
一條基本的準則是在層中添加功能,但不影響已存在的行為。舉例來說,核心函數在獨立的調試層中有相同的傳回值,甚至還會有附加的調試資訊。
可調用D3D11CreateDevice 或者 D3D11CreateDeviceAndSwapChain 並提供一個或多個D3D11_CREATE_DEVICE_FLAG值在建立device的同時建立層。
Direct3D 11 提供以下運行時層:
#核心層(Core Layer)
#調試層(Debug Layer)
Core Layer
核心層預設存在,在api和device之間提供一層很薄的映射,最小化高頻率調用函數帶來的效能影響。核心層的根本是效率,它只做必要的檢查。剩下的層是可選的。
Debug Layer
該層提供大量額外的參數和一致性驗證(諸如驗證著色器串連和資源綁定,參數一致性,提交錯誤描述等)。
為了建立一個支援調試層的device,使用者必須安裝DirectX SDK(來擷取D3D11SDKLayers.dll),然後在調用D3D11CreateDevice或者D3D11CreateDeviceAndSwapChain時指定D3D11_CREATE_DEVICE_DEBUG 標記。
需要注意的是啟用調式層後程式運行會大幅變慢。你可以使用SDK中的DirectX Control Panel來啟用或者禁用調試層。當調式層列出記憶體流失時,輸出的是一個關聯著友好命名的介面指標列表。預設的友好命名是“<unnamed>”。你可以使用ID3D11DeviceChild::SetPrivateData和D3Dcommon.h中的WKPDID_D3DDebugObjectName GUID來設定友好命名。比如用mytexture.jpg命名一個pTexture指標,使用如下代碼:
const char c_szName[] = "mytexture.jpg";pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );