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
Then
beta = Uf - 截断 (Uf)
alpha = Vf - 截断 (Vf)
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |