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 を含む) |