다음을 통해 공유


디스플레이 드라이버의 특수 효과

Windows 2000 이상 운영 체제 버전은 다음과 같은 특수 효과를 지원합니다.

  • 디스플레이 하드웨어가 알파 혼합을 지원하는 경우 디스플레이 드라이버는 DrvAlphaBlend를 구현할 수 있습니다.

  • 디스플레이 하드웨어가 그라데이션 채우기를 지원하는 경우 디스플레이 드라이버는 DrvGradientFill을 구현해야 합니다.

알파 혼합

Microsoft Windows 2000 이상 셸은 알파 혼합을 광범위하게 사용하여 혼합혼합 애니메이션알파 커서와 같은 작업을 수행합니다. 알파 혼합 작업에는 원본 및 대상 표면 모두에서 읽기가 필요하므로 원본 또는 대상이 비디오 메모리에 있을 때 GDI에 펀트하는 것은 매우 느립니다. 따라서 드라이버의 하드웨어 가속은 눈에 띄게 부드러운 애니메이션을 생성하고 전반적인 시스템 성능을 향상시킵니다.

드라이버는 상수 알파를 사용하여 호환되는 비트맵에서 비트 블록 전송을 위해 DrvAlphaBlend를 구현하고 픽셀당 알파 값이 있는 32bpp BGRA 시스템 메모리 표면에서 DrvAlphaBlend를 구현해야 합니다. DrvAlphaBlend 는 이음새가 보이지 않는 경우 삼각형 텍스처 채우기를 사용하여 구현할 수 있습니다.

DrvAlphaBlend에서 생성된 최악의 오류는 색 채널당 1을 초과하면 안 됩니다. 스트레치와 관련된 경우 원본은 혼합하기 전에 COLORONCOLOR 스트레치(Windows SDK 설명서 참조)여야 합니다. 최악의 경우 오류는 최악의 경우 스트레치 오류와 결합된 색 채널당 하나(1)를 초과하면 안 됩니다.

알파 혼합이 스트레칭과 결합된 경우 다음과 같은 방식으로 디스플레이 드라이버의 DrvAlphaBlend 구현을 평가하는 테스트가 WDK에 있습니다.

  1. 이 테스트는 디스플레이 드라이버의 DrvAlphaBlend를 호출하여 알파 혼합 및 늘어진 사각형을 생성합니다.

  2. 이 테스트는 DrvAlphaBlend 호출에 사용된 것과 동일한 원본 사각형을 사용하여 대상 사각형을 생성합니다.

  3. 2단계의 대상 사각형에 있는 각 픽셀 P에 대해 테스트는 역방향 스트레치를 시뮬레이션하여 확장하기 전에 원본 사각형의 해당 픽셀을 확인합니다. 테스트는 드라이버의 다양한 스트레치 구현을 수용하기 위해 역방향 스트레치에 허용 오차 값을 적용합니다. 그런 다음 테스트는 해당 픽셀에 적용해야 하는 알파 혼합을 계산합니다.

    원본 사각형의 가능한 4개 픽셀(픽셀 P를 중심으로 3 X 3픽셀 정사각형의 모서리)을 확장하여 대상 사각형에서 픽셀 P를 생성할 수 있으므로 테스트는 각 모퉁이 픽셀의 색 값을 DrvAlphaBlend에서 생성된 사각형의 해당 위치에 있는 픽셀의 값과 비교해야 합니다.

최악의 경우 확장 오류는 해당 모서리 픽셀 쌍 간의 색 값에서 가장 큰 차이이며, 그 중 하나는 DrvAlphaBlend에서 생성된 사각형에 있고 다른 하나는 테스트 생성 원본 사각형에 있습니다.

그라데이션 채우기

Windows 2000 이상 셸은 모든 캡션 막대에서 그라데이션 채우기를 사용합니다.

DrvGradientFill에서 생성된 결과는 픽셀당 비트 수에 따라 달라지며 다음 지침을 충족해야 합니다.

24bpp 또는 32bpp 표면

  • 값은 모든 그라데이션된 방향에서 단조로 증가하거나 감소해야 합니다.

  • 사각형 그라데이션의 경우: ulMode == GRADIENT_FILL_RECT_H 경우 각 세로 막대는 단일 색이어야 합니다. ulMode == GRADIENT_FILL_RECT_V 경우 각 가로 막대는 단일 색이어야 합니다.

  • 모든 채널에서 최악의 오류는 ±1을 초과할 수 없습니다.

  • 지역의 엔드포인트는 정확히 일치해야 합니다.

15bpp 또는 16bpp 표면

모든 채널에서 최악의 오류는 ±15를 초과할 수 없습니다.

1bpp ~ 8bpp 표면

이러한 표면에 대한 그라데이션 채우기에는 오류가 허용되지 않습니다. 8bpp 표면의 경우 GDI는 드라이버의 DrvGradientFill 함수를 호출하지 않습니다.

모든 표면에서 클리핑은 결과에 영향을 주지 않습니다.