Función DrvGradientFill (winddi.h)

La función DrvGradientFill sombrea los primitivos especificados.

Sintaxis

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

Puntero a la estructura SURFOBJ que identifica la superficie en la que se va a dibujar.

[in] pco

Puntero a una estructura CLIPOBJ . Las rutinas de servicio CLIPOBJ_Xxx se proporcionan para enumerar la región del clip como un conjunto de rectángulos. Esta enumeración limita el área del destino que se modifica. Siempre que sea posible, GDI simplifica el recorte implicado.

[in, optional] pxlo

Puntero a una estructura XLATEOBJ . El controlador debe omitir este parámetro.

[in] pVertex

Puntero a una matriz de estructuras TRIVERTEX, con cada entrada que contiene información de posición y color. La estructura TRIVERTEX se describe en la documentación de Microsoft Windows SDK.

[in] nVertex

Especifica el número de estructuras TRIVERTEX de la matriz a la que apunta pVertex .

[in] pMesh

Puntero a una matriz de estructuras que definen la conectividad de los elementos TRIVERTEX a los que apunta pVertex .

Cuando se dibujan rectángulos, pMesh apunta a una matriz de estructuras de GRADIENT_RECT, cada una de las cuales especifica dos elementos TRIVERTEX que definen un rectángulo. Los elementos TRIVERTEX pueden representar cualquier par diagonalmente opuesto de vértices rectángulo. El dibujo de rectángulo es exclusivo de la esquina inferior derecha. Tanto TRIVERTEX como GRADIENT_RECT se definen en la documentación de Windows SDK.

Cuando se dibujan triángulos, pMesh apunta a una matriz de estructuras de GRADIENT_TRIANGLE, cada una de las cuales especifica los tres elementos TRIVERTEX que definen un triángulo. El dibujo de triángulos es exclusivo de la parte inferior derecha. GRADIENT_TRIANGLE se define en la documentación de Windows SDK.

[in] nMesh

Especifica el número de elementos de la matriz a los que apunta pMesh .

[in] prclExtents

Puntero a una estructura RECTL que define el área en la que se va a producir el dibujo degradado. Los puntos se especifican en el sistema de coordenadas de la superficie de destino. Este parámetro es útil para calcular el tamaño de las operaciones de dibujo.

[in] pptlDitherOrg

Puntero a una estructura POINTL que define el origen en la superficie para la dithering. El píxel superior izquierdo del patrón de dither se alinea con este punto.

[in] ulMode

Especifica el modo de dibujo actual y cómo interpretar la matriz a la que apunta pMesh . Este parámetro puede establecerse con uno de los siguientes valores:

GRADIENT_FILL_RECT_H

El parámetro pMesh apunta a una matriz de estructuras de GRADIENT_RECT. Cada rectángulo se sombrea de izquierda a derecha. En concreto, los píxeles superior izquierdo e inferior izquierdo son el mismo color, que son los píxeles superior derecho e inferior derecho.

GRADIENT_FILL_RECT_V

El parámetro pMesh apunta a una matriz de estructuras de GRADIENT_RECT. Cada rectángulo se sombrea de arriba a abajo. En concreto, los píxeles superior izquierdo y superior derecho son el mismo color, que son los píxeles inferior izquierdo e inferior derecho.

GRADIENT_FILL_TRIANGLE

El parámetro pMesh apunta a una matriz de estructuras de GRADIENT_TRIANGLE.

Los cálculos de relleno degradado para cada modo se documentan en la sección Comentarios.

Valor devuelto

DrvGradientFill devuelve TRUE tras el éxito. De lo contrario, devuelve FALSE e informa de un error llamando a EngSetLastError.

Comentarios

DrvGradientFill se puede implementar opcionalmente en controladores de gráficos. GDI nunca llama a esta función para superficies paletizadas.

El controlador enlaza DrvGradientFill estableciendo la marca HOOK_GRADIENTFILL cuando llama a EngAssociateSurface o EngModifySurface. Si el controlador ha enganchado DrvGradientFill y se llama a para realizar una operación que no admite, el controlador debe tener GDI para controlar la operación puntingando los datos en una llamada a EngGradientFill.

GDI no llamará a DrvGradientFill para superficies de destino de 8bpp.

Las fórmulas para calcular el valor de color en cada píxel del primitivo dependen de ulMode de la siguiente manera:

El error total acumulado en los tres canales de color no debe ser superior a ocho (8). Para obtener más información sobre el error permitido, vea Efectos especiales en controladores de pantalla.

El controlador debe omitir el valor alfa de los vértices, dejando el canal alfa sin cambios para las superficies que admiten la combinación alfa.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado winddi.h (incluya Winddi.h)

Consulte también

EngAssociateSurface

EngGradientFill