Método IDirectDrawSurface7::Lock (ddraw.h)
Obtém um ponteiro para a memória da superfície.
Sintaxe
HRESULT Lock(
[in] LPRECT unnamedParam1,
[in, out] LPDDSURFACEDESC2 unnamedParam2,
[in] DWORD unnamedParam3,
[in] HANDLE unnamedParam4
);
Parâmetros
[in] unnamedParam1
Um ponteiro para uma estrutura RECT que identifica a região da superfície que está sendo bloqueada. Se esse parâmetro for NULL, toda a superfície será bloqueada.
[in, out] unnamedParam2
Um ponteiro para uma estrutura DDSURFACEDESC2 que descreve detalhes relevantes sobre a superfície e que recebe informações sobre a superfície.
[in] unnamedParam3
Uma combinação de sinalizadores que determinam como bloquear a superfície. Os seguintes sinalizadores são definidos:
DDLOCK_DONOTWAIT
Nas interfaces IDirectDrawSurface7 , o padrão é DDLOCK_WAIT. Se você quiser substituir o padrão e usar o tempo quando o acelerador estiver ocupado (conforme indicado pela DDERR_WASSTILLDRAWING valor retornado), use DDLOCK_DONOTWAIT.
DDLOCK_EVENT
Não implementado atualmente.
DDLOCK_NOOVERWRITE
Novo para DirectX 7.0. Usado somente com bloqueios de buffer de vértice Direct3D. Indica que nenhum vértices que foram referenciados em uma operação de desenho desde o início do quadro (ou o último bloqueio sem esse sinalizador) é modificado durante o bloqueio. Isso pode ser útil quando você deseja acrescentar apenas dados ao buffer de vértice.
DDLOCK_NOSYSLOCK
Não pegue o Win16Mutex (também conhecido como Win16Lock). Esse sinalizador é ignorado ao bloquear a superfície primária.
DDLOCK_DISCARDCONTENTS
Novo para DirectX 7.0. Usado somente com bloqueios de buffer de vértice Direct3D. Indica que nenhuma suposição é feita sobre o conteúdo do buffer de vértice durante esse bloqueio. Isso permite que o Direct3D ou o driver forneçam uma área de memória alternativa como o buffer de vértice. Isso é útil quando você planeja limpar o conteúdo do buffer de vértice e preencher novos dados.
DDLOCK_OKTOSWAP
Esse sinalizador é obsoleto e foi substituído pelo sinalizador DDLOCK_DISCARDCONTENTS.
DDLOCK_READONLY
Indica que a superfície que está sendo bloqueada só pode ser lida.
DDLOCK_SURFACEMEMORYPTR
Indica que um ponteiro de memória válido para a parte superior do retângulo especificado deve ser retornado. Se nenhum retângulo for especificado, um ponteiro para a parte superior da superfície será retornado. Esse é o padrão.
DDLOCK_WAIT
Se um bloqueio não puder ser obtido porque uma operação bitblt (transferência de bloco de bits) está em andamento, Lock tentará novamente até que um bloqueio seja obtido ou outro erro ocorra, como DDERR_SURFACEBUSY.
DDLOCK_WRITEONLY
Indica que a superfície que está sendo bloqueada está habilitada para gravação.
[in] unnamedParam4
Identificador do evento. Esse parâmetro não é usado no momento e deve ser definido como NULL.
Retornar valor
Se o método for bem-sucedido, o valor retornado será DD_OK.
Se falhar, o método poderá retornar um dos seguintes valores de erro:
- DDERR_INVALIDOBJECT
- DDERR_INVALIDPARAMS
- DDERR_OUTOFMEMORY
- DDERR_SURFACEBUSY
- DDERR_SURFACELOST
- DDERR_WASSTILLDRAWING
Comentários
Em IDirectDrawSurface7, o comportamento padrão de Lock é aguardar a conclusão do acelerador. Portanto, em condições padrão, Lock nunca retorna DDERR_WASSTILLDRAWING. Se você quiser ver os códigos de erro e não esperar até que a operação bitblt seja bem-sucedida, use o sinalizador DDLOCK_DONOTWAIT.
Depois de recuperar um ponteiro de memória de superfície, você pode acessar a memória da superfície até que um método IDirectDrawSurface7::Unlock correspondente seja chamado. Quando a superfície é desbloqueada, o ponteiro para a memória da superfície é inválido.
Não chame as funções bitblt DirectDraw para bitblt de uma região bloqueada de uma superfície. Se você fizer isso, o bitblt retornará DDERR_SURFACEBUSY ou DDERR_LOCKEDSURFACES. As funções blit GDI também falham silenciosamente quando usadas em uma superfície de memória de vídeo bloqueada.
A menos que você inclua o sinalizador DDLOCK_NOSYSLOCK, Lock faz com que o DirectDraw mantenha o Win16Mutex (também conhecido como Win16Lock) até que você chame o método IDirectDrawSurface7::Unlock . Os depuradores de GUI não podem operar enquanto o Win16Mutex é mantido.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | ddraw.h |
Biblioteca | Ddraw.lib |
DLL | Ddraw.dll |