次の方法で共有


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

pVertex が指す配列内の TRIVERTEX 構造体の数を指定します。

[in] pMesh

pVertex が指す TRIVERTEX 要素の接続性を定義する構造体の配列へのポインター。

四角形が描画されている場合、 pMesh はGRADIENT_RECT構造体の配列を指し、それぞれが四角形を定義する 2 つの TRIVERTEX 要素を指定します。 TRIVERTEX 要素は、対角線上の四角形の頂点のペアを表すことができます。 四角形の描画は右下に排他的です。 TRIVERTEX とGRADIENT_RECTの両方が、Windows SDKドキュメントで定義されています。

三角形が描画されている場合、 pMesh はGRADIENT_TRIANGLE構造体の配列を指し、それぞれが三角形を定義する 3 つの 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構造体の配列を指します。

各モードの グラデーション塗りつぶし の計算については、「解説」セクションに記載されています。

戻り値

成功すると、DrvGradientFillTRUE を 返します。 それ以外の場合は FALSE を 返し、 EngSetLastError を呼び出してエラーを報告します。

注釈

DrvGradientFill は、必要に応じてグラフィックス ドライバーに実装できます。 GDI はパレット化されたサーフェスに対してこの関数を呼び出しません。

ドライバーは、EngAssociateSurface または EngModifySurface を呼び出すときに HOOK_GRADIENTFILL フラグを設定することで DrvGradientFill をフックします。 ドライバーが DrvGradientFill をフックし、サポートされていない操作を実行するために呼び出された場合、ドライバーは 、EngGradientFill の呼び出しでデータをパントすることによって GDI に操作を処理させる必要があります。

GDI は、8bpp 変換先サーフェスに対して DrvGradientFill を呼び出しません。

プリミティブの各ピクセルで色の値を計算するための数式は、次のように ulMode に依存します。

3 つのカラー チャネルすべてに累積される合計エラーは、8 つ (8) を超えてはなりません。 許容されるエラーの詳細については、「 ディスプレイ ドライバーの特殊効果」を参照してください。

ドライバーは頂点のアルファ値を無視する必要があり、アルファ ブレンドをサポートするサーフェスではアルファ チャネルは変更されません。

要件

要件
対象プラットフォーム デスクトップ
Header winddi.h (Winddi.h を含む)

こちらもご覧ください

EngAssociateSurface

EngGradientFill