Compartilhar via


estrutura DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)

A estrutura DXGK_GDIARG_TRANSPARENTBLT descreve as características de uma operação de transferência de bits (bitblt) acelerada por hardware GDI com transparência.

Sintaxe

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;

Membros

[in] SrcRect

Uma estrutura RECT que define a área retangular a ser copiada. Esse retângulo é especificado no sistema de coordenadas da superfície de origem e é definido por dois pontos: superior esquerdo e inferior direito. Os dois pontos que definem o retângulo são sempre bem ordenados.

Para obter mais informações, consulte a seção Comentários.

[in] DstRect

Uma estrutura RECT que define a área retangular a ser modificada. Esse retângulo é especificado no sistema de coordenadas da superfície de destino e é definido por dois pontos: superior esquerdo e inferior direito. O retângulo é exclusivo inferior direito; ou seja, suas bordas inferior e direita não fazem parte da transferência de bloco de bits. Os dois pontos que definem o retângulo são sempre bem ordenados.

O retângulo de destino definido por DstRect pode exceder os limites da superfície de destino, mas sub-retângulos não podem. Além disso, todos os subtângulos são garantidos para caber dentro da superfície de destino. Sub-retângulos podem ser restringidos ainda mais por um retângulo delimitador menor que o retângulo de destino.

Para obter mais informações, consulte a seção Comentários.

SrcAllocationIndex

[in] Um índice do elemento na lista de alocação que especifica a alocação referenciada pelo retângulo de origem SrcRect .

DstAllocationIndex

[in] Um índice do elemento na lista de alocação que especifica a alocação referenciada pelo retângulo de destino DstRect .

Color

[in] Especifica a cor transparente física na superfície de origem, no formato de pixel sem sinal ARGB de 32 bits (conforme definido pelo valor D3DDDIFMT_A8R8G8B8 da enumeração D3DDDIFORMAT ). Todos os pixels na superfície de origem que correspondam à cor transparente especificada por Color não são copiados.

NumSubRects

[in] O número de subtângulos no espaço de superfície de destino delimitado pelo retângulo de destino DstRect .

pSubRects

[in] Um ponteiro para os subtângulos no espaço da superfície de destino.

Flags

[in] Uma estrutura D3DKM_TRANSPARENTBLTFLAGS que especifica as funcionalidades de transferência transparente de bloco de bits aceleradas por hardware do adaptador de vídeo.

SrcPitch

[in] O tom da superfície de origem, em bytes.

Comentários

Os retângulos especificados pelos membros SrcRect e DstRect associaram todos os subtângulos nos espaços de superfície de origem e destino, respectivamente. O subsistema de kernel de elementos gráficos do Microsoft DirectX nunca solicitará uma transferência transparente de bloco de bits se os retângulos de origem e destino se sobrepõem na mesma superfície.

Para concluir a operação de transferência transparente de bloco de bits, a cor de cada pixel no DstRect deve ser calculada usando a seguinte fórmula:

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

Nesse caso, um valor de 0x00FFFFFF no formato ARGB indica alfa = 0, portanto, a mesclagem alfa não é implementada.

Se uma operação de transferência de bloco de bits elástico for necessária, as taxas de alongamento x e y serão calculadas respectivamente como as proporções dos tamanhos x e y de DstRect e SrcRect. Além disso, a operação de alongamento continuará como se o valor COLORONCOLOR em Wingdi.h estivesse definido. Em uma transferência de bloco de bits reduzida, pixels suficientes devem ser ignorados para que os pixels não precisem ser combinados. Em uma transferência de bloco de bits alongada, os pixels devem ser replicados.

Para obter mais informações sobre transferências transparentes de bloco de bits, consulte Copiando Bitmaps.

Quando sub-retângulos são transformados no espaço da superfície de origem, é garantido que o resultado esteja dentro da superfície de origem. A transformação das coordenadas de um sub-retângulo na superfície de destino para coordenadas na superfície de origem é definida pelas seguintes fórmulas, em que:

  • (Xd, Yd) é um ponto dentro do sub-retângulo
  • (Xs, Ys) é um ponto dentro do retângulo de origem
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)

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7
Cabeçalho d3dkmddi.h (inclua D3dkmddi.h)

Confira também

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT