多个呈现目标 (Direct3D 9)

多个呈现目标(MRT)是指使用单个绘图调用呈现到多个图面(请参阅 IDirect3D9Surface)。 这些图面可以彼此独立创建。 可以使用 IDirect3DDevice9::SetRenderTarget设置呈现目标。

多个呈现目标具有以下限制:

  • 所有一起使用的呈现目标图面必须具有相同的位深度,但可以采用不同的格式,除非设置了D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS上限。

  • 多个呈现目标的所有图面都应具有相同的宽度和高度。

  • 某些实现不能对多个呈现目标执行像素后着色器作,包括:无抖动、alpha 测试、无雾化、无混合或掩码,但 z 测试和模具测试除外。 支持像素后着色器作的设备将上限位设置为D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING。

    设置D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING上限时,必须先使用特定图面格式的 USAGE_QUERY_POSTPIXELSHADER_BLENDING 结果咨询 IDirect3D9::CheckDeviceFormat。 如果为 false,则不可用于该特定图面格式的像素后着色器混合作。 如果为 true,则设备应将相同的状态应用于所有同时呈现目标,如下所示:

    • Alpha 混合:oCi 中的颜色值与 ith 呈现目标混合。
    • Alpha 测试:与 oC0 进行比较。 如果比较失败,则会为所有呈现目标终止像素测试。
    • 雾:呈现目标 0 将迷雾。 其他呈现器目标未定义。 实现可以选择使用相同状态来模糊它们。
    • Dithering: Undefined.
  • 不支持抗锯齿。

  • 某些实现不应用输出写入掩码(D3DRS_COLORWRITEENABLE)。 可以,具有独立的颜色写入掩码。 这是使用新功能位表示的。 可用的独立颜色写入掩码数将等于设备能够的最大元素数。

新的硬件上限:

D3DCAPS9.NumSimultaneousRTs         
// The value is 1 for all hardware except those that  
//   can support this feature. It is never 0.
D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS - True if the hardware can support it
D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING - True if the hardware can support it

像素管道