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.
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) |