Compartilhar via


Função DrvGradientFill (winddi.h)

A função DrvGradientFill sombreia os primitivos especificados.

Sintaxe

BOOL DrvGradientFill(
  [in, out]      SURFOBJ   *psoDest,
  [in]           CLIPOBJ   *pco,
  [in, optional] XLATEOBJ  *pxlo,
  [in]           TRIVERTEX *pVertex,
  [in]           ULONG     nVertex,
  [in]           PVOID     pMesh,
  [in]           ULONG     nMesh,
  [in]           RECTL     *prclExtents,
  [in]           POINTL    *pptlDitherOrg,
  [in]           ULONG     ulMode
);

Parâmetros

[in, out] psoDest

Ponteiro para a estrutura SURFOBJ que identifica a superfície na qual desenhar.

[in] pco

Ponteiro para uma estrutura CLIPOBJ . As rotinas de serviço CLIPOBJ_Xxx são fornecidas para enumerar a região de clipe como um conjunto de retângulos. Essa enumeração limita a área do destino que é modificado. Sempre que possível, a GDI simplifica o recorte envolvido.

[in, optional] pxlo

Ponteiro para uma estrutura XLATEOBJ . Esse parâmetro deve ser ignorado pelo driver.

[in] pVertex

Ponteiro para uma matriz de estruturas TRIVERTEX, com cada entrada contendo informações de posição e cor. A estrutura TRIVERTEX é descrita na documentação do SDK do Microsoft Windows.

[in] nVertex

Especifica o número de estruturas TRIVERTEX na matriz para a qual pVertex aponta.

[in] pMesh

Ponteiro para uma matriz de estruturas que definem a conectividade dos elementos TRIVERTEX aos quais pVertex aponta.

Quando retângulos estão sendo desenhados, pMesh aponta para uma matriz de estruturas GRADIENT_RECT, cada uma especificando dois elementos TRIVERTEX que definem um retângulo. Os elementos TRIVERTEX podem representar qualquer par diagonalmente oposto de vértices de retângulo. O desenho do retângulo é exclusivo no canto inferior direito. TRIVERTEX e GRADIENT_RECT são definidos na documentação do SDK do Windows.

Quando triângulos estão sendo desenhados, pMesh aponta para uma matriz de estruturas GRADIENT_TRIANGLE, cada uma especificando os três elementos TRIVERTEX que definem um triângulo. O desenho do triângulo é exclusivo no canto inferior direito. GRADIENT_TRIANGLE é definido na documentação do SDK do Windows.

[in] nMesh

Especifica o número de elementos na matriz para a qual pMesh aponta.

[in] prclExtents

Ponteiro para uma estrutura RECTL que define a área na qual o desenho de gradiente deve ocorrer. Os pontos são especificados no sistema de coordenadas da superfície de destino. Esse parâmetro é útil para estimar o tamanho das operações de desenho.

[in] pptlDitherOrg

Ponteiro para uma estrutura POINTL que define a origem na superfície para dithering. O pixel superior esquerdo do padrão dither está alinhado com esse ponto.

[in] ulMode

Especifica o modo de desenho atual e como interpretar a matriz à qual pMesh aponta. Esse parâmetro pode usar um dos valores a seguir:

GRADIENT_FILL_RECT_H

O parâmetro pMesh aponta para uma matriz de estruturas GRADIENT_RECT. Cada retângulo deve ser sombreado da esquerda para a direita. Especificamente, os pixels superior esquerdo e inferior esquerdo são da mesma cor, assim como os pixels superior direito e inferior direito.

GRADIENT_FILL_RECT_V

O parâmetro pMesh aponta para uma matriz de estruturas GRADIENT_RECT. Cada retângulo deve ser sombreado de cima para baixo. Especificamente, os pixels superior esquerdo e superior direito são da mesma cor, assim como os pixels inferior esquerdo e inferior direito.

GRADIENT_FILL_TRIANGLE

O parâmetro pMesh aponta para uma matriz de estruturas GRADIENT_TRIANGLE.

Os cálculos de preenchimento de gradiente para cada modo são documentados na seção Comentários.

Retornar valor

DrvGradientFill retorna TRUE após o sucesso. Caso contrário, ele retornará FALSE e relatará um erro chamando EngSetLastError.

Comentários

DrvGradientFill pode ser implementado opcionalmente em drivers gráficos. A GDI nunca chama essa função para superfícies palletizadas.

O driver conecta DrvGradientFill definindo o sinalizador HOOK_GRADIENTFILL quando chama EngAssociateSurface ou EngModifySurface. Se o driver tiver fisgado o DrvGradientFill e for chamado para executar uma operação à qual não dá suporte, o driver deverá ter o GDI para manipular a operação pontuando os dados em uma chamada para EngGradientFill.

A GDI não chamará DrvGradientFill para superfícies de destino de 8bpp.

As fórmulas para calcular o valor de cor em cada pixel da primitiva dependem de ulMode da seguinte maneira:

O erro total acumulado em todos os três canais de cores não deve ser superior a oito (8). Para obter mais informações sobre o erro permitido, consulte Efeitos especiais em Drivers de exibição.

O driver deve ignorar o valor alfa dos vértices, deixando o canal alfa inalterado para superfícies que dão suporte à mistura alfa.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho winddi.h (inclua Winddi.h)

Confira também

EngAssociateSurface

EngGradientFill