PFND3DDDI_LOCK 콜백 함수(d3dumddi.h)
Lock 함수는 리소스 내에서 지정된 리소스 또는 표면을 잠급니다.
구문
PFND3DDDI_LOCK Pfnd3dddiLock;
HRESULT Pfnd3dddiLock(
HANDLE hDevice,
D3DDDIARG_LOCK *unnamedParam2
)
{...}
매개 변수
hDevice
디스플레이 디바이스(그래픽 컨텍스트)에 대한 핸들입니다.
unnamedParam2
pData [in, out]
잠글 리소스 내의 리소스 또는 표면을 설명하는 D3DDDIARG_LOCK 구조체에 대한 포인터입니다.
반환 값
Lock 은 다음 값 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
S_OK | 리소스가 성공적으로 잠겼습니다. |
E_OUTOFMEMORY | 잠금이 완료되는 데 필요한 메모리를 할당할 수 없습니다. |
D3DDDIERR_WASSTILLDRAWING | Microsoft Direct3D 런타임이 D3DDDIARG_LOCK 의 Flags 멤버에 DoNotWait 비트 필드 플래그가 설정된 Lock 함수를 호출했을 때 리소스가 유휴 상태가 아니었습니다. |
설명
Microsoft Direct3D 런타임은 사용자 모드 디스플레이 드라이버의 Lock 함수를 호출하여 리소스 또는 리소스 내의 표면을 잠급니다. 이 잠긴 리소스 또는 표면은 CPU에서 읽기 및 쓰기 작업을 사용하여 읽거나 쓸 수 있습니다. 런타임이 Lock을 호출할 때 사용자 모드 표시 드라이버는 런타임의 pfnLockCb 콜백 함수를 호출하여 리소스 또는 표면에 해당하는 할당을 잠급니다. 사용자 모드 디스플레이 드라이버는 각 리소스 또는 표면에 대해 여러 할당을 할당할 수 있으므로 런타임에 잠금 호출을 반환하기 전에 pfnLockCb에서 반환된 할당 포인터를 적절하게 변환하거나 처리해야 할 수 있습니다.
일반적으로 Lock에 대한 호출은 드라이버가 그리기 기본 함수(즉, DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive 및 DrawPrimitive2에 대한 호출)에 대한 호출을 수신하기 전에 드라이버의 Unlock 함수에 대한 호출을 일치시키는 것입니다. 이 순서는 드라이버가 잠긴 리소스에서 그리도록 요청되지 않도록 보장합니다. 그러나 경우에 따라 소프트웨어 변환 및 조명을 수행할 때 런타임은 리소스를 잠금 해제하기 전에 드라이버의 그리기 기본 함수 중 하나를 호출해야 합니다(현재 꼭짓점 버퍼만 이 동작을 표시함). 런타임은 D3DDDIARG_CREATERESOURCE 및 D3DDDIARG_LOCK 구조체의 Flags 멤버(즉, 생성 시 및 잠금 시)의 MightDrawFromLocked 비트 필드 플래그에서 이 일반적이지 않은 동작이 발생할 수 있는 꼭짓점 버퍼를 표시합니다. 하드웨어가 잠긴 꼭짓점 버퍼에서 적극적으로 렌더링되는 경우 런타임이 잠긴 꼭짓점 버퍼 의 데이터를 덮어쓰지 않으므로 드라이버가 특별한 작업을 수행할 필요가 없습니다.
런타임은 사용자 모드 디스플레이 드라이버의 Lock 함수를 호출하여 미리 할당된 시스템 메모리 표면도 잠급니다. 이 작업을 통해 사용자 모드 표시 드라이버는 하드웨어 명령 스트림에 있을 수 있는 이러한 표면에 대한 참조를 제대로 동기화할 수 있습니다. 사용자 모드 표시 드라이버는 다음을 통해 동기화를 수행할 수 있습니다.
- 필요에 따라 모든 미해결 명령을 플러시(즉, 런타임의 pfnRenderCb 콜백 함수 호출)합니다.
- 하드웨어에 이미 제출된 명령에 대한 적절한 할당 핸들을 사용하여 pfnLockCb 를 호출합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | d3dumddi.h(D3dumddi.h 포함) |