多元素纹理 (Direct3D 9)
传统纹理被视为单元素纹理。 多元素纹理使应用程序能够同时从像素着色器写入纹理的多个元素。 下一个呈现传递的结果是,应用程序可以将一个或多个元素用作单元素纹理,即作为像素着色器的输入。 可以将这些附加元素视为中间结果的临时存储,稍后将由应用程序使用。
公开此功能的第一代硬件具有以下限制:
- 将自动分配所有多元素纹理图面。 通过将此限制视为与多个 RGBA 通道交错的新型图面格式来解决此限制。
- 多个元素纹理的所有元素可以具有相同的位深度。 此限制由新图面格式的名称表示。
- 多元素纹理不能是主元素/可显示纹理。 换句话说,它必须仅屏幕外。 此限制由图面格式枚举表示。
- 不允许使用任何任用、alpha 测试、雾化、混合、光栅作或掩码。 除了 z 测试和模具测试之外,没有完成像素后着色器处理。
- 纹理不能是 mipmap。 创建 mip 链将失败。
- 无法同时将同一元素设置为纹理作为呈现目标。 但是,同一多元素纹理图面的不同元素可以同时是纹理和呈现目标。
- 不支持抗锯齿。
- 当用作纹理时,无法筛选多元素纹理图面。 可以使用 checkDeviceFormat验证此限制。
- 无法锁定多元素纹理图面。
- 通过向各个阶段分配多个元素纹理图面,可以使用多个多元素纹理图面,就像普通纹理一样。
- 多元素纹理图面支持在读取作上将 gamma 从 2.2 转换为 1.0,就像使用其他纹理格式一样。
- 某些实现不应用输出写入掩码(D3DRS_COLORWRITEENABLE)。 可以具有独立颜色写入掩码的用户。 这是使用新功能位表示的。 可用的独立颜色写入掩码数将等于设备能够使用的最大元素数。
- 清除 清除设置为呈现目标的多元素纹理的所有元素。
多元素纹理的使用遵循以下步骤:
- 应用程序通过检查多元素纹理格式的可用性来发现对此功能的支持。
- 应用程序通过调用 CreateTexture来创建这些图面。
- 应用程序使用 SetRenderTarget 调用将图面设置为呈现目标。 像素着色器使用 mov - ps 指令向图面提供输出。
- SetTexture 调用,以将多元素纹理图面设置为特定阶段。 与其他纹理一样,允许将同一表面同时设置为多个阶段。
- SetSamplerState 调用,以将D3DSAMP_ELEMENTINDEX设置为采样器从中采样的多元素纹理中的相应元素编号。 此状态的默认值为 0,这意味着非多元素纹理将有效。 将此状态设置为不适当的数字会导致未定义的行为 - 如果多元素纹理只有两个元素宽,但要求采样器从第四个元素采样,例如。
API 支持
下面是支持多元素纹理的 API 元素的摘要:
D3DFMT_MULTI2_ARGB8 图面格式表示格式交错的性质。
D3DSAMP_ELEMENTINDEX采样器状态指示要使用的元素索引。
以下呈现状态支持多元素纹理:
- D3DRS_COLORWRITEENABLE1
- D3DRS_COLORWRITEENABLE2
- D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE适用于呈现目标(或元素)零。
D3DPMISCCAPS_INDEPENDENTWRITEMASKS 标志指示设备支持多个元素纹理或多个呈现目标的独立写入掩码。
相关主题