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) |