PFND3DDDI_PRESENT 콜백 함수(d3dumddi.h)

Present 함수는 애플리케이션이 렌더링을 완료했음을 사용자 모드 표시 드라이버에 알리고 드라이버가 복사 또는 대칭 이동으로 원본 표면을 표시하거나 드라이버가 색 채우기 작업을 수행해 줄 것을 요청합니다.

구문

PFND3DDDI_PRESENT Pfnd3dddiPresent;

HRESULT Pfnd3dddiPresent(
  HANDLE hDevice,
  const D3DDDIARG_PRESENT *unnamedParam2
)
{...}

매개 변수

hDevice

디스플레이 디바이스(그래픽 컨텍스트)에 대한 핸들입니다.

unnamedParam2

pData [in]

표시할 리소스를 설명하는 D3DDDIARG_PRESENT 구조체에 대한 포인터입니다.

반환 값

Present 는 다음 값 중 하나를 반환합니다.

반환 코드 설명
S_OK 리소스가 성공적으로 표시됩니다.
E_OUTOFMEMORY 가 완료되는 데 필요한 메모리를 할당할 수 없습니다.

설명

Microsoft Direct3D 런타임은 사용자 모드 디스플레이 드라이버의 Present 함수를 호출하여 사용자 모드 디스플레이 드라이버에 애플리케이션 렌더링이 완료되었음을 알리고 드라이버가 원본 표면을 표시하거나 드라이버가 색 채우기 작업을 수행하도록 요청합니다. pData 매개 변수가 가리키는 D3DDDIARG_PRESENT 구조체의 hSrcResource 멤버가 NULL이 아닌 경우 Present는 사용자 모드 표시 드라이버가 화면에 새 콘텐츠를 표시하도록 요청합니다. hSrcResourceNULL이면 사용자 모드 표시 드라이버가 화면에 색 채우기 작업을 수행하도록 요청합니다.

D3DDDIARG_PRESENT 구조체의 hDstResource 멤버가 NULL이면 대상 표면을 알 수 없습니다. 또한 대상 표면과 클리핑 사각형 목록은 DMA를 통해 하드웨어 명령 스트림을 그래픽 프로세서로 보내기 전에 커널 모드에서 결정됩니다.

따라서 사용자 모드 표시 드라이버는 현재 작업을 수행하기 위한 하드웨어 지침을 생성할 수 없습니다. 이러한 하드웨어 지침은 디스플레이 미니포트 드라이버에서 생성해야 합니다. 그러나 D3DDDIARG_PRESENT hSrcResource 멤버가 NULL이 아닌 경우 사용자 모드 표시 드라이버는 원본 표면에 할당 핸들을 파생하고 pfnPresentCb 함수를 호출하여 D3DDDICB_PRESENT 구조체의 hSrcAllocation 멤버에 이 핸들을 삽입해야 합니다. 그러면 디스플레이 미니포트 드라이버가 하드웨어 지침을 성공적으로 생성할 수 있습니다. 사용자 모드 표시 드라이버는 일반적으로 D3DDDIARG_PRESENT 구조의 리소스 정보에서 할당 핸들을 파생합니다.

D3DDDIARG_PRESENT hDstResource 멤버가 NULL이 아닌 경우 현재 대상 표면이 알려져 있으며 사용자 모드 표시 드라이버는 해당 할당 핸들로 D3DDDICB_PRESENThDstAllocation 멤버를 채워야 합니다.

사용자 모드 표시 드라이버가 0x0000000C 미만의 DDI 버전을 노출하는 경우(드라이버가 드라이버의 OpenAdapter 함수 호출에서 D3D10DDIARG_OPENADAPTER 구조의 DriverVersion 멤버에서 이 값을 반환함) Direct3D 런타임은 먼저 사용자 모드 표시 드라이버의 Flush 함수를 호출하여 런타임이 사용자 모드 표시 드라이버의 Present 함수를 호출하기 전에 명령 버퍼에서 미해결 하드웨어 명령을 제출합니다. 이러한 방식으로 사용자 모드 표시 드라이버의 Present 함수는 렌더링 작업(즉, pfnRenderCb 함수 호출)을 사용하여 직렬화됩니다. 사용자 모드 표시 드라이버가 DDI 버전의 0x0000000C 이상을 노출하고 호출 애플리케이션이 창 모드로 실행되는 경우 런타임은 Present를 호출하기 전에 Flush를 호출합니다. 사용자 모드 표시 드라이버가 DDI 버전의 0x0000000C 이상을 노출하고 호출 애플리케이션이 전체 화면 모드로 실행되는 경우 런타임은 Present를 호출하기 전에 Flush를 호출하지 않습니다. 이 동작을 사용하면 자체 스레딩을 구현하는 드라이버가 현재 호출을 큐에 대기할 수 있습니다. DDI 버전의 0x0000000C 이상을 노출하는 드라이버는 pfnPresentCb 함수를 호출하기 전에 pfnRenderCb를 호출하여 미해결 명령 버퍼를 내부적으로 플러시해야 합니다.

요구 사항

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

추가 정보

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

플러시

pfnRenderCb