Texturas de vários elementos (Direct3D 9)

Texturas tradicionais são consideradas texturas de elemento único. Texturas de vários elementos permitem que os aplicativos escrevam simultaneamente em vários elementos de uma textura do sombreador de pixel. O resultado na próxima passagem de renderização é que um aplicativo pode usar um ou mais dos elementos como uma textura de elemento único, ou seja, como entradas para o sombreador de pixel. Esses elementos adicionais podem ser considerados como um repositório temporário para resultados intermediários que serão usados em uma passagem posterior pelo aplicativo.

A primeira geração de hardware que expõe esse recurso tem as seguintes restrições:

  • Todas as superfícies de textura de vários elementos serão alocadas automaticamente. Essa limitação é resolvida tratando isso como um novo tipo de formato de superfície com vários canais RGBA intercalados.
  • Todos os elementos da textura de vários elementos podem ter a mesma profundidade de bit. Essa limitação é expressa pelo nome dos novos formatos de superfície.
  • Uma textura de vários elementos não pode ser a primária/exibivel. Em outras palavras, ele deve ser apenas fora da tela. Essa limitação é expressa pela enumeração de formato de superfície.
  • Nenhum dithering, teste alfa, embaçamento, mesclagem, operação de varredura ou mascaramento é permitido. Nenhum processamento de sombreador pós-pixel é feito, exceto o teste z e o teste de estêncil.
  • A textura não pode ser um mipmap. A criação da cadeia de mip falhará.
  • O mesmo elemento não pode ser definido como uma textura ao mesmo tempo em que é um destino de renderização. No entanto, elementos diferentes da mesma superfície de textura de vários elementos podem ser simultaneamente texturas e destinos de renderização.
  • Não há suporte para suavização.
  • Superfícies de textura de vários elementos, quando usadas como textura, não podem ser filtradas. Essa limitação pode ser verificada usando CheckDeviceFormat.
  • Superfícies de textura de vários elementos não podem ser bloqueadas.
  • Mais de uma superfície de textura de vários elementos pode ser usada simultaneamente atribuindo cada uma a vários estágios, assim como com texturas normais.
  • As superfícies de textura de vários elementos dão suporte à conversão de gama de 2.2 para 1.0 em uma operação de leitura, assim como com outros formatos de textura.
  • 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.
  • Clear limpa todos os elementos da textura de vários elementos que é definida como o destino de renderização.

O uso de texturas de vários elementos segue estas etapas:

  1. Os aplicativos descobrem o suporte para esse recurso verificando a disponibilidade de formatos de textura de vários elementos.
  2. O aplicativo cria essas superfícies chamando CreateTexture.
  3. O aplicativo define a superfície como um destino de renderização usando a chamada SetRenderTarget . O sombreador de pixel fornece saída para as superfícies usando a instrução mov - ps .
  4. SetTexture é chamado para definir uma superfície de textura de vários elementos para um estágio específico. Assim como acontece com outras texturas, a mesma superfície tem permissão para ser definida como vários estágios ao mesmo tempo.
  5. SetSamplerState é chamado para definir D3DSAMP_ELEMENTINDEX para o número de elemento apropriado na textura de vários elementos da qual o sampler é amostrado. O valor padrão para esse estado é 0, o que significa que texturas que não são de vários elementos funcionarão. Definir esse estado como um número inadequado resulta em um comportamento indefinido – se a textura de vários elementos tiver apenas dois elementos de largura, mas o sampler for solicitado a amostrar do quarto elemento, por exemplo.

Suporte a API

Veja a seguir um resumo dos elementos da API que dão suporte a texturas de vários elementos:

  • O formato de superfície D3DFMT_MULTI2_ARGB8 expressa a natureza intercalada do formato.

  • O D3DSAMP_ELEMENTINDEX estado do sampler indica qual índice de elemento usar.

  • Os seguintes estados de renderização dão suporte a texturas de vários elementos:

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLE se aplica ao destino de renderização (ou elemento) zero.

  • O sinalizador D3DPMISCCAPS_INDEPENDENTWRITEMASKS indica que o dispositivo dá suporte a máscaras de gravação independentes para várias texturas de elemento ou vários destinos de renderização.

Pixel Pipeline