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是一种纹理筛选器模式,用于采样单色纹理(即,格式化为每个像素一位的纹理(D3DDDIFMT_A1))。 在 Direct3D 9.L 运行时中,卷积筛选器是二维框筛选器(即所有权重 = 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 - 截断(Uf

alpha = Vf - 截断(Vf

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的 Windows作系统中可用。
目标平台 桌面
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

D3DDDIARG_SETCONVOLUTIONKERNELMONO

D3DDDI_DEVICEFUNCS