PFND3DDDI_LOCK función de devolución de llamada (d3dumddi.h)

La función Lock bloquea el recurso especificado o una superficie dentro del recurso.

Sintaxis

PFND3DDDI_LOCK Pfnd3dddiLock;

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

Parámetros

hDevice

Identificador del dispositivo de visualización (contexto de gráficos).

unnamedParam2

pData [in, out]

Puntero a una estructura de D3DDDIARG_LOCK que describe el recurso o la superficie dentro del recurso que se va a bloquear.

Valor devuelto

Lock devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK El recurso se bloquea correctamente.
E_OUTOFMEMORY El bloqueo no pudo asignar la memoria necesaria para que se complete.
D3DDDIERR_WASSTILLDRAWING El recurso no estaba inactivo cuando el tiempo de ejecución de Microsoft Direct3D llamó a la función Lock con la marca de campo de bits DoNotWait establecida en el miembro Flags de D3DDDIARG_LOCK .

Comentarios

El tiempo de ejecución de Microsoft Direct3D llama a la función Lock del controlador de pantalla en modo de usuario para bloquear un recurso o una superficie dentro del recurso. Este recurso o superficie bloqueados se puede leer o escribir en mediante operaciones de lectura y escritura de la CPU. Cuando el tiempo de ejecución llama a Lock, el controlador de pantalla en modo de usuario debe llamar a la función de devolución de llamada pfnLockCb del tiempo de ejecución para bloquear una asignación correspondiente al recurso o la superficie. Tenga en cuenta que, dado que el controlador de pantalla en modo de usuario puede asignar varias asignaciones para cada recurso o superficie, es posible que el controlador de pantalla en modo de usuario sea necesario para convertir o procesar correctamente el puntero de asignación que se devuelve desde pfnLockCb antes de devolver la llamada lock al tiempo de ejecución.

Normalmente, las llamadas a Lock van seguidas de llamadas coincidentes a la función Unlock del controlador antes de que el controlador reciba cualquier llamada a sus funciones primitivas de dibujo (es decir, llamadas a DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive y DrawPrimitive2). Este orden garantiza que nunca se solicita que un controlador extraiga de un recurso bloqueado. Sin embargo, en ocasiones, al realizar la transformación de software y la iluminación, el tiempo de ejecución debe llamar a una de las funciones primitivas de dibujo del controlador antes de desbloquear un recurso (actualmente, solo los búferes de vértices muestran este comportamiento). El tiempo de ejecución marca los búferes de vértices en los que este comportamiento poco común puede producirse con la marca de campo de bits MightDrawFromLocked en el miembro Flags de las estructuras D3DDDIARG_CREATERESOURCE y D3DDDIARG_LOCK (es decir, tanto en la creación como en el momento del bloqueo). Cuando el hardware se representa activamente desde un búfer de vértices bloqueado, no es necesario que el controlador realice ninguna acción especial porque el tiempo de ejecución no sobrescribirá ningún dato en el búfer de vértices bloqueado.

El tiempo de ejecución llama también a la función Lock del controlador de pantalla en modo de usuario para bloquear las superficies de memoria del sistema asignadas previamente. Esta operación permite que el controlador de pantalla en modo de usuario sincronice correctamente las referencias a estas superficies que podrían estar en el flujo de comandos de hardware. El controlador de pantalla en modo de usuario puede realizar la sincronización mediante:

  • Vaciado (es decir, llamando a la función de devolución de llamada pfnRenderCb del runtime) los comandos pendientes según sea necesario.
  • Llamar a pfnLockCb con el identificador de asignación adecuado para los comandos que ya se han enviado al hardware.
El controlador de pantalla en modo de usuario devuelve un puntero a la memoria de la superficie bloqueada y la inclinación de la superficie en los miembros pSurfData y Pitch de la estructura D3DDDIARG_LOCK. Sin embargo, para superficies de memoria del sistema asignadas previamente, el tiempo de ejecución omite la memoria y el tono establecidos por el controlador, aunque el controlador todavía puede producir un error en la llamada de bloqueo (y, por tanto, conmutar por recuperación a la aplicación). El tiempo de ejecución establece la marca de campo de bits NotifyOnly en el miembro Flags de la estructura D3DDDIARG_LOCK para diferenciar las llamadas de bloqueo que bloquean las superficies de memoria del sistema asignadas previamente de otras llamadas lock .

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Universal
Encabezado d3dumddi.h (incluya D3dumddi.h)

Consulte también

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb