共用方式為


PFND3DDDI_UNLOCKCB回呼函式 (d3dumddi.h)

pfnUnlockCb 函式 會解除鎖定呼叫 pfnLockCb 函式 所鎖定的配置。

語法

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

HRESULT Pfnd3dddiUnlockcb(
  HANDLE hDevice,
  const D3DDDICB_UNLOCK *unnamedParam2
)
{...}

參數

hDevice

顯示裝置的句柄(圖形內容)。

unnamedParam2

pData [in]

描述要解除鎖定之配置之 D3DDDICB_UNLOCK 結構的指標。

傳回值

pfnUnlockCb 會傳回下列其中一個值:

傳回碼 描述
S_OK 已成功解除鎖定配置。
E_OUTOFMEMORY pfnUnlockCb 因為記憶體不足而無法完成。 (當系統處於極低的記憶體狀況,且沒有足夠的空間配置頁面陣列時,就會發生此錯誤。
E_INVALIDARG 已驗證參數,並判斷為不正確。

此函式也可能傳回其他 HRESULT 值。

言論

使用者模式顯示驅動程式必須呼叫 pfnUnlockCb 函式,才能解除鎖定先前在呼叫 pfnLockCb 函式 時鎖定的配置。 如果驅動程式未呼叫 pfnUnlockCb ,則Microsoft Direct3D 運行時間、使用者模式顯示驅動程式和顯示迷你埠驅動程式之間的協調會遺失。

使用者模式顯示驅動程式通常會呼叫 pfnUnlockCb ,以回應呼叫其 UnlockResourceUnmap 函式(或其他 ResourceUnmap 變化,例如 DynamicIABufferUnmap)來解除鎖定資源或資源內的表面。 從 UnlockResourceUnmap 呼叫傳回之前,使用者模式顯示驅動程式必須先將資源或表面對應至適當的配置,然後 呼叫 pfnUnlockCb 來解除鎖定配置。

使用者模式顯示驅動程式也可以呼叫 pfnUnlockCb ,以回應呼叫其 DestroyDeviceDestroyDevice(D3D10) 函式,以釋放它為裝置配置的所有資源。 在裝置的存留期內,pfnLockCb 的每個呼叫都必須與 pfnUnlockCb 函式的 呼叫配對,才能解除鎖定配置。

使用者模式顯示驅動程式可以在一次呼叫 pfnUnlockCb 中解除鎖定多個配置,方法是將 D3DDDICB_UNLOCK 結構的 NumAllocations 成員設定為 D3DDDICB_UNLOCK phAllocations 成員所指定的陣列配置數目。

使用者模式顯示驅動程式應該呼叫 pfnUnlockCb ,以在呼叫 pfnRenderCb 函式之前,先解除鎖定命令數據流中參考的所有配置。 驅動程式可能會鎖定配置以支援,例如,NoOverwrite 位欄位旗標。 如果驅動程式未解除鎖定所有這些配置,可能需要視訊記憶體管理員將這些配置放在AGP記憶體中。

使用者模式顯示驅動程式不應該呼叫 pfnUnlockCb ,以解除鎖定應用程式可以使用的配置。 當驅動程式收到呼叫其 解除鎖定ResourceUnmap 函式時,驅動程式會通知應用程式不再讀取或寫入配置。

例子

下列程式代碼範例示範如何解除鎖定配置。

HRESULT CD3DContext::SyncEnginesUsingLock(VOID) {
    HRESULT hr;
    D3DDDICB_LOCK   lockCB;
    D3DDDICB_UNLOCK Unlock;

    memset(&lockCB, 0, sizeof(D3DDDICB_LOCK));
    lockCB.hAllocation = m_HandleUsedInLastSubmit;
    lockCB.PrivateDriverData = 0;                       
    hr = m_d3dCallbacks.pfnLockCb(m_hD3D, &lockCB);
    if (FAILED(hr)) {
        DBG_BREAK;
        return hr;
    }
    Unlock.NumAllocations = 1;
    Unlock.phAllocations = &m_HandleUsedInLastSubmit;
    m_d3dCallbacks.pfnUnlockCb(m_hD3D, &Unlock);   
    return hr;
}

要求

要求 價值
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows作系統中使用。
目標平臺 桌面
標頭 d3dumddi.h (包括 D3dumddi.h)

另請參閱

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

解除鎖定

pfnLockCb

pfnRenderCb