Compartir a través de


estructura DD_LOCKDATA (ddrawint.h)

La estructura DD_LOCKDATA contiene información necesaria para realizar un bloqueo según lo definido por las estructuras de parámetros de Microsoft DirectDraw.

Sintaxis

typedef struct _DD_LOCKDATA {
  PDD_DIRECTDRAW_GLOBAL lpDD;
  PDD_SURFACE_LOCAL     lpDDSurface;
  DWORD                 bHasRect;
  RECTL                 rArea;
  LPVOID                lpSurfData;
  HRESULT               ddRVal;
  VOID                  *Lock;
  DWORD                 dwFlags;
  FLATPTR               fpProcess;
} *PDD_LOCKDATA, DD_LOCKDATA;

Miembros

lpDD

Apunta a una estructura de DD_DIRECTDRAW_GLOBAL que describe el dispositivo del controlador.

lpDDSurface

Apunta a una estructura de DD_SURFACE_LOCAL que describe la superficie, en el caso de LockD3DBuffer, un búfer asociado a la región de memoria que se va a bloquear.

bHasRect

Especifica si el área de rArea es válida. Un valor de 0x00000001 indica un área válida, 0x00000000 indica un área no válida.

rArea

Especifica una estructura RECTL que define el área de la superficie que se va a bloquear.

lpSurfData

Especifica la ubicación en la que el controlador puede devolver un puntero a la región de memoria bloqueada.

ddRVal

Especifica la ubicación en la que el controlador escribe el valor devuelto de la devolución de llamada DdLock o LockD3DBuffer . Un código de retorno de DD_OK indica que se ha realizado correctamente. Para obtener más información, consulte Valores devueltos para DirectDraw.

Lock

Usado por la API de DirectDraw y el controlador no debe rellenarlo.

dwFlags

Especifica una máscara de bits que indica al controlador cómo realizar el bloqueo de memoria. Este miembro es un OR bit a bit de cualquiera de los siguientes valores:

Marca Significado
DDLOCK_DISCARDCONTENTS
No se realizan suposiciones sobre el contenido de la superficie o el búfer de vértices durante este bloqueo. Esto habilita dos cosas:
1. Microsoft Direct3D o el controlador pueden proporcionar un área de memoria alternativa como búfer de vértices. Esto resulta útil cuando uno planea borrar el contenido del búfer de vértices y rellenar nuevos datos.
2. Los controladores a veces almacenan datos de superficie en un formato reordenado. Cuando la aplicación bloquea la superficie, el controlador se ve obligado a deshacer esta reordenación de datos de superficie antes de permitir que la aplicación vea el contenido de la superficie.

Esta marca es una sugerencia para el controlador que puede omitir el proceso de desordenamiento, ya que la aplicación planea sobrescribir cada píxel único en la superficie o rectángulo bloqueado (y, por lo tanto, borrar los píxeles sin ordenar de todos modos). Las aplicaciones siempre deben establecer esta marca cuando piensan sobrescribir toda la superficie o rectángulo bloqueado.

DDLOCK_DONOTWAIT En IDirectDrawSurface7 y las interfaces posteriores, el valor predeterminado es DDLOCK_WAIT. Si desea invalidar el valor predeterminado y usar la hora en que el acelerador está ocupado (como se indica en el código de retorno de DDERR_WASSTILLDRAWING), use esta marca.
DDLOCK_EVENT Establezca si se pasa un identificador de eventos a Lock, que desencadena el evento cuando puede devolver el puntero de memoria de superficie solicitado.
DDLOCK_HASVOLUMETEXTUREBOXRECT El controlador debe devolver un puntero de memoria válido al principio de la textura de subvolume especificada en el rectángulo (RECTL) en rArea. El controlador obtiene las coordenadas delantera y trasera de la subvolume de los 16 bits superiores de las coordenadas izquierda y derecha (miembros izquierdo y derecho de RECTL), respectivamente. Las coordenadas izquierda y derecha están restringidas a los 16 bits inferiores. Si no se especifica ningún rectángulo, el controlador debe devolver un puntero a la parte superior del volumen entero. Este valor está disponible en DirectX 8.1 y versiones posteriores.
DDLOCK_NODIRTYUPDATE
Enviado al controlador por el tiempo de ejecución después de que una aplicación solicite bloquear una región de memoria con la marca D3DLOCK_NO_DIRTY_UPDATE establecida. En este caso, el controlador no debe tener en cuenta la región de memoria que bloquea como sucio cuando el tiempo de ejecución llama a la función DdUnlock del controlador para actualizar una superficie que contiene esta región. En su lugar, el controlador solo debe tener en cuenta las regiones especificadas en las llamadas anteriores a su función D3dDrawPrimitives2 mediante los enumeradores D3DDP2OP_ADDDIRTYRECT y D3DDP2OP_ADDDIRTYBOX como sucios.
De forma predeterminada, un bloqueo en una superficie agrega una región desfasada a esa superficie.
DDLOCK_NOOVERWRITE Solo se usa con bloqueos de búfer de vértices de Direct3D. Indica que no se hace referencia a vértices a los que se hace referencia en las llamadas IDirect3DDevice7::D rawPrimitiveVB e IDirect3DDevice7::D rawIndexedPrimitiveVB (descritas en la documentación del SDK de Direct3D) desde el inicio del fotograma (o el último bloqueo sin esta marca) se modifican durante el bloqueo. Esto puede ser útil cuando solo se anexan datos al búfer de vértices.
DDLOCK_NOSYSLOCK
Indica que no se debe tomar un bloqueo de todo el sistema cuando esta superficie está bloqueada. Esto tiene varias ventajas al bloquear superficies de memoria de vídeo, como la capacidad de respuesta del cursor, la capacidad de llamar a más funciones de Microsoft Windows y una depuración más sencilla. Sin embargo, una aplicación que especifique esta marca debe cumplir una serie de condiciones documentadas en el archivo de ayuda.
Esta marca no se puede especificar al bloquear la principal.
DDLOCK_OKTOSWAP Igual que DDLOCK_DISCARDCONTENTS.
DDLOCK_READONLY La superficie que se bloquea solo se leerá. En Windows 2000 y versiones posteriores, esta marca nunca se establece.
DDLOCK_SURFACEMEMORYPTR El controlador debe devolver un puntero de memoria válido a la parte superior del rectángulo especificado en rArea. Si no se especifica ningún rectángulo, el controlador debe devolver un puntero a la parte superior de la superficie.
DDLOCK_WAIT Se establece para indicar que Lock debe esperar hasta que pueda obtener un puntero de memoria válido antes de devolverlo. Si se establece este bit, Lock nunca devuelve DDERR_WASSTILLDRAWING.
DDLOCK_WRITEONLY La superficie en la que se bloquea solo se escribirá. En Windows 2000 y versiones posteriores, esta marca nunca se establece.

fpProcess

Especifica un puntero a una asignación en modo de usuario de la memoria del controlador. El controlador realiza esta asignación en DdMapMemory. Solo Windows 2000 y versiones posteriores.

Requisitos

   
Encabezado ddrawint.h (incluya Winddi.h)

Consulte también

DdLock

DdMapMemory

LockD3DBuffer