PFND3DDDI_LOCK回呼函式 (d3dumddi.h)

Lock 函式會鎖定指定的資源或資源內的介面。

語法

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

參數

hDevice

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

unnamedParam2

pData [in, out]

描述資源內要鎖定之資源或表面 之D3DDDIARG_LOCK 結構的指標。

傳回值

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

傳回碼 描述
S_OK 資源已成功鎖定。
E_OUTOFMEMORY 鎖定無法配置所需的記憶體,使其完成。
D3DDDIERR_WASSTILLDRAWING 當 Microsoft Direct3D 運行時間呼叫 Lock 函式,並在 D3DDDIARG_LOCK 的 Flags 成員中設定 DoNotWait 位字段旗標時,資源不會閒

備註

Microsoft Direct3D 運行時間會呼叫使用者模式顯示驅動程式的 Lock 函式,以鎖定資源內的資源或介面。 此鎖定的資源或介面可以使用 CPU 的讀取和寫入作業來讀取或寫入。 當運行時間呼叫 Lock 時,使用者模式顯示驅動程式必須呼叫運行時間的 pfnLockCb 回呼函式,以鎖定對應至資源或介面的配置。 請注意,因為使用者模式顯示驅動程式可以為每個資源或介面配置多個配置,所以可能需要使用者模式顯示驅動程式,才能適當地轉換或處理從 pfnLockCb 傳回的配置指標,再將 Lock 呼叫傳回給運行時間。

一般而言,對 Lock 的呼叫後面接著比對驅動程式的 Unlock 函式呼叫,驅動程式才會收到其繪製基本函式的任何呼叫 (,也就是呼叫 DrawIndexedPrimitive、DrawIndexedPrimitive2DrawPrimitive2DrawPrimitive2) 。 此順序保證一律不會要求驅動程序從鎖定的資源中繪製。 不過,有時候,執行軟體轉換和光源時,運行時間必須在解除鎖定資源 (之前呼叫其中一個驅動程序的繪製基本函式,只有頂點緩衝區才會顯示此行為) 。 運行時間會將這種不常見行為的頂點緩衝區標示為在建立時和鎖定時間) 之 Flags (D3DDDIARG_LOCKD3DDDIARG_CREATERESOURCE 成員中的 MightDrawFromLocked 位字段旗標。 當硬體主動從鎖定的頂點緩衝區轉譯時,驅動程式不需要採取任何特殊動作,因為運行時間不會覆寫鎖定頂點緩衝區中的任何數據。

運行時間也會呼叫使用者模式顯示驅動程式的 Lock 函式,以鎖定預先配置的系統記憶體介面。 這項作業可讓使用者模式顯示驅動程序正確同步處理可能位於硬體命令數據流中的這類介面參考。 使用者模式顯示驅動程式可以透過下列方式完成同步處理:

  • 排清 (亦即,視需要呼叫運行時間的 pfnRenderCb 回呼函式) 任何未處理的命令。
  • 針對已提交至硬體的命令,使用適當的配置句柄呼叫 pfnLockCb
使用者模式顯示驅動程式會傳回鎖定表面的記憶體指標,以及 D3DDDIARG_LOCK結構的 pSurfDataPitch 成員中的表面間距。 不過,針對預先配置的系統記憶體介面,運行時間會忽略驅動程式設定的記憶體和音調,雖然驅動程式仍會失敗 鎖定 呼叫 (,因此容錯回復至應用程式) 。 運行時間會在 D3DDDIARG_LOCK 結構的 Flags 成員中設定 NotifyOnly 位欄位旗標,以區分鎖定預先配置系統記憶體介面的鎖定呼叫與其他 Lock 呼叫。

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。
目標平台 Universal
標頭 d3dumddi.h (include D3dumddi.h)

另請參閱

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb