Vários destinos de renderização (Direct3D 9)

O MRT (Destinos de Renderização Múltipla) refere-se à capacidade de renderizar em várias superfícies (consulte IDirect3D9Surface) com uma única chamada de desenho. Essas superfícies podem ser criadas independentemente umas das outras. Os destinos de renderização podem ser definidos usando IDirect3DDevice9::SetRenderTarget.

Vários destinos de renderização têm as seguintes restrições:

  • Todas as superfícies de destino de renderização usadas juntas devem ter a mesma profundidade de bit, mas podem ter formatos diferentes, a menos que a D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS limite esteja definida.

  • Todas as superfícies de um destino de renderização múltipla devem ter a mesma largura e altura.

  • Algumas implementações não podem executar operações de sombreador pós-pixel em vários destinos de renderização, incluindo: sem dithering, teste alfa, sem embaçamento, sem mesclagem ou mascaramento, exceto o teste z e o teste de estêncil. Dispositivos que podem dar suporte a operações de sombreador pós-pixel definem o bit de limite como D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING.

    Quando o limite de D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING estiver definido, primeiro você deverá consultar iDirect3D9::CheckDeviceFormat com o resultado USAGE_QUERY_POSTPIXELSHADER_BLENDING para o formato de superfície específico. Se for false, nenhuma operação de mesclagem de sombreador pós-pixel estará disponível para esse formato de superfície específico. Se for true, espera-se que o dispositivo aplique o mesmo estado a todos os destinos de renderização simultâneos da seguinte maneira:

    • Combinação alfa: o valor de cor em oCi é combinado com o destino de renderização de ith.
    • Teste alfa: a comparação ocorrerá com oC0. Se a comparação falhar, o teste de pixel será encerrado para todos os destinos de renderização.
    • Nevoeiro: o destino de renderização 0 será afetado. Outros destinos de renderização são indefinidos. As implementações podem optar por embaçar todas elas usando o mesmo estado.
    • Dithering: indefinido.
  • Não há suporte para suavização.

  • Algumas das implementações não aplicam a máscara de gravação de saída (D3DRS_COLORWRITEENABLE). Aqueles que podem ter máscaras de gravação de cores independentes. Isso é expresso usando um novo bit de funcionalidade. O número de máscaras de gravação de cores independentes disponíveis será igual ao número máximo de elementos dos quais o dispositivo é capaz.

Novas tampas de hardware:

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

Pixel Pipeline