次の方法で共有


PFND3DDDI_SETCONVOLUTIONKERNELMONO コールバック関数 (d3dumddi.h)

SetConvolutionKernelMono 関数は、D3DTEXF_CONVOLUTIONMONO テクスチャ フィルタリング モードが設定されている場合に使用されるカーネル フィルターの解像度と重みを定義します。

構文

PFND3DDDI_SETCONVOLUTIONKERNELMONO Pfnd3dddiSetconvolutionkernelmono;

HRESULT Pfnd3dddiSetconvolutionkernelmono(
  HANDLE hDevice,
  const D3DDDIARG_SETCONVOLUTIONKERNELMONO *unnamedParam2
)
{...}

パラメーター

hDevice

ディスプレイ デバイスへのハンドル (グラフィックス コンテキスト)。

unnamedParam2

pData [in]

モノクロ畳み込みカーネルを設定するためのパラメーターを記述する D3DDDIARG_SETCONVOLUTIONKERNELMONO 構造体へのポインター。

戻り値

SetConvolutionKernelMono は、次のいずれかの値を返します。

リターン コード 形容
S_OK モノクロ畳み込みカーネルが正常に設定されました。
E_OUTOFMEMORY SetConvolutionKernelMono は、完了するために必要なメモリを割り当てませんでした。

備考

D3DTEXF_CONVOLUTIONMONOは、モノクロ テクスチャ (つまり、ピクセルあたり 1 ビットとして書式設定されたテクスチャ (D3DDDIFMT_A1) のサンプリングに使用されるテクスチャ フィルター モードです。 Direct3D 9.L ランタイムでは、畳み込みフィルターは 2 次元ボックス フィルター (つまり、すべての重み = 1.0) です。 ただし、SetConvolutionKernelMono 関数は、より一般的なフィルターをサポートするように定義されています。 D3DTEXF_CONVOLUTIONMONOがテクスチャ サンプラーに設定されている場合、テクスチャ サンプラーの状態D3DTSS_MIPFILTER、D3DTSS_MINFILTER、およびD3DTSS_MAGFILTERは無視されます。 このフィルタリング モードでは、境界線の色が 0 のテクスチャ アドレス D3DTADDRESS_BORDERを適用する必要があります。 このフィルター モードがモノクロ以外のテクスチャで使用されている場合、ユーザー モード ディスプレイ ドライバーはエラーを返すか、レンダリングされたプリミティブを無視する必要があります。

次の数式を使用して畳み込みを実行します。

Result = Sum(i=0, i <Nv)[ (Ri*(1 - alpha) + Ri+1*alpha) * S)]

Rk = Sum(j=0, j <Nu)[Tk,j*(1 - beta) + Tk,j+1*beta],ここで、0 < k < Nv

S = 1 / (Nu * Nv)

Nu と Nv は、フィルター カーネルの幅と高さです。

Ti,j は、場所 (i, j) にあるモノクロ テクスチャからのテクスチャ サンプルです。

フィルター操作の有効桁数は、少なくとも 6 ビットである必要があります。

ピクセル中心の補間テクスチャ座標値 (U、V) は、フィルター カーネルの中心の座標です。

左上のフィルター カーネル サンプル (Uf,Vf) の座標は、次のように計算されます。

Uf = U * TextureWidth - Nu * 0.5

Vf = V * TextureHeight - Nv * 0.5

そうしたら

beta = Uf - truncate(Uf)

alpha = Vf - truncate(Vf)

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー d3dumddi.h (D3dumddi.h を含む)

関連項目

D3DDDIARG_SETCONVOLUTIONKERNELMONO

D3DDDI_DEVICEFUNCS