Compartir a través de


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 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 de retorno 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 entorno 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 .

Observaciones

El tiempo de ejecución de Microsoft Direct3D llama a la función Lock del controlador de visualización 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 desde la CPU. Cuando el tiempo de ejecución llama a Lock, el controlador de pantalla en modo de usuario debe llamar al pfnLockCb del entorno de ejecución función de devolución de llamada para bloquear una asignación correspondiente al recurso o superficie. Tenga en cuenta que, dado que el controlador de visualización en modo de usuario puede asignar varias asignaciones para cada recurso o superficie, es posible que se requiera que el controlador de pantalla en modo de usuario convierta o procese correctamente el puntero de asignación que se devuelve de pfnLockCb antes de devolver el Bloqueo llamada al entorno de ejecución.

Normalmente, Las llamadas a lock van seguidas de llamadas coincidentes a la función de desbloqueo del controlador antes de que el controlador reciba las llamadas a sus funciones primitivas de dibujo (es decir, las llamadas a DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitivey 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 y la iluminación de software, 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 MightDrawFromLocked en el Flags miembro de las estructuras de D3DDDIARG_CREATERESOURCE y D3DDDIARG_LOCK (es decir, en la creación y en tiempo de bloqueo). Cuando el hardware se representa activamente desde un búfer de vértices bloqueado, el controlador no debe realizar 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 también superficies de memoria del sistema asignadas previamente. Esta operación permite que el controlador de visualización 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 visualización en modo de usuario puede realizar la sincronización mediante:

  • Vaciado (es decir, llamar a la pfnRenderCb del runtime función de devolución de llamada) 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 el tono de la superficie en la pSurfData y miembros pitch de la estructura D3DDDIARG_LOCK. Sin embargo, para superficies de memoria del sistema previamente asignadas, 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 el NotifyOnly marca de campo de bits en el miembro Marcas de de la estructura de D3DDDIARG_LOCK para diferenciar Llamadas de bloqueo que bloquean las superficies de memoria del sistema preasignadas de otras llamadas de bloqueo de.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
de la plataforma de destino de Universal
encabezado de d3dumddi.h (incluya D3dumddi.h)

Consulte también

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb