D3DHAL_DP2DRAWRECTPATCH 구조체(d3dhal.h)

DirectX 8.0 이상 버전만 해당합니다.

D3DHAL_DRAWRECTPATCH D3DHAL_DP2COMMAND 구조체의 bCommand 멤버가 D3DDP2OP_DRAWRECTPATCH 설정되고 사각형 패치를 렌더링하는 데 사용되는 경우 D3dDrawPrimitives2 콜백에 의해 명령 버퍼에서 구문 분석됩니다.

구문

typedef struct _D3DHAL_DP2DRAWRECTPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWRECTPATCH;

멤버

Handle

표면과 연결된 핸들을 지정합니다.

Flags

DP2 스트림의 D3DHAL_DP2DRAWRECTPATCH 데이터 구조를 따르는 추가 정보가 있는 경우 를 지정합니다.

설명

핸들 멤버는 표면을 핸들과 연결하는 데 사용되므로 다음에 이 표면을 그릴 때 이 패치에 대한 D3DRECTPATCH_INFO 데이터 구조를 다시 지정하지 않아도 됩니다. 이렇게 하면 드라이버가 정방향 차이 계수 및/또는 기타 정보를 미리 계산하고 캐시할 수 있으므로 동일한 핸들을 사용하는 후속 D3DDP2OP_DRAWRECTPATCH 토큰이 보다 효율적으로 실행되도록 할 수 있습니다. D3DRECTPATCH_INFO 최신 DirectX SDK 설명서에 설명되어 있습니다.

Handle의 실제 값은 애플리케이션에 의해 결정되며 런타임 제어를 받지 않습니다. 따라서 드라이버는 DWORD로 지정할 수 있는 모든 값에 대처할 수 있도록 준비해야 합니다. 특수 핸들 값이 0이면 패치가 동적이며 이 패치에 대한 포인트 사전 계산 또는 캐싱 정보가 없음을 의미합니다. Handle에 대한 영하 값은 패치가 정적(또는 낮은 빈도로 업데이트됨)이며 사전 계산 및 캐싱이 가능하다는 것을 의미합니다.

Flags 멤버는 DP2 스트림의 D3DHAL_DP2DRAWRECTPATCH 데이터 구조를 따르는 추가 정보가 있는 경우 통신하는 데 사용됩니다. RTPATCHFLAG_HASSEGS 지정한 경우 4개의 부동 소수점 값이 DP2 스트림의 D3DHAL_DP2DRAWRECTPATCH 따릅니다. 이러한 부동 소수점은 사각형 패치의 네 가장자리 각각에 대한 세그먼트 수를 제공하고 렌더링 상태 D3DRS_PATCHSEGMENTS 값을 재정의합니다. RTPATCHFLAG_HASINFO 지정하면 DP2 스트림에서 D3DRECTPATCH_INFO 데이터 구조가 뒤따릅니다. 두 플래그를 모두 지정하면 세그먼트 수를 지정하는 4개의 부동 소수점이 D3DHAL_DP2DRAWRECTPATCH 따라가고 D3DRECTPATCH_INFO 구조체는 부동 소수점 값을 따릅니다.

드라이버가 D3DDP2OP_DRAWRECTPATCH 처리할 때 처리해야 하는 네 가지 시나리오가 있습니다.

Handle이 0이면 패치가 동적이며 사전 계산 또는 캐싱을 수행하지 않아야 합니다. 이 경우 D3DRECTPATCH_INFO DP2 스트림의 D3DHAL_DP2DRAWRECTPATCH 따릅니다(플래그 RTPATCHFLAG_HASINFO D3DRECTPATCH_INFO 데이터 구조의 존재를 나타내도록 설정됨). 필요에 따라 세그먼트 정보의 존재를 나타내도록 RTPATCHFLAG_HASSEGS 설정할 수도 있습니다. 그러나 이 값을 생략하면 렌더링 상태 D3DRS_PATCHSEGMENTS 값을 대신 사용해야 합니다.

Handle이 0이 아니고 핸들 값이 이전 D3DDP2OP_DRAWRECTPATCH 지정되지 않은 경우 캐시 가능한 새 패치가 그려지고 있음을 나타냅니다. 드라이버는 캐시된 데이터를 저장하고 이 데이터를 패치 핸들 테이블에 추가하기 위해 메모리를 할당해야 합니다. 이 패치는 이전에 볼 수 없으므로 RTPATCHFLAG_HASINFO 플래그를 설정하고 DP2 스트림에서 D3DRECTPATCH_INFO 구조를 따라야 합니다. 그러나 런타임은 이를 보장하지 않으며 드라이버는 플래그를 테스트하여 패치 정보의 존재를 확인해야 합니다. 정보가 지정되지 않은 경우 이 토큰을 무시해야 하며 드라이버의 패치 핸들 테이블에 핸들을 할당해서는 안 됩니다. 필요에 따라 세그먼트 정보의 존재를 나타내도록 RTPATCHFLAG_HASSEGS 설정할 수도 있습니다. 그러나 이 값을 생략하면 렌더링 상태 D3DRS_PATCHSEGMENTS 값을 대신 사용해야 합니다.

Handle이 0이 아닌 경우 핸들 값이 이전 D3DDP2OP_DRAWRECTPATCH 토큰에 의해 지정되고 Flags 필드에 RTPATCHFLAG_HASINFO 포함되면 패치에 대한 정의가 업데이트됩니다. D3DRECTPATCH_INFO 데이터 구조는 DP2 스트림에서 따르며 드라이버는 이를 사용하여 패치 정보를 다시 계산하고 복구해야 합니다. 필요에 따라 세그먼트 정보의 존재를 나타내도록 RTPATCHFLAG_HASSEGS 설정할 수도 있습니다. 그러나 이 값을 생략하면 렌더링 상태 D3DRS_PATCHSEGMENTS 값을 대신 사용해야 합니다.

Handle이 0이 아닌 경우 핸들 값은 이전 D3DDP2OP_DRAWRECTPATCH 토큰에 의해 지정되었으며 Flags 필드에 RTPATCHFLAG_HASINFO 포함되어 있지 않으면 캐시된 정보를 사용하여 패치를 그려야 합니다. 이 경우 현재 꼭짓점 스트림은 무시됩니다. 캐시된 정보를 대신 사용해야 합니다. 그러나 이 경우에도 새 세그먼트 정보를 지정할 수 있습니다. 따라서 드라이버는 플래그 RTPATCHFLAG_HASSEGS 검사 캐시된 패치를 사용하는 경우에도 지정된 세그먼트 정보를 처리해야 합니다.

드라이버는 렌더링 상태 D3DRS_DELETERTPATCH 통해 캐시된 패치 정보가 해제된다는 알림을 받습니다. 이 렌더링 상태의 값은 삭제할 패치입니다.

요구 사항

요구 사항
헤더 d3dhal.h(D3dhal.h 포함)

추가 정보

D3DDP2OP_DRAWRECTPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWTRIPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2