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], where 0 < k < Nv
S = 1 / (Nu * Nv)
Nu と Nv は、フィルター カーネルの幅と高さです。
Ti,j は、場所 (i、 j) のモノクロ テクスチャからのテクスチャ サンプルです。
フィルター操作の精度は、少なくとも 6 ビットである必要があります。
ピクセル中心での補間テクスチャ座標値 (U、V) は、フィルター カーネルの中心の座標です。
左上フィルター カーネル サンプル (Uf,Vf) の座標は、次のように計算されます。
Uf = U * TextureWidth - Nu * 0.5
V f = V * TextureHeight - Nv * 0.5
THEN
beta = Uf - truncate(Uf)
alpha = Vf - truncate(Vf)
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | デスクトップ |
Header | d3dumddi.h (D3dumddi.h を含む) |