Compartilhar via


estrutura DD_LOCKDATA (ddrawint.h)

A estrutura DD_LOCKDATA contém informações necessárias para fazer um bloqueio, conforme definido pelas estruturas de parâmetro do Microsoft DirectDraw.

Sintaxe

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;

Membros

lpDD

Aponta para uma estrutura DD_DIRECTDRAW_GLOBAL que descreve o dispositivo do driver.

lpDDSurface

Aponta para uma estrutura DD_SURFACE_LOCAL que descreve a superfície , no caso de LockD3DBuffer, um buffer - associada à região de memória a ser bloqueada.

bHasRect

Especifica se a área em rArea é válida. Um valor de 0x00000001 indica uma área válida, 0x00000000 indica uma área inválida.

rArea

Especifica uma estrutura RECTL que define a área na superfície a ser bloqueada.

lpSurfData

Especifica o local em que o driver pode retornar um ponteiro para a região de memória que ele bloqueou.

ddRVal

Especifica o local em que o driver grava o valor retornado do retorno de chamada DdLock ou LockD3DBuffer . Um código de retorno de DD_OK indica êxito. Para obter mais informações, consulte Valores retornados para DirectDraw.

Lock

Usado pela API do DirectDraw e não deve ser preenchido pelo driver.

dwFlags

Especifica uma máscara de bits que informa ao driver como executar o bloqueio de memória. Esse membro é um OR bit a bit de qualquer um dos seguintes valores:

Sinalizador Significado
DDLOCK_DISCARDCONTENTS
Nenhuma suposição é feita sobre o conteúdo da superfície ou do buffer de vértice durante esse bloqueio. Isso permite duas coisas:
1. O Microsoft Direct3D ou o driver podem fornecer uma área de memória alternativa como o buffer de vértice. Isso é útil quando se planeja limpar o conteúdo do buffer de vértice e preencher novos dados.
2. Os drivers às vezes armazenam dados de superfície em um formato reordenado. Quando o aplicativo bloqueia a superfície, o driver é forçado a desfazer essa reordenação de dados de superfície antes de permitir que o aplicativo veja o conteúdo da superfície.

Esse sinalizador é uma dica para o driver de que ele pode ignorar o processo de desordenação, pois o aplicativo planeja substituir cada pixel na superfície ou retângulo bloqueado (e assim apagar todos os pixels não reordenados de qualquer maneira). Os aplicativos sempre devem definir esse sinalizador quando pretendem substituir toda a superfície ou o retângulo bloqueado.

DDLOCK_DONOTWAIT Em interfaces IDirectDrawSurface7 e superiores, o padrão é DDLOCK_WAIT. Se você quiser substituir o padrão e usar o tempo quando o acelerador estiver ocupado (conforme indicado pelo código de retorno DDERR_WASSTILLDRAWING), use esse sinalizador.
DDLOCK_EVENT Defina se um identificador de evento está sendo passado para Lock, o que dispara o evento quando ele pode retornar o ponteiro de memória da superfície solicitado.
DDLOCK_HASVOLUMETEXTUREBOXRECT O driver deve retornar um ponteiro de memória válido para o início da textura de subvolume especificada no retângulo (RECTL) em rArea. O driver obtém as coordenadas frontal e traseira do subvolume dos 16 primeiros bits das coordenadas esquerda e direita (membros esquerdo e direito de RECTL), respectivamente. As coordenadas esquerda e direita são restritas aos 16 bits inferiores. Se nenhum retângulo for especificado, o driver deverá retornar um ponteiro para a parte superior do volume inteiro. Esse valor está disponível no DirectX 8.1 e posterior.
DDLOCK_NODIRTYUPDATE
Enviado ao driver pelo runtime após um aplicativo solicitar o bloqueio de uma região de memória com o sinalizador D3DLOCK_NO_DIRTY_UPDATE definido. Nesse caso, o driver não deve considerar a região de memória que ele bloqueia como sujo quando o runtime chama a função DdUnlock do driver para atualizar uma superfície que contém essa região. Em vez disso, o driver deve considerar apenas as regiões especificadas em chamadas anteriores para sua função D3dDrawPrimitives2 usando os enumeradores D3DDP2OP_ADDDIRTYRECT e D3DDP2OP_ADDDIRTYBOX como sujo.
Por padrão, um bloqueio em uma superfície adiciona um sujo região a essa superfície.
DDLOCK_NOOVERWRITE Usado somente com bloqueios de buffer de vértice Direct3D. Indica que nenhum vértices que foram referenciados em IDirect3DDevice7::D rawPrimitiveVB e IDirect3DDevice7::D rawIndexedPrimitiveVB (descrito na documentação do SDK do Direct3D) desde o início do quadro (ou o último bloqueio sem esse sinalizador) é modificado durante o bloqueio. Isso pode ser útil quando um só está acrescentando dados ao buffer de vértice.
DDLOCK_NOSYSLOCK
Indica que um bloqueio em todo o sistema não deve ser tomado quando essa superfície está bloqueada. Isso tem várias vantagens ao bloquear superfícies de memória de vídeo, como capacidade de resposta do cursor, capacidade de chamar mais funções do Microsoft Windows e depuração mais fácil. No entanto, um aplicativo que especifica esse sinalizador deve estar em conformidade com várias condições documentadas no arquivo de ajuda.
Esse sinalizador não pode ser especificado ao bloquear o primário.
DDLOCK_OKTOSWAP O mesmo que DDLOCK_DISCARDCONTENTS.
DDLOCK_READONLY A superfície que está sendo bloqueada só será lida. No Windows 2000 e posterior, esse sinalizador nunca é definido.
DDLOCK_SURFACEMEMORYPTR O driver deve retornar um ponteiro de memória válido para a parte superior do retângulo especificado em rArea. Se nenhum retângulo for especificado, o driver deverá retornar um ponteiro para a parte superior da superfície.
DDLOCK_WAIT Defina para indicar que Lock deve aguardar até obter um ponteiro de memória válido antes de retornar. Se esse bit for definido, Lock nunca retornará DDERR_WASSTILLDRAWING.
DDLOCK_WRITEONLY A superfície que está sendo bloqueada será gravada apenas. No Windows 2000 e posterior, esse sinalizador nunca é definido.

fpProcess

Especifica um ponteiro para um mapeamento de modo de usuário da memória do driver. O driver executa esse mapeamento em DdMapMemory. Somente Windows 2000 e posterior.

Requisitos

   
Cabeçalho ddrawint.h (inclua Winddi.h)

Confira também

DdLock

DdMapMemory

LockD3DBuffer