Поделиться через


Несколько целевых объектов отрисовки (Direct3D 9)

Несколько целевых объектов отрисовки (MRT) — это возможность отрисовки на нескольких поверхностях (см. раздел IDirect3D9Surface) с помощью одного вызова draw. Эти поверхности можно создавать независимо друг от друга. Целевые объекты отрисовки можно задать с помощью IDirect3DDevice9::SetRenderTarget.

Несколько целевых объектов отрисовки имеют следующие ограничения:

  • Все поверхности целевых объектов отрисовки, используемые вместе, должны иметь одинаковую битовую глубину, но могут иметь разные форматы, если не задано ограничение D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS.

  • Все поверхности нескольких целевых объектов отрисовки должны иметь одинаковую ширину и высоту.

  • Некоторые реализации не могут выполнять операции постпиксельного шейдера с несколькими целевыми объектами отрисовки, в том числе без смешение, альфа-тест, отсутствие затуманивание, наложение или маскирование, за исключением Z-теста и теста набора элементов. Устройства, которые могут поддерживать операции шейдера после пикселя, устанавливают для бита ограничения значение D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING.

    Если задано ограничение D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING, сначала обратитесь к IDirect3D9::CheckDeviceFormat с результатом USAGE_QUERY_POSTPIXELSHADER_BLENDING для конкретного формата поверхности. Если задано значение false, операции смешивания постпиксельного шейдера не будут доступны для конкретного формата поверхности. Если значение равно true, ожидается, что устройство будет применять одно и то же состояние ко всем целевым объектам одновременной отрисовки следующим образом:

    • Альфа-смесь. Значение цвета в oCi смешивается с целевым объектом отрисовки ith.
    • Альфа-тест. Сравнение будет выполняться с oC0. Если сравнение завершается неудачно, проверка пикселей завершается для всех целевых объектов отрисовки.
    • Туман: целевой объект отрисовки 0 будет запотеваться. Другие целевые объекты отрисовки не определены. Реализации могут использовать одно и то же состояние.
    • Dithering: не определено.
  • Сглаживание не поддерживается.

  • Некоторые реализации не применяют маску записи выходных данных (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

Конвейер пикселей