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)

另请参阅

D3DDDIARG_SETCONVOLUTIONKERNELMONO

D3DDDI_DEVICEFUNCS