다음을 통해 공유


DXGK_GDIARG_TRANSPARENTBLT 구조체(d3dkmddi.h)

DXGK_GDIARG_TRANSPARENTBLT 구조는 투명도를 사용하여 GDI 하드웨어 가속 비트 블록 전송(비트블릿) 작업의 특성을 설명합니다.

구문

typedef struct _DXGK_GDIARG_TRANSPARENTBLT {
  [in] RECT                      SrcRect;
  [in] RECT                      DstRect;
       UINT                      SrcAllocationIndex;
       UINT                      DstAllocationIndex;
       UINT                      Color;
       UINT                      NumSubRects;
       RECT                      *pSubRects;
       D3DKM_TRANSPARENTBLTFLAGS Flags;
       UINT                      SrcPitch;
} DXGK_GDIARG_TRANSPARENTBLT;

멤버

[in] SrcRect

복사할 사각형 영역을 정의하는 RECT 구조체입니다. 이 사각형은 원본 표면의 좌표계에 지정되며 왼쪽 위와 오른쪽 아래의 두 점으로 정의됩니다. 사각형을 정의하는 두 지점은 항상 순서가 잘 정렬됩니다.

자세한 내용은 주의 섹션을 참조하세요.

[in] DstRect

수정할 사각형 영역을 정의하는 RECT 구조체입니다. 이 사각형은 대상 표면의 좌표계에 지정되며 왼쪽 위와 오른쪽 아래의 두 점으로 정의됩니다. 사각형은 오른쪽 아래에 배타적입니다. 즉, 아래쪽 및 오른쪽 가장자리는 비트 블록 전송의 일부가 아닙니다. 사각형을 정의하는 두 지점은 항상 순서가 잘 정렬됩니다.

DstRect에서 정의한 대상 사각형은 대상 표면의 범위를 초과할 수 있지만 하위 사각형은 초과할 수 없습니다. 또한 모든 하위 사각형은 대상 표면 내부에 적합하도록 보장됩니다. 하위 사각형은 대상 사각형보다 작은 경계 사각형으로 더 제한할 수 있습니다.

자세한 내용은 주의 섹션을 참조하세요.

SrcAllocationIndex

[in] SrcRect 원본 사각형에서 참조하는 할당을 지정하는 할당 목록의 요소 인덱스입니다.

DstAllocationIndex

[in] DstRect 대상 사각형에서 참조하는 할당을 지정하는 할당 목록의 요소 인덱스입니다.

Color

[in] 원본 표면의 실제 투명 색을 32비트 ARGB 부호 없는 픽셀 형식으로 지정합니다(D3DDDIFORMAT 열거형의 D3DDDIFMT_A8R8G8B8 값으로 정의됨). 으로 지정된 투명 색과 일치하는 원본 표면의 픽셀은 복사되지 않습니다.

NumSubRects

[in] DstRect 대상 사각형으로 제한된 대상 표면 공간의 하위 사각형 수입니다.

pSubRects

[in] 대상 표면 공간의 하위 사각형에 대한 포인터입니다.

Flags

[in] 디스플레이 어댑터의 하드웨어 가속 투명 비트 블록 전송 기능을 지정하는 D3DKM_TRANSPARENTBLTFLAGS 구조체입니다.

SrcPitch

[in] 원본 표면의 피치(바이트)입니다.

설명

SrcRectDstRect 멤버가 지정한 사각형은 각각 원본 및 대상 표면 공간의 모든 하위 사각형을 바인딩합니다. 원본 및 대상 사각형이 동일한 표면에서 겹치는 경우 Microsoft DirectX 그래픽 커널 하위 시스템은 투명한 비트 블록 전송을 요청하지 않습니다.

투명한 비트 블록 전송 작업을 완료하려면 다음 수식을 사용하여 DstRect 의 각 픽셀 색을 계산해야 합니다.

typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
  if (SourceColor != tblt.Color)
 {
  DestinationColor = SourceColor; 
 }
}
else
{
 if ((SourceColor & 0x00FFFFFF) != tblt.Color)
 {
  DestinationColor = SourceColor; 
 }
}

이 경우 ARGB 형식의 0x00FFFFFF 값은 alpha = 0을 나타내므로 알파 혼합이 구현되지 않습니다.

스트레치 비트 블록 전송 작업이 필요한 경우 x 및 y 스트레치 비율은 각각 DstRectSrcRect의 x 및 y 크기의 비율로 계산됩니다. 또한 Stretch 작업은 Wingdi.h 의 COLORONCOLOR 값이 설정된 것처럼 진행됩니다. 축소 비트 블록 전송에서는 픽셀을 결합할 필요가 없도록 충분한 픽셀을 무시해야 합니다. 늘이는 비트 블록 전송에서 픽셀을 복제해야 합니다.

투명한 비트 블록 전송에 대한 자세한 내용은 비트맵 복사를 참조하세요.

하위 사각형이 원본 표면 공간으로 변환되면 결과가 원본 표면 내에 있음을 보장합니다. 대상 표면의 하위 사각형 좌표가 원본 표면의 좌표로 변환되는 것은 다음 수식에 의해 정의됩니다. 여기서는 다음과 같습니다.

  • (Xd, Yd)는 하위 사각형 내의 점입니다.
  • (Xs, Ys)는 원본 사각형 내의 지점입니다.
float Ws = SrcRect.right - SrcRect.left;
float Wd = DstRect.right - DstRect.left;
int Xs = round((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left - 0.5)
OR
int Xs = truncate((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left)

float Hs = SrcRect.bottom - SrcRect.top;
float Hd = DstRect.bottom - DstRect.top;
int Ys = round((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top - 0.5)
OR
int Ys = truncate((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top)

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7
머리글 d3dkmddi.h(D3dkmddi.h 포함)

추가 정보

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT