다음을 통해 공유


DD_LOCKDATA 구조체(ddrawint.h)

DD_LOCKDATA 구조에는 Microsoft DirectDraw 매개 변수 구조에 정의된 잠금을 수행하는 데 필요한 정보가 포함되어 있습니다.

구문

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;

멤버

lpDD

드라이버의 디바이스를 설명하는 DD_DIRECTDRAW_GLOBAL 구조를 가리킵니다.

lpDDSurface

잠금할 메모리 영역과 연결된 버퍼인 LockD3DBuffer의 경우 표면을 설명하는 DD_SURFACE_LOCAL 구조를 가리킵니다.

bHasRect

rArea의 영역이 유효한지 여부를 지정합니다. 0x00000001 값은 유효한 영역을 나타내고 0x00000000 잘못된 영역을 나타냅니다.

rArea

잠글 표면의 영역을 정의하는 RECTL 구조를 지정합니다.

lpSurfData

드라이버가 잠긴 메모리 영역에 대한 포인터를 반환할 수 있는 위치를 지정합니다.

ddRVal

드라이버가 DdLock 또는 LockD3DBuffer 콜백의 반환 값을 쓰는 위치를 지정합니다. DD_OK 반환 코드는 성공을 나타냅니다. 자세한 내용은 DirectDraw에 대한 반환 값을 참조하세요.

Lock

DirectDraw API에서 사용되며 드라이버에서 입력하면 안 됩니다.

dwFlags

드라이버에 메모리 잠금을 수행하는 방법을 알려주는 비트 마스크를 지정합니다. 이 멤버는 다음 값 중 비트 OR입니다.

플래그 의미
DDLOCK_DISCARDCONTENTS
이 잠금 중에는 표면 또는 꼭짓점 버퍼의 내용에 대해 가정하지 않습니다. 이렇게 하면 다음 두 가지가 가능합니다.
1. Microsoft Direct3D 또는 드라이버는 대체 메모리 영역을 꼭짓점 버퍼로 제공할 수 있습니다. 이는 꼭짓점 버퍼의 내용을 지우고 새 데이터를 채우려는 경우에 유용합니다.
2. 드라이버가 표면 데이터를 순서가 변경된 형식으로 저장하는 경우가 있습니다. 애플리케이션이 표면을 잠그면 응용 프로그램이 표면 내용을 볼 수 있도록 하기 전에 드라이버에서 이 표면 데이터 순서를 취소해야 합니다.

이 플래그는 애플리케이션이 표면 또는 잠긴 사각형의 모든 단일 픽셀을 덮어쓸 계획이므로 다시 정렬 취소 프로세스를 건너뛸 수 있음을 드라이버에 대한 힌트입니다(다시 정렬되지 않은 픽셀을 지웁니다). 애플리케이션은 전체 표면 또는 잠긴 사각형을 덮어쓰려는 경우 항상 이 플래그를 설정해야 합니다.

DDLOCK_DONOTWAIT IDirectDrawSurface7 이상 인터페이스에서 기본값은 DDLOCK_WAIT. 기본값을 재정의하고 액셀러레이터가 사용 중인 시간(DDERR_WASSTILLDRAWING 반환 코드로 표시됨)을 사용하려는 경우 이 플래그를 사용합니다.
DDLOCK_EVENT 요청된 표면 메모리 포인터를 반환할 수 있을 때 이벤트를 트리거하는 이벤트 핸들이 Lock에 전달되는 경우 를 설정합니다.
DDLOCK_HASVOLUMETEXTUREBOXRECT 드라이버는 rArea의 사각형(RECTL)에 지정된 하위 텍스처의 시작 부분에 유효한 메모리 포인터를 반환해야 합니다. 드라이버는 각각 왼쪽 및 오른쪽 좌표(RECTL의 왼쪽 및 오른쪽 멤버)의 상위 16비트에서 하위 좌표의 앞과 뒤 좌표를 가져옵니다. 왼쪽 및 오른쪽 좌표는 하위 16비트로 제한됩니다. 사각형이 지정되지 않은 경우 드라이버는 전체 볼륨의 맨 위에 포인터를 반환해야 합니다. 이 값은 DirectX 8.1 이상에서 사용할 수 있습니다.
DDLOCK_NODIRTYUPDATE
애플리케이션이 D3DLOCK_NO_DIRTY_UPDATE 플래그가 설정된 메모리 영역을 잠그도록 요청한 후 런타임에 의해 드라이버로 전송됩니다. 이 경우 드라이버는 런타임이 드라이버의 DdUnlock 함수를 호출하여 이 영역이 포함된 표면을 업데이트할 때 잠금되는 메모리 영역을 더티 간주해서는 안 됩니다. 대신 드라이버는 D3DDP2OP_ADDDIRTYRECT 및 D3DDP2OP_ADDDIRTYBOX 열거자를 더티 사용하여 D3dDrawPrimitives2 함수에 대한 이전 호출에서 지정된 지역만 고려해야 합니다.
기본적으로 표면의 잠금은 해당 표면에 더티 영역을 추가합니다.
DDLOCK_NOOVERWRITE Direct3D 꼭짓점 버퍼 잠금에만 사용됩니다. 프레임 시작(또는 이 플래그가 없는 마지막 잠금) 이후 IDirect3DDevice7::D rawPrimitiveVBIDirect3DDevice7::D rawIndexedPrimitiveVB 호출(Direct3D SDK 설명서에 설명됨)에서 참조된 꼭짓점이 수정되지 않음을 나타냅니다. 꼭짓점 버퍼에만 데이터를 추가하는 경우에 유용할 수 있습니다.
DDLOCK_NOSYSLOCK
이 표면이 잠겨 있을 때 시스템 전체 잠금을 수행해서는 안 됨을 나타냅니다. 이렇게 하면 커서 응답성, 더 많은 Microsoft Windows 함수를 호출하는 기능, 더 쉬운 디버깅 등 비디오 메모리 화면을 잠글 때 몇 가지 이점이 있습니다. 그러나 이 플래그를 지정하는 애플리케이션은 도움말 파일에 설명된 여러 조건을 준수해야 합니다.
기본을 잠글 때는 이 플래그를 지정할 수 없습니다.
DDLOCK_OKTOSWAP DDLOCK_DISCARDCONTENTS 동일합니다.
DDLOCK_READONLY 잠겨 있는 표면은 읽기 전용입니다. Windows 2000 이상에서는 이 플래그가 설정되지 않습니다.
DDLOCK_SURFACEMEMORYPTR 드라이버는 rArea에 지정된 사각형의 맨 위에 유효한 메모리 포인터를 반환해야 합니다. 사각형이 지정되지 않은 경우 드라이버는 표면 위쪽에 포인터를 반환해야 합니다.
DDLOCK_WAIT 잠금이 반환되기 전에 유효한 메모리 포인터를 가져올 때까지 기다려야 함을 나타내려면 를 설정합니다. 이 비트가 설정된 경우 Lock 은 DDERR_WASSTILLDRAWING 반환하지 않습니다.
DDLOCK_WRITEONLY 잠겨 있는 표면은 에만 기록됩니다. Windows 2000 이상에서는 이 플래그가 설정되지 않습니다.

fpProcess

드라이버 메모리의 사용자 모드 매핑에 대한 포인터를 지정합니다. 드라이버는 DdMapMemory에서 이 매핑을 수행합니다. Windows 2000 이상에서만 가능합니다.

요구 사항

   
머리글 ddrawint.h(Winddi.h 포함)

추가 정보

DdLock

DdMapMemory

LockD3DBuffer