다음을 통해 공유


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, DrawPrimitiveDrawPrimitive2에 대한 호출)에 대한 호출을 수신하기 전에 드라이버의 Unlock 함수에 대한 호출을 일치시키는 것입니다. 이 순서는 드라이버가 잠긴 리소스에서 그리도록 요청되지 않도록 보장합니다. 그러나 경우에 따라 소프트웨어 변환 및 조명을 수행할 때 런타임은 리소스를 잠금 해제하기 전에 드라이버의 그리기 기본 함수 중 하나를 호출해야 합니다(현재 꼭짓점 버퍼만 이 동작을 표시함). 런타임은 D3DDDIARG_CREATERESOURCE 및 D3DDDIARG_LOCK 구조체의 Flags 멤버(즉, 생성 시 및 잠금 시)의 MightDrawFromLocked 비트 필드 플래그에서 이 일반적이지 않은 동작이 발생할 수 있는 꼭짓점 버퍼를 표시합니다. 하드웨어가 잠긴 꼭짓점 버퍼에서 적극적으로 렌더링되는 경우 런타임이 잠긴 꼭짓점 버퍼 의 데이터를 덮어쓰지 않으므로 드라이버가 특별한 작업을 수행할 필요가 없습니다.

런타임은 사용자 모드 디스플레이 드라이버의 Lock 함수를 호출하여 미리 할당된 시스템 메모리 표면도 잠급니다. 이 작업을 통해 사용자 모드 표시 드라이버는 하드웨어 명령 스트림에 있을 수 있는 이러한 표면에 대한 참조를 제대로 동기화할 수 있습니다. 사용자 모드 표시 드라이버는 다음을 통해 동기화를 수행할 수 있습니다.

  • 필요에 따라 모든 미해결 명령을 플러시(즉, 런타임의 pfnRenderCb 콜백 함수 호출)합니다.
  • 하드웨어에 이미 제출된 명령에 대한 적절한 할당 핸들을 사용하여 pfnLockCb 를 호출합니다.
사용자 모드 디스플레이 드라이버는 잠긴 표면의 메모리와 pSurfData 의 표면 피치 및 D3DDDIARG_LOCK 구조체의 피치 멤버에 대한 포인터를 반환합니다. 그러나 사전 할당된 시스템 메모리 표면의 경우 드라이버가 잠금 호출에 실패하여 애플리케이션으로 장애 복구(failback)할 수 있지만 런타임은 드라이버 집합 메모리 및 피치를 무시합니다. 런타임은 D3DDDIARG_LOCK 구조의 Flags 멤버에 NotifyOnly 비트 필드 플래그를 설정하여 미리 할당된 시스템 메모리 표면을 다른 Lock 호출과 잠그는 Lock 호출을 구분합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 d3dumddi.h(D3dumddi.h 포함)

추가 정보

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb