多元素纹理 (Direct3D 9)

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

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

  • 将自动分配所有多元素纹理图面。 通过将此限制视为交错多个 RGBA 通道的新型图面格式来解决。
  • 多元素纹理的所有元素都可以具有相同的位深度。 此限制由新图面格式的名称表示。
  • 多元素纹理不能是主要/可显示。 换句话说,它必须仅在屏幕外。 此限制由图面格式枚举表示。
  • 不允许抖动、alpha 测试、雾化、混合、光栅操作或掩码。 除 z-test 和模具测试外,不执行任何后像素着色器处理。
  • 纹理不能是 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标志指示设备支持针对多个元素纹理或多个呈现目标的独立写入掩码。

像素管道