vs_3_0 (DirectX HLSL) 中的顶点纹理

顶点着色器 3.0 模型支持使用 texldl - vs texture load 语句在顶点着色器中查找纹理。 顶点引擎包含四个纹理采样器阶段,名为 D3DVERTEXTEXTURESAMPLER0、D3DVERTEXTEXTURESAMPLER1、D3DVERTEXTEXTURESAMPLER2 和 D3DVERTEXTEXTURESAMPLER3。 它们不同于像素引擎中的位移贴图采样器和纹理采样器。

若要对在这四个阶段设置的纹理采样,可以使用顶点引擎并使用 CheckDeviceFormat 方法对阶段进行编程。 使用 SetTexture 设置这些阶段的纹理,阶段索引 为 D3DVERTEXTEXTURESAMPLER0 到 D3DVERTEXTEXTURESAMPLER3。 顶点着色器中引入了一个新的寄存器,采样器寄存器 (类似于表示顶点纹理采样器的 ps_2_0) 。 在使用之前,需要在着色器中定义此寄存器。

应用程序可以通过使用 D3DUSAGE_QUERY_VERTEXTEXTURE 调用 CheckDeviceFormat 来查询是否支持将格式作为顶点纹理。

注意

这是一个查询标志,因此在任何 Createxxx 函数中都不接受它。 在默认池中创建的顶点纹理可以设置为像素纹理,反之亦然。 但是,若要使用软件顶点处理,无论它是混合模式设备还是软件顶点处理设备) ,都必须在暂存池 (创建顶点纹理。

 

功能与像素纹理相同,但以下情况除外:

  • 不支持各向异性纹理筛选,因此忽略D3DSAMP_MAXANISOTROPY,并且无法为这些阶段设置放大或缩小D3DTEXF_ANISOTROPIC。
  • 更改率信息不可用,因此应用程序必须计算详细信息级别,并将该信息作为 参数提供给 texldl - vs

具体限制包括:

  • 与在像素着色器中一样,如果支持多元素纹理,则使用 D3DSAMP_ELEMENTINDEX 来确定要从哪个元素采样。
  • 对于这些阶段,将忽略状态D3DSAMP_DMAPOFFSET。
  • 使用带有 D3DUSAGE_QUERY_VERTEXTEXTURE 的CheckDeviceFormat 查询纹理,以查看它是否可用作顶点纹理。
  • VertexTextureFilterCaps 指示顶点纹理采样器允许使用哪种类型的筛选器。 不允许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;

顶点管道