estructura de DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)

La estructura de DXGK_GDIARG_TRANSPARENTBLT describe las características de una operación de transferencia de bloques de bits acelerada por hardware (bitblt) de GDI con transparencia.

Sintaxis

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;

Miembros

[in] SrcRect

Estructura RECT que define el área rectangular que se va a copiar. Este rectángulo se especifica en el sistema de coordenadas de la superficie de origen y se define mediante dos puntos: superior izquierda e inferior derecha. Los dos puntos que definen el rectángulo siempre están bien ordenados.

Para obtener más información, vea la sección Comentarios.

[in] DstRect

Estructura RECT que define el área rectangular que se va a modificar. Este rectángulo se especifica en el sistema de coordenadas de la superficie de destino y se define mediante dos puntos: superior izquierda e inferior derecha. El rectángulo es exclusivo de la parte inferior derecha; es decir, sus bordes inferiores y derecho no forman parte de la transferencia de bloques de bits. Los dos puntos que definen el rectángulo siempre están bien ordenados.

El rectángulo de destino definido por DstRect puede superar los límites de la superficie de destino, pero los subctángulos no pueden. Además, se garantiza que todos los subctángulos se ajusten dentro de la superficie de destino. Los subctángulos se pueden restringir aún más mediante un rectángulo delimitador más pequeño que el rectángulo de destino.

Para obtener más información, vea la sección Comentarios.

SrcAllocationIndex

[in] Índice del elemento de la lista de asignación que especifica la asignación a la que hace referencia el rectángulo de origen SrcRect .

DstAllocationIndex

[in] Índice del elemento de la lista de asignación que especifica la asignación a la que hace referencia el rectángulo de destino DstRect .

Color

[in] Especifica el color físico transparente en la superficie de origen, en formato de píxeles sin signo ARGB de 32 bits (tal como se define en el valor D3DDDIFMT_A8R8G8B8 de la enumeración D3DDDIFORMAT ). Los píxeles de la superficie de origen que coincidan con el color transparente especificado por Color no se copian.

NumSubRects

[in] Número de subctángulos en el espacio de superficie de destino que está limitado por el rectángulo de destino DstRect .

pSubRects

[in] Puntero a los subctángulos del espacio de superficie de destino.

Flags

[in] Estructura D3DKM_TRANSPARENTBLTFLAGS que especifica las funcionalidades de transferencia de bloques de bits transparentes aceleradas por hardware del adaptador de pantalla.

SrcPitch

[in] Tono de la superficie de origen, en bytes.

Comentarios

Los rectángulos especificados por los miembros SrcRect y DstRect enlazan todos los subctángulos en los espacios de superficie de origen y destino, respectivamente. El subsistema del kernel de gráficos de Microsoft DirectX nunca solicitará una transferencia de bloques de bits transparente si los rectángulos de origen y destino se superponen en la misma superficie.

Para completar la operación de transferencia de bloques de bits transparente, el color de cada píxel de DstRect debe calcularse mediante la fórmula siguiente:

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

En este caso, un valor de 0x00FFFFFF en formato ARGB indica alfa = 0, por lo que no se implementa la combinación alfa.

Si se requiere una operación de transferencia de bloques de bits extendido, las relaciones de extensión x e y se calculan respectivamente como las relaciones de los tamaños x e y de DstRect y SrcRect. Además, la operación de extensión continuará como si se establece el valor COLORONCOLOR en Wingdi.h . En una transferencia de bloque de bits de reducción, se deben omitir suficientes píxeles para que no sea necesario combinar píxeles. En una transferencia de bloques de bits de extensión, se deben replicar píxeles.

Para obtener más información sobre las transferencias transparentes de bloques de bits, vea Copiar mapas de bits.

Cuando los subctángulos se transforman en el espacio de superficie de origen, se garantiza que el resultado está dentro de la superficie de origen. La transformación de las coordenadas de un sub rectángulo en la superficie de destino para las coordenadas de la superficie de origen se define mediante las siguientes fórmulas, donde:

  • (Xd, Yd) es un punto dentro del sub rectángulo
  • (Xs, Ys) es un punto dentro del rectángulo de origen
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 Value
Cliente mínimo compatible Windows 7
Encabezado d3dkmddi.h (incluye D3dkmddi.h)

Consulte también

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT