ID3D11DeviceCoNtext1::SwapDeviceCoNtextState 方法 (d3d11_1.h)

啟動指定的內容狀態物件,並將目前的裝置行為變更為 Direct3D 11、Direct3D 10.1 或 Direct3D 10。

語法

void SwapDeviceContextState(
  [in]            ID3DDeviceContextState *pState,
  [out, optional] ID3DDeviceContextState **ppPreviousState
);

參數

[in] pState

先前透過ID3D11Device1::CreateDeviceCoNtextState方法建立之內容狀態物件的ID3DDeviceCoNtextState介面指標。 如果 呼叫 SwapDeviceCoNtextState 並將 pState 設定為 Null,則呼叫不會有任何作用。

[out, optional] ppPreviousState

變數的指標,接收先前啟動之內容狀態物件的 ID3DDeviceCoNtextState 介面指標。

傳回值

備註

SwapDeviceCoNtextState 會變更裝置行為。 此裝置行為取決於您在建立內容狀態物件時傳遞至ID3D11Device1::CreateDeviceCoNtextState方法之EmulatedInterface參數的模擬介面。

延後的內容不支援SwapDeviceCoNtextState

SwapDeviceCoNtextState會停用不相容的裝置介面ID3D10Device、ID3D10Device1ID3D11DeviceID3D11Device1。 當內容狀態物件為使用中時,執行時間會停用裝置和內容介面上的特定方法。 使用 或 __uuidof(ID3D11Device) 關閉大部分 Direct3D 10 裝置介面所建立 __uuidof(ID3D11Device1) 的內容狀態物件。 使用 或 __uuidof(ID3D10Device) 關閉大部分的 ID3D11DeviceCoNtext方法所建立 __uuidof(ID3D10Device1) 的內容狀態物件。 如需此行為的詳細資訊,請參閱 ID3D11Device1::CreateDeviceCoNtextState

SwapDeviceCoNtextState 會啟動 pState所指定的內容狀態物件。 這表示與內容狀態物件功能層級和相容介面相關聯的裝置行為會在 Direct3D 裝置上啟動,直到下一次呼叫 SwapDeviceCoNtextState為止。 此外,此內容狀態物件上次使用中時儲存的任何狀態現在都會重新啟用,因此會取代先前的狀態。

SwapDeviceCoNtextState 會將 ppPreviousState 設定為最近啟動的內容狀態物件。 物件可讓呼叫端儲存,然後稍後還原先前的裝置狀態。 此行為適用于外掛程式架構,例如與 Direct3D 裝置與其外掛程式共用 Direct3D 裝置的 Direct2D。Direct2D 介面可以使用內容狀態物件來儲存和還原應用程式的狀態。

如果呼叫端先前未呼叫 ID3D11Device1::CreateDeviceCoNtextState 方法來建立先前的內容狀態物件, SwapDeviceCoNtextState 會將 ppPreviousState 設定為預設內容狀態物件。 不論是哪一種情況, SwapDeviceCoNtextState 的使用方式都相同。

應用程式所指定的功能層級,以及應用程式提供給 ID3D11Device1::CreateDeviceCoNtextState的可接受清單中的內容狀態物件所選擇的功能層級,可在內容狀態物件為作用中時控制立即內容的功能層級。 因為 Direct3D 11 裝置是自由執行緒,所以裝置方法無法查詢目前的立即內容功能層級。 相反地,裝置會在功能層級執行,這是所有先前建立的內容狀態物件功能層級上限。 這表示裝置的功能層級可以動態增加。

內容狀態物件的功能層級會控制立即內容中可用的功能。 不過,若要維護 Direct3D 11 裝置方法的免費執行緒合約,特別是資源建立方法—所有已建立內容狀態物件的上限功能層級都會控制裝置所建立的資源集合。

因為內容狀態物件介面是由即時內容發佈,所以介面需要與立即內容相同的執行緒模型。 具體而言, SwapDeviceCoNtextState 是相對於其他立即內容方法的單一線程,以及 ID3D10Device的對等方法。

重要的是,因為一次只能使用其中一個 Direct3D 10 或 Direct3D 11 ref-count 行為,所以其中一個 Direct3D 10 和 Direct3D 11 介面必須中斷其 ref-count 合約。 為了避免這種情況,內容狀態物件的啟用會關閉不相容的版本介面。 此外,如果您呼叫不相容版本介面的方法,如果方法具有傳回類型void,則呼叫會以無訊息方式失敗、傳回E_INVALIDARG的 HRESULT值,或將任何 out 參數設定為Null

當您從 Direct3D 11 模式切換到 Direct3D 10 模式或 Direct3D 10.1 模式時,裝置的系結行為會變更。 具體而言,最終版本的資源會在 Direct3D 10 模式或 Direct3D 10.1 模式中引發解除系結。 在最終發行期間,應用程式會釋放所有資源的參考,包括間接參考,例如從檢視連結到資源,以及從內容狀態物件連結至任何內容狀態物件的系結資源。 應用程式沒有任何參考的任何系結資源都未系結並終結,以維護 Direct3D 10 行為。

SwapDeviceCoNtextState 不會影響 ID3D11VideoCoNtext 設定的任何狀態。

延遲內容所產生的命令清單不會保存內容狀態物件的參考,而且不會受到內容狀態物件未來更新的影響。

SwapDeviceCoNtextState不會影響任何非同步物件。 例如,如果在 呼叫 SwapDeviceCoNtextState之前使用查詢,在呼叫之後仍為作用中。

規格需求

   
最低支援的用戶端 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 適用于 Windows Server 2008 R2 的 Windows Server 2012 和平臺更新 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 d3d11_1.h
程式庫 D3D11.lib

另請參閱

ID3D11DeviceContext1