PFND3DDDI_SETASYNCCALLBACKSCB回呼函式 (d3dumddi.h)
pfnSetAsyncCallbacksCb 函式會通知 Microsoft Direct3D 運行時間,運行時間是否會從背景工作線程啟動或停止接收對運行時間回呼函式的呼叫。
語法
PFND3DDDI_SETASYNCCALLBACKSCB Pfnd3dddiSetasynccallbackscb;
HRESULT Pfnd3dddiSetasynccallbackscb(
HANDLE hDevice,
BOOL Enable
)
{...}
參數
hDevice
顯示裝置的句柄 (圖形內容) 。
Enable
布爾值,指定運行時間是否會從背景工作線程啟動或停止接收對運行時間回呼函式的呼叫。 TRUE 表示運行時間會從背景工作線程開始接收其回呼函式的呼叫; FALSE 表示運行時間會停止從背景工作線程接收其回呼函式的呼叫。
傳回值
pfnSetAsyncCallbacksCb 會傳回下列其中一個值:
傳回碼 | 描述 |
---|---|
S_OK | Direct3D 運行時間已成功收到通知。 |
E_INVALIDARG | 已驗證參數,並判斷為不正確。 |
此函式也可能傳回其他 HRESULT 值。
備註
如果使用者模式顯示驅動程式實作自己的多處理器優化 (,驅動程式會在該線程) 中建立背景工作線程和處理命令,驅動程式必須呼叫 pfnSetAsyncCallbacksCb ,以通知 Direct3D 運行時間是否要啟動或停止從背景工作線程接收對運行時間回呼函式的呼叫。 此外,這類驅動程式不得實作 LockAsync、 UnlockAsync和 Rename 函式。 這可確保運行時間不會嘗試使用自己的多處理器優化。
使用者模式顯示驅動程式只能在主要應用程式線程上呼叫 pfnSetAsyncCallbacksCb (,也就是呼叫至驅動程式的線程) 。 驅動程式的背景工作線程無法呼叫 pfnSetAsyncCallbacksCb。 在任何時間點,只有一個參考特定轉譯裝置的線程可以在任何運行時間的回呼函式中執行。
在使用者模式顯示驅動程式在主應用程式線程以外的線程上呼叫任何運行時間回呼函式之前,驅動程式必須將 TRUE 傳遞給 pfnSetAsyncCallbacksCb 呼叫中的 Enable 參數。 在使用者模式顯示驅動程式在主要應用程式線程上呼叫運行時間的任何回呼函式之前,驅動程式必須將 FALSE 傳遞至對 pfnSetAsyncCallbacksCb 的呼叫中的 Enable 參數。
在每個轉譯裝置的 Flush 實作中,驅動程式會呼叫 pfnSetAsyncCallbacksCb ,並將 FALSE 傳遞至 Enable 參數。
當驅動程式在對 pfnSetAsyncCallbacksCb 的呼叫中將 TRUE 傳遞給 Enable 參數時,運行時間會將本身置於其回呼函式中不會立即回應裝置遺失狀況的狀態。 相反地,當運行時間偵測到在回呼函式中處於此狀態時遺失的裝置時,它會設定指出事件發生的位。 當驅動程式將 FALSE 傳遞給 pfnSetAsyncCallbacksCb 呼叫中的 Enable 參數時,運行時間會檢查位,以判斷裝置是否遺失。 如果設定位,運行時間會執行其一般裝置遺失的處理。 此時,驅動程式不再從運行時間接收其函式的大部分呼叫。
只有 DirectX 9 和 DirectX 9L 版本的運行時間支援 pfnSetAsyncCallbacksCb。 當運行時間呼叫使用者模式顯示驅動程式的 CreateDevice (D3D10) 函式來建立轉譯裝置時,D3DDDI_DEVICECALLBACKS 結構的pfnSetAsyncCallbacksCb 成員設定為 NULL 的 DirectX 10 和更新版本。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。 |
目標平台 | 桌面 |
標頭 | d3dumddi.h (include D3dumddi.h) |