的IDXGIFactory interface的參考告訴我,爲了創造一個交換鏈,我可能會使用用於創建Direct3D設備同廠:爲什麼使用相同的IDXGIFactory爲設備和交換鏈
由於您可以在不創建交換鏈的情況下創建Direct3D設備,因此您可能需要檢索用於創建設備的工廠以創建交換鏈。
這也給了下面的代碼〔實施例:(關於
IDXGIDevice * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);
IDXGIAdapter * pDXGIAdapter;
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);
IDXGIFactory * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory), (void **)&pIDXGIFactory);
文章很備用,並試圖在充分了解它,下面的兩個問題出現了,而第一個問題是最主要的問題這個線程的標題):
爲什麼我必須使用與創建Direct3D設備相同的工廠才能創建交換鏈?工廠實例是否維護一個很重要的內部狀態,還是隻是爲了避免創建耗費資源的另一個工廠實例?
此外,代碼示例中我用下面的代碼行掙扎:
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);
對我來說,這是不符合邏輯,該IDXGIAdapter是IDXGIDevice的父。否則,我期望IDXGIAdapter有一個像CreateDevice這樣的方法,它可以使適配器成爲設備的父節點。但事實並非如此。爲什麼適配器是設備的父級?
謝謝你查,爲您詳細的解答。但是不是爲「默認適配器」(dxgiAdapter-> GetParent(...))創建的隱式工廠? Direct3D 12的意義有點令人困惑:是否會有一個明確的方法從ID3D12Device獲取IDXGIDevice? – Sam