다음을 통해 공유


PFND3DDDI_DRAWTRIPATCH 콜백 함수(d3dumddi.h)

DrawTriPatch 함수는 새 또는 캐시된 삼각형 패치를 그리거나 이전에 정의된 패치의 사양을 업데이트합니다.

구문

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

매개 변수

[in] hDevice

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

unnamedParam2

pData [in]

그릴 삼각형 패치를 설명하는 D3DDDIARG_DRAWTRIPATCH 구조체에 대한 포인터입니다.

unnamedParam3

pInfo [in]

선택 사항입니다. 삼각형 패치에 대한 정보를 설명하는 D3DDDITRIPATCH_INFO 구조체에 대한 포인터입니다.

unnamedParam4

pPatch [in]

선택 사항입니다. 삼각형 패치의 세 가장자리 각각에 대한 세그먼트 수를 제공하는 세 개의 부동 소수점 값(D3DFLOAT[3])이 포함된 버퍼에 대한 포인터입니다.

반환 값

삼각형 패치가 성공적으로 그려지지 않은 경우 DrawTriPatch는 S_OK 또는 적절한 오류 결과를 반환합니다.

설명

Microsoft Direct3D 런타임이 사용자 모드 디스플레이 드라이버의 DrawTriPatch 함수를 호출하는 경우 필요에 따라 pInfopPatch 매개 변수에 정보를 제공할 수 있습니다. 런타임은 pData에서 지정한 D3DDDIARG_DRAWTRIPATCH 구조체의 Flags 멤버에 플래그를 설정하여 이 선택적 정보를 제공하는지 여부를 나타냅니다.

런타임은 패치 화면을 참조하기 위해 D3DDDIARG_DRAWTRIPATCH 핸들 멤버에 UINT 값을 제공합니다. 런타임이 패치 표면을 다시 그릴 때마다 패치 핸들 값을 전달하며 패치 표면의 D3DDDITRIPATCH_INFO 데이터 구조를 다시 지정할 필요가 없습니다. 사용자 모드 표시 드라이버는 정방향 차이 계수 및 기타 정보를 미리 계산하고 캐시할 수 있습니다. 따라서 동일한 패치 핸들 값을 사용하는 드라이버의 DrawTriPatch 함수에 대한 후속 호출이 더 효율적으로 실행됩니다.

Handle의 실제 값은 애플리케이션에 의해 결정되며 런타임 제어를 받지 않습니다. 따라서 드라이버는 UINT에서 지정할 수 있는 모든 값을 처리해야 합니다.

특수 핸들 값이 0이면 패치가 동적임을 나타냅니다. 따라서 드라이버는 패치에 대한 정보를 미리 계산하거나 캐시할 수 없습니다. Handle의 0이 아닌 값은 패치가 정적(또는 낮은 빈도로 업데이트됨)임을 나타냅니다. 따라서 드라이버는 패치에 대한 정보를 미리 계산하고 캐시할 수 있습니다.

드라이버는 DrawTriPatch 함수에서 다음 시나리오를 처리해야 합니다.

  • Handle 멤버가 0이면 패치가 동적입니다. 드라이버는 패치에 대한 정보를 미리 계산하거나 캐시해서는 안 됩니다. 이 경우 런타임은 pInfo 매개 변수의 D3DDDITRIPATCH_INFO 구조체에 대한 포인터를 전달하고 D3DDDIARG_DRAWTRIPATCH 구조체의 Flags 멤버에서 RTPATCHFLAG_HASINFO 플래그를 설정하여 pInfo에서 D3DDDITRIPATCH_INFO 구조체의 존재를 나타냅니다. 필요에 따라 런타임은 플래그 에서 RTPATCHFLAG_HASSEGS 플래그를 설정하여 pPatch 매개 변수로 지정된 세그먼트 정보의 존재를 나타낼 수도 있습니다. 그러나 런타임이 pPatch에서 세그먼트 정보를 제공하지 않는 경우 런타임은 대신 D3DRS_PATCHSEGMENTS 렌더링 상태 값을 사용해야 합니다.
  • 드라이버의 DrawTriPatch 함수에 대한 이전 호출에서 0이 아닌 핸들 값을 지정하지 않은 경우 런타임은 캐시 가능한 새 패치를 그립니다. 드라이버는 캐시된 데이터를 저장하기 위해 메모리를 할당해야 하며 이 데이터를 패치 핸들 테이블에 추가해야 합니다. 런타임이 이전에 이 패치를 그리지 않았기 때문에 런타임은 RTPATCHFLAG_HASINFO 플래그를 설정하고 pInfo 매개 변수의 D3DDDIRECTPATCH_INFO 구조에 포인터를 전달해야 합니다. 드라이버는 패치 정보의 존재를 확인하려면 RTPATCHFLAG_HASINFO 플래그에 대해 검사 합니다. 패치 정보가 지정되지 않은 경우 드라이버는 DrawTriPatch 호출을 무시해야 하며 패치 핸들 테이블의 캐시된 데이터에 대한 메모리를 할당해서는 안 됩니다. 필요에 따라 런타임은 세그먼트 정보의 존재를 나타내기 위해 RTPATCHFLAG_HASSEGS 플래그를 설정할 수 있습니다. 그러나 런타임이 pPatch에서 세그먼트 정보를 제공하지 않는 경우 런타임은 대신 D3DRS_PATCHSEGMENTS 렌더링 상태 값을 사용해야 합니다.
  • 드라이버의 DrawTriPatch 함수에 대한 이전 호출에서 0이 아닌 핸들 값을 지정하고 RTPATCHFLAG_HASINFO 플래그를 설정한 경우 런타임은 패치에 대한 정의를 업데이트합니다. 런타임은 pInfo 매개 변수의 D3DDDITRIPATCH_INFO 구조에 대한 포인터를 전달하고 드라이버는 패치 정보를 다시 계산하고 복구해야 합니다. 필요에 따라 런타임은 세그먼트 정보의 존재를 나타내기 위해 RTPATCHFLAG_HASSEGS 플래그를 설정할 수 있습니다. 그러나 런타임이 pPatch에서 세그먼트 정보를 제공하지 않는 경우 런타임은 대신 D3DRS_PATCHSEGMENTS 렌더링 상태 값을 사용해야 합니다.
  • 드라이버의 DrawTriPatch 함수에 대한 이전 호출에서 0이 아닌 핸들 값을 지정했으며 RTPATCHFLAG_HASINFO 플래그가 설정되지 않은 경우 런타임은 패치를 다시 그립니다. 드라이버는 캐시된 정보를 사용하여 패치를 그려야 합니다. 이 경우 드라이버는 현재 꼭짓점 스트림을 무시하고 캐시된 정보를 대신 사용합니다. 그러나 런타임은 여전히 새 세그먼트 정보를 지정할 수 있습니다. 따라서 드라이버는 캐시된 패치를 사용하는 경우에도 RTPATCHFLAG_HASSEGS 플래그에 대해 검사 지정된 세그먼트 정보를 처리해야 합니다.
드라이버는 D3DRS_DELETERTPATCH 렌더링 상태를 통해 캐시된 패치 정보를 해제하라는 알림을 받습니다. 이 렌더링 상태의 값은 삭제할 패치입니다.

요구 사항

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

추가 정보

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS