Texturas de vários elementos (Direct3D 9)
As texturas tradicionais são consideradas texturas de elemento único. As texturas de vários elementos permitem que os aplicativos gravem simultaneamente em vários elementos de uma textura do sombreador de pixel. O resultado no próximo passo 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 pensados como um armazenamento 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 múltiplos elementos serão alocadas automaticamente. Esta limitação é resolvida tratando-o 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 bits. Esta limitação é expressa pelo nome dos novos formatos de superfície.
- Uma textura de vários elementos não pode ser a principal/exibível. Em outras palavras, deve ser apenas fora da tela. Essa limitação é expressa pela enumeração de formato de superfície.
- Não é permitido pontilhar, teste alfa, nebulização, mistura, raster-op ou mascaramento. 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 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, diferentes elementos da mesma superfície de textura de vários elementos podem ser simultaneamente texturas e alvos de renderização.
- Não há suporte para suavização de serrilhado.
- As 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.
- As 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 acontece com texturas normais.
- As superfícies de textura de vários elementos suportam a conversão de gama de 2,2 para 1,0 numa operação de leitura, tal como acontece 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 escrita de cores independentes. Isso é expresso usando um novo bit de capacidade. 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.
- Limpar 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:
- Os aplicativos descobrem o suporte para esse recurso verificando a disponibilidade de formatos de textura de vários elementos.
- O aplicativo cria essas superfícies chamando CreateTexture.
- O aplicativo define a superfície como um destino de renderização usando a chamadaSetRenderTarget. O sombreador de pixel fornece saída para as superfícies usando a instrução mov - ps.
- SetTexture é chamado para definir uma superfície de textura de vários elementos para um estágio específico. Tal como acontece com outras texturas, a mesma superfície pode ser definida para vários estágios ao mesmo tempo.
- SetSamplerState é chamado para definir D3DSAMP_ELEMENTINDEX para o número de elemento apropriado na textura de vários elementos a partir da qual o amostrador amostra. O valor padrão para esse estado é 0, o que significa que texturas sem vários elementos funcionarão. Definir esse estado para um número inadequado resulta em um comportamento indefinido - se a textura de vários elementos tiver apenas dois elementos de largura, mas o amostrador for solicitado a fazer uma amostra do quarto elemento, por exemplo.
Suporte à API
Segue-se um resumo dos elementos da API que suportam texturas de vários elementos:
O formato de superfície D3DFMT_MULTI2_ARGB8 expressa a natureza intercalada do formato.
O estado do amostrador D3DSAMP_ELEMENTINDEX indica qual índice de elemento usar.
Os seguintes estados de renderização suportam texturas de vários elementos:
- D3DRS_COLORWRITEENABLE1
- D3DRS_COLORWRITEENABLE2
- D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE se aplica à renderização de destino (ou elemento) zero.
O sinalizador D3DPMISCCAPS_INDEPENDENTWRITEMASKS indica que o dispositivo suporta máscaras de gravação independentes para texturas de vários elementos ou vários destinos de renderização.
Tópicos relacionados