Функция DrvGradientFill (winddi.h)
Функция DrvGradientFill затеняет указанные примитивы.
Синтаксис
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
);
Параметры
[in, out] psoDest
Указатель на структуру SURFOBJ , которая идентифицирует поверхность, на которой выполняется рисование.
[in] pco
Указатель на структуру CLIPOBJ . Подпрограммы службы CLIPOBJ_Xxx предоставляются для перечисления области клипа в виде набора прямоугольников. Это перечисление ограничивает область назначения, которая изменяется. По возможности GDI упрощает обрезку.
[in, optional] pxlo
Указатель на структуру XLATEOBJ . Драйвер должен игнорировать этот параметр.
[in] pVertex
Указатель на массив структур TRIVERTEX, где каждая запись содержит сведения о положении и цвете. Структура TRIVERTEX описана в документации по Microsoft Windows SDK.
[in] nVertex
Указывает количество структур TRIVERTEX в массиве, на которое указывает pVertex .
[in] pMesh
Указатель на массив структур, определяющих связь элементов TRIVERTEX, на которые указывает pVertex .
При рисовании прямоугольников pMesh указывает на массив GRADIENT_RECT структур, каждая из которых задает два элемента TRIVERTEX, определяющих прямоугольник. Элементы TRIVERTEX могут представлять любую пару вершин прямоугольника, противопоставленную по диагонали. Прямоугольный рисунок является эксклюзивным в нижнем правом углу. Как TRIVERTEX, так и GRADIENT_RECT определены в документации по Windows SDK.
При рисовании треугольников pMesh указывает на массив GRADIENT_TRIANGLE структур, каждая из которых задает три элемента TRIVERTEX, определяющих треугольник. Рисунок треугольника является эксклюзивным в нижнем правом углу. GRADIENT_TRIANGLE определяется в документации по Windows SDK.
[in] nMesh
Указывает количество элементов в массиве, на которые указывает pMesh .
[in] prclExtents
Указатель на структуру RECTL , которая определяет область, в которой выполняется рисование градиента. Точки указываются в системе координат целевой поверхности. Этот параметр полезен при оценке размера операций рисования.
[in] pptlDitherOrg
Указатель на структуру POINTL , которая определяет источник на поверхности для смеления. Верхний левый пиксель узора выравнивается по этой точке.
[in] ulMode
Указывает текущий режим рисования и способ интерпретации массива, на который указывает точка pMesh . Этот параметр может иметь одно из следующих значений:
GRADIENT_FILL_RECT_H
Параметр pMesh указывает на массив GRADIENT_RECT структур. Каждый прямоугольник должен быть затенен слева направо. В частности, верхний левый и нижний левый пиксели имеют одинаковый цвет, как и верхние правые и нижние правые пиксели.
GRADIENT_FILL_RECT_V
Параметр pMesh указывает на массив GRADIENT_RECT структур. Каждый прямоугольник должен быть затенен сверху вниз. В частности, верхний левый и верхний правый пиксели имеют одинаковый цвет, как и нижний левый и нижний правый пиксели.
GRADIENT_FILL_TRIANGLE
Параметр pMesh указывает на массив GRADIENT_TRIANGLE структур.
Вычисления градиентной заливки для каждого режима описаны в разделе Примечания.
Возвращаемое значение
DrvGradientFill возвращает значение TRUE при успешном выполнении. В противном случае он возвращает значение FALSE и сообщает об ошибке путем вызова EngSetLastError.
Комментарии
При необходимости DrvGradientFill можно реализовать в графических драйверах. GDI никогда не вызывает эту функцию для поверхностей с поддонами.
Драйвер перехватывает DrvGradientFill , устанавливая флаг HOOK_GRADIENTFILL при вызове EngAssociateSurface или EngModifySurface. Если драйвер подключил DrvGradientFill и вызывается для выполнения операции, которая не поддерживается, драйвер должен иметь GDI для обработки операции путем отката данных в вызове EngGradientFill.
GDI не вызывает DrvGradientFill для поверхностей назначения 8bpp.
Формулы для вычисления значения цвета в каждом пикселе примитива зависят от ulMode следующим образом:
Общая погрешность, накапливаемая по всем трем цветовым каналам, не должна превышать восемь (8). Дополнительные сведения о допустимой ошибке см. в разделе Специальные эффекты в драйверах дисплея.
Драйвер должен игнорировать альфа-значение вершин, оставляя альфа-канал без изменений для поверхностей, поддерживающих альфа-смешение.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | winddi.h (включая Winddi.h) |