多元素纹理 (Direct3D 9)

传统纹理被视为单元素纹理。 多元素纹理使应用程序能够从像素着色器同时写入纹理的多个元素。 下一个呈现传递的结果是,应用程序可以将一个或多个元素用作单元素纹理,即作为像素着色器的输入。 可以将这些附加元素视为中间结果的临时存储,这些结果将在应用程序稍后传递时使用。

公开此功能的第一代硬件具有以下限制:

  • 将自动分配所有多元素纹理图面。 通过将此限制视为具有多个 RGBA 通道交错的新型图面格式来解决此问题。
  • 多个元素纹理的所有元素可以具有相同的位深度。 此限制由新图面格式的名称表示。
  • 多元素纹理不能是主要/可显示纹理。 换句话说,它必须是屏幕外。 此限制由图面格式枚举表示。
  • 不允许使用任意、alpha 测试、雾化、混合、光栅操作或掩码。 除了 z 测试和模具测试之外,没有执行帖子像素着色器处理。
  • 纹理不能是 mipmap。 创建 mip 链将失败。
  • 不能同时将同一元素设置为纹理作为呈现目标。 但是,同一多元素纹理图面的不同元素可以是纹理和呈现目标。
  • 不支持反锯齿。
  • 当用作纹理时,无法筛选多元素纹理图面。 可以使用 CheckDeviceFormat 验证此限制。
  • 无法锁定多元素纹理图面。
  • 可以通过向各个阶段分配多个元素纹理图面来同时使用多个元素纹理图面,就像使用普通纹理一样。
  • 多元素纹理图面支持在读取操作上将 gamma 从 2.2 转换为 1.0,就像使用其他纹理格式一样。
  • 某些实现不应用输出写入掩码 (D3DRS_COLORWRITEENABLE) 。 可以具有独立颜色写入掩码的用户。 这是使用新功能位表示的。 可用的独立颜色写入掩码数等于设备支持的最大元素数。
  • 清除 清除设置为呈现目标的多元素纹理的所有元素。

多元素纹理的使用遵循以下步骤:

  1. 应用程序通过检查多元素纹理格式的可用性来发现对此功能的支持。
  2. 应用程序通过调用 CreateTexture 创建这些图面。
  3. 应用程序使用 SetRenderTarget 调用将图面设置为呈现目标。 像素着色器使用 mov - ps 指令向图面提供输出。
  4. 调用 SetTexture 将多元素纹理图面设置为特定阶段。 与其他纹理一样,允许将同一表面同时设置为多个阶段。
  5. 调用 SetSamplerState 以将D3DSAMP_ELEMENTINDEX设置为采样器从中采样的多个元素纹理中的相应元素编号。 此状态的默认值为 0,这意味着非多元素纹理将有效。 将此状态设置为不适当的数字会导致未定义的行为 - 如果多元素纹理只有两个元素宽,但要求采样器从第四个元素采样,例如。

API 支持

下面是支持多元素纹理的 API 元素的摘要:

  • D3DFMT_MULTI2_ARGB8图面格式表示格式交错的性质。

  • D3DSAMP_ELEMENTINDEX采样器状态指示要使用的元素索引。

  • 以下呈现状态支持多元素纹理:

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLE适用于呈现目标 (或元素) 零。

  • D3DPMISCCAPS_INDEPENDENTWRITEMASKS标志指示设备支持多个元素纹理或多个呈现目标的独立写入掩码。

像素管道