다음을 통해 공유


Depth-Stencil 값 복사

Microsoft Direct3D 런타임은 사용자 모드 디스플레이 드라이버의 Blt 함수를 호출하여 비디오 메모리에서 시스템 메모리로 깊이 스텐실 값을 복사하거나 그 반대의 경우도 마찬가지입니다. 드라이버와 하드웨어는 드라이버에서 지원하는 모든 불투명 깊이 스텐실 형식(즉, D3DDDIFMT_D*_LOCKABLE 제외한 D3DDDIFORMAT 열거형 형식으로 정의된 모든 형식)에서 다음 형식으로 또는 그로부터 형식 변환을 수행해야 합니다.

  • D3DDDIFMT_D16_LOCKABLE

  • D3DDDIFMT_D32_LOCKABLE

  • D3DDDIFMT_D32F_LOCKABLE

  • D3DDDIFMT_S8_LOCKABLE

드라이버는 원본 형식으로 존재하지만 대상 형식에는 없는 채널(깊이 또는 스텐실)을 삭제합니다. 런타임은 공통 채널 형식을 공유하지 않는 깊이 스텐실 표면 간에 복사를 허용하지 않습니다.

드라이버는 먼저 원본 깊이 값을 32비트 부호 없는 정수 값으로 변환한 다음, 32비트 부호 없는 정수 값에서 대상 표현으로 변환합니다. 다음 규칙은 두 변환 모두에 적용됩니다.

  • 원본 깊이 값이 부동 소수점 값이면 [0,1]에 대한 클램프가 적용되고 결과가 _MAX_UINT 곱됩니다.

  • 원본이 정수이고 대상이 낮은 정밀도 정수인 경우 가장 오른쪽에 있는 추가 비트가 제거됩니다.

  • 원본이 정수이고 대상이 더 높은 정밀도 정수인 경우 가장 오른쪽 추가 비트는 가장 왼쪽에 있는 중요한 비트에서 복제됩니다.

  • 원본이 정수이고 대상이 부동 소수점 값인 경우 32비트 정수는 부동 소수점 값으로 변환되고 결과는 _MAX_UINT 구분됩니다.

드라이버는 형식이 아닌 분산 깊이 값에 특별한 처리를 제공할 필요가 없습니다.

드라이버는 원본 스텐실 값을 8비트 정수로 확장합니다(즉, 드라이버는 왼쪽에 0으로 원본 스텐실 값을 채운다). 대상 표현에서 낮은 정밀도를 사용하는 경우 드라이버는 변환을 수행하기 위해 가장 중요한 비트를 삭제해야 합니다.

사용자 모드 표시 드라이버는 임의 하위 스텐실의 깊이 스텐실 복사본을 지원해야 합니다. 그러나 드라이버는 깊이 스텐실 복사 중에 미러, 늘이기 또는 색 키 작업을 수행할 필요가 없습니다. 점 샘플링은 깊이 스텐실 복사 중에 암시적으로 필요합니다.