Efeitos (Direct3D 9)
Um efeito Do Microsoft DirectX permite a integração de sombreadores de vértice e pixel com o estado do pipeline para renderizar objetos. Os efeitos são a próxima etapa lógica na combinação de sombreadores para produzir condições de renderização exclusivas.
Os efeitos também fornecem uma maneira conveniente de gravar sombreadores para diferentes versões de hardware. Como diferentes placas de vídeo dão suporte a diferentes funcionalidades, um aplicativo pode escrever várias técnicas que serão executadas em uma variedade de dispositivos. Dessa forma, se o aplicativo estiver em execução no hardware mais recente e maior, o aplicativo poderá executar a técnica de efeito mais sofisticada. Por outro lado, técnicas de efeito menos sofisticadas podem ser escolhidas automaticamente para serem executadas em hardwares menos caros ou menos capazes.
Um efeito pode substituir o processamento de vértice e parte do processamento de pixels executado pelo pipeline gráfico. Um exemplo de efeito que usa um sombreador de vértice e um sombreador de pixels está no Exemplo BasicHLSL. Você pode obter este exemplo e saber mais sobre ele no SDK do DirectX. Para obter informações sobre o SDK do DirectX, consulte Onde está o SDK do DirectX?.
Para obter mais informações sobre efeitos, consulte estes tópicos:
O diagrama a seguir mostra o pipeline.
O pipeline transforma dados de entrada em pixels de saída que preenchem o buffer de quadros. Os dados de entrada são provenientes de objetos compostos por vértices no espaço do objeto ou superfícies de ordem superior criadas com base em N patches, patches de retângulo e patches de triângulo. Depois que os dados de entrada tiverem sido mosaicados, o pipeline executará o processamento de vértice, o processamento primitivo e o processamento de pixels antes de gerar as cores finais do pixel.
O processamento de vértice e pixel pode ser executado pelo pipeline de função fixa ou pode ser implementado com sombreadores programáveis. O mosaico de dados de entrada, o processamento primitivo e as saídas de dados são controlados pelo estado do pipeline. Tudo isso pode ser integrado a um efeito . Um efeito define o estado que controla como o pipeline funciona. Os efeitos gerenciam sombreadores programáveis, bem como o estado da função fixa.
Os efeitos podem salvar e restaurar o estado, deixando o dispositivo no mesmo estado que antes da execução do efeito. Os tipos de estado que um efeito pode gerenciar incluem:
- Estado do sombreador. Isso inclui criar e excluir sombreadores, definir constantes de sombreador, definir o estado do sombreador e renderizar com sombreadores.
- Textura e estado do sampler. Isso inclui especificar arquivos de textura, inicializar estágios de textura, criar objetos de sampler e definir o estado do sampler.
- Outro estado de pipeline. Isso inclui estados para definir transformações, iluminação, materiais e opções de renderização. Elas podem ser variáveis globais ou locais. As variáveis podem ser definidas pelo próprio efeito ou pelo aplicativo.
Os efeitos contêm várias opções de renderização chamadas técnicas. Cada técnica encapsula variáveis globais, estado do pipeline, textura e estado do sampler e estado do sombreador. Um único estilo é implementado em um passe de renderização. Uma ou mais passagens podem ser encapsuladas em uma técnica. Todas as passagens e técnicas podem ser validadas para ver se o código de efeito será executado no dispositivo de hardware.
Efeitos gerenciam o estado. A palavra estado é usada muito amplamente aqui, pois inclui todos os tipos de informações que o pipeline precisa para especificar as condições de renderização. Isso inclui quase todas as áreas funcionais do pipeline.
As opções de renderização são controladas por técnicas e passagens. Um aplicativo renderiza um efeito definindo uma técnica ativa e renderizando uma ou mais passagens. Toda a renderização em um efeito é feita em um par correspondente de chamadas Begin e End . Quando Begin é chamado, um stateblock é criado e o estado do dispositivo é salvo (a menos que você especifique o contrário). Depois que uma técnica renderiza os passes que o aplicativo especifica para renderizar, End é chamado para encerrar a técnica ativa. O sistema de efeito responde restaurando automaticamente o estado do pipeline que foi capturado no bloco de estado (a menos que você opte por desabilitar essa funcionalidade de salvamento e restauração).
Ao programar sequências de renderização de várias passas, cada uma delas requer sua própria configuração de estado, os efeitos podem reduzir a limpeza necessária para controlar as alterações de estado. Para ver mais informações sobre os estados que podem ser salvos e restaurados por efeitos, consulte Estados de efeito (Direct3D 9).
Os parâmetros de efeito são todas as variáveis não estáticas declaradas em um efeito. Isso pode incluir variáveis globais e anotações. Os parâmetros de efeito podem ser compartilhados entre efeitos diferentes declarando parâmetros com o palavra-chave compartilhado e, em seguida, criando o efeito com um pool de efeitos.
Os efeitos clonados usam o mesmo pool de efeitos que o efeito do qual eles são clonados. Clonar um efeito faz uma cópia exata de um efeito, incluindo variáveis globais, técnicas, passagens e anotações.