다음을 통해 공유


PDD_WAITFORVERTICALBLANK 콜백 함수(ddrawint.h)

DdWaitForVerticalBlank 콜백 함수는 디바이스의 세로 빈 상태 반환합니다.

구문

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

매개 변수

unnamedParam1

세로 빈 상태 가져오는 데 필요한 정보가 포함된 DD_WAITFORVERTICALBLANKDATA 구조를 가리킵니다.

반환 값

DdWaitForVerticalBlank 는 다음 콜백 코드 중 하나를 반환합니다.

설명

lpWaitForVerticalBlank에서 DD_WAITFORVERTICALBLANKDATA 구조체의 dwFlags 멤버 값에 따라 드라이버는 다음을 수행해야 합니다.

  • dwFlags가 DDWAITVB_I_TESTVB 경우 드라이버는 현재 세로 공백 상태 쿼리해야 합니다. 모니터가 현재 세로 공백에 있는 경우 드라이버는 DD_WAITFORVERTICALBLANKDATA bIsInVB 멤버를 TRUE 로 설정해야 합니다. 그렇지 않으면 드라이버가 bIsInVBFALSE로 설정해야 합니다.
  • dwFlags가 DDWAITVB_BLOCKBEGIN 경우 드라이버는 차단하고 세로 공백이 시작될 때까지 기다려야 합니다. 드라이버가 블록을 시작할 때 세로 공백이 진행 중인 경우 드라이버는 반환하기 전에 다음 세로 공백이 시작될 때까지 기다려야 합니다.
  • dwFlags가 DDWAITVB_BLOCKEND 경우 드라이버는 차단하고 세로 공백이 끝날 때까지 기다려야 합니다.
드라이버가 dwFlags에 지정된 작업을 성공적으로 처리하면 DD_WAITFORVERTICALBLANKDATA ddRVal 멤버에서 DD_OK 설정하고 DDHAL_DRIVER_HANDLED 반환해야 합니다. 드라이버는 처리할 수 없는 플래그에 대한 DDHAL_DRIVER_NOTHANDLED 반환해야 합니다.

DdWaitForVerticalBlank 를 사용하면 애플리케이션이 VBI(세로 공백 간격)와 동기화할 수 있습니다.

참고 모니터 전원 상태에서 드라이버가 중단되는 경우 DdWaitForVerticalBlank는 폴링 루프를 입력하지 않아야 합니다. 예를 들어 모니터 전원이 다운되는 동안 애플리케이션은 WaitForVerticalBlank를 호출할 수 있습니다. DirectDraw 런타임은 상태 변경되기를 기다리는 디스플레이 드라이버의 DdWaitForVerticalBlank 진입점을 호출합니다. 모니터의 전원이 낮아지면 드라이버 작성기가 이 시나리오를 준비하지 않는 한 이 값은 변경되지 않습니다. 한 가지 해결 방법은 세로 공백을 기다리는 동안 폴링 루프에 시간 초과를 포함하는 것입니다. 샘플 Permedia2 드라이버는 모니터의 전원이 다운된 경우 폴링하지 않도록 설정됩니다.

WHQL DCT(디스플레이 호환성 테스트)에도 문제가 있습니다. 전원 관리용 DCT 중 하나는 모니터를 작동한 다음 수직 빈 상태 폴링하여 변경되기를 기다립니다. 모니터의 전원이 끊어질 때 드라이버가 항상 동일한 세로 공백 상태 보고하는 경우 테스트 애플리케이션은 결과가 변경되기를 기다리는 동안 중단됩니다. 모니터 전원이 낮아지는 동안 교대로 결과를 반환하여 Permedia2 샘플 드라이버에서 수정되었습니다. 즉, 드라이버의 DdWaitForVerticalBlank 진입점이 DDWAIT_I_TESTVB 플래그(모니터의 전원이 다운된 경우)로 처음 호출되면 FALSE를 반환하고 다음에 TRUE를 반환할 때 FALSE를 반환하고 다음번에는 FALSE를 반환합니다.

 

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 ddrawint.h(Winddi.h 포함)

추가 정보

DD_WAITFORVERTICALBLANKDATA