vs_3_0中的顶点纹理(DirectX HLSL)
顶点着色器 3.0 模型支持使用 texldl - 与 纹理加载语句在顶点着色器中查找纹理。 顶点引擎包含四个纹理采样器阶段,名为 D3DVERTEXTEXTURESAMPLER0、D3DVERTEXTEXTURESAMPLER1、D3DVERTEXTEXTURESAMPLER2和D3DVERTEXTEXTURESAMPLER3。 这些与像素引擎中的位移地图采样器和纹理采样器不同。
若要采样在这四个阶段设置的纹理,可以使用顶点引擎,并使用 CheckDeviceFormat 方法对阶段进行编程。 使用 SetTexture在这些阶段设置纹理,阶段索引通过D3DVERTEXTEXTURESAMPLER3 D3DVERTEXTEXTURESAMPLER0。 顶点着色器(如ps_2_0)中引入了新的寄存器,该寄存器表示顶点纹理采样器。 在使用着色器之前,需要在着色器中定义此寄存器。
应用程序可以通过使用 D3DUSAGE_QUERY_VERTEXTEXTURE调用 CheckDeviceFormat 来查询格式是否支持作为顶点纹理。
注意
这是一个查询标志,因此在任何 Createxxx 函数中都不接受它。 在默认池中创建的顶点纹理可以设置为像素纹理,反之亦然。 但是,若要使用软件顶点处理,必须在暂存池中创建顶点纹理(无论它是混合模式设备还是软件顶点处理设备)。
此功能与像素纹理相同,但以下情况除外:
- 不支持异性纹理筛选,因此忽略D3DSAMP_MAXANISOTROPY,无法为放大或缩小这些阶段设置D3DTEXF_ANISOTROPIC。
- 更改率信息不可用,因此应用程序必须计算详细信息级别,并将该信息作为参数提供给 texldl - vs。
限制包括:
- 与像素着色器中一样,如果支持多元素纹理,则D3DSAMP_ELEMENTINDEX用于找出要从中采样的元素。
- 这些阶段将忽略状态D3DSAMP_DMAPOFFSET。
- 将 CheckDeviceFormat 与 D3DUSAGE_QUERY_VERTEXTEXTURE“ 配合使用,查询纹理以查看它是否可以用作顶点纹理。
- 顶点TextureFilterCaps 指示顶点纹理采样器允许哪种类型的筛选器。 不允许 D3DPTFILTERCAPS_MINFANISOTROPIC 和D3DPTFILTERCAPS_MAGFANISOTROPIC。
采样阶段寄存器
采样阶段寄存器标识可用于纹理加载语句的采样单元。 采样单元对应于纹理采样阶段,封装 SetSamplerState中提供的采样特定状态。
每个采样器唯一标识一个纹理图面,该图面使用 SetTexture设置为相应的采样器。 但是,可以在多个采样器上设置相同的纹理图面。
在绘制时,不能同时将纹理设置为呈现目标和阶段的纹理。
由于vs_3_0支持四个采样器,因此可以在单个着色器传递中读取最多四个纹理图面。 采样器寄存器可能仅在纹理加载语句中显示为参数:texldl - vs。
在vs_3_0中,如果使用采样器,则必须在着色器程序的开头声明它,并使用 dcl_samplerType(sm3 - vs asm)(如ps_2_0)。
软件处理
软件顶点处理支持此功能。 可以通过调用 GetDeviceCaps 并检查 VertexTextureFilterCaps 来检查支持的特定筛选器类型。 所有已发布的纹理格式都将作为软件顶点处理中的顶点纹理提供支持。
应用程序可以通过调用 CheckDeviceFormat 并提供(D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING)作为用法,在软件顶点处理模式下检查特定纹理格式是否受支持。 软件顶点处理支持所有格式。 软件顶点处理需要暂存池。
API 更改
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
#define D3DVERTEXTEXTURESAMPLER (0x00100000L)
// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;
相关主题