Compartilhar via


Efeitos (Direct3D 11)

Um efeito DirectX é uma coleção de estado de pipeline, definida por expressões escritas em HLSL e alguma sintaxe específica para a estrutura de efeito.

Depois de compilar um efeito, use as APIs de estrutura de efeito para renderizar. A funcionalidade de efeito pode variar de algo tão simples quanto um sombreador de vértice que transforma geometria e um sombreador de pixel que gera uma cor sólida, até uma técnica de renderização que requer várias passagens, usa cada estágio do pipeline gráfico e manipula o estado do sombreador, bem como o estado do pipeline não associado aos sombreadores programáveis.

A primeira etapa é organizar o estado que você deseja controlar em um efeito. Isso inclui o estado do sombreador (vértice, casco, domínio, geometria, sombreadores de pixel e computação), textura e estado de amostra usado pelos sombreadores e outro estado de pipeline não programável. Você pode criar um efeito na memória como uma cadeia de caracteres de texto, mas, normalmente, o tamanho fica grande o suficiente para armazenar o estado de efeito em um arquivo de efeito (um arquivo de texto que termina em uma extensão .fx). Para usar um efeito, você deve compilá-lo (para marcar sintaxe HLSL, bem como sintaxe de estrutura de efeito), inicializar o estado do efeito por meio de chamadas à API e modificar o loop de renderização para chamar as APIs de renderização.

Um efeito encapsula todo o estado de renderização exigido por um efeito específico em uma única função de renderização chamada técnica. Uma passagem é um subconjunto de uma técnica, que contém o estado de renderização. Para implementar um efeito de renderização de passagem múltipla, implemente uma ou mais passagens dentro de uma técnica. Por exemplo, digamos que você queria renderizar um pouco de geometria com um conjunto de buffers de profundidade/estêncil e, em seguida, desenhar alguns sprites sobre isso. Você pode implementar a renderização de geometria na primeira passagem e o desenho de sprite na segunda passagem. Para renderizar o efeito, você simplesmente renderiza ambas as passagens no loop de renderização. Você pode implementar qualquer número de técnicas em um efeito . Claro, quanto maior o número de técnicas, maior o tempo de compilação para o efeito. Uma maneira de explorar essa funcionalidade é criar efeitos com técnicas projetadas para serem executadas em hardwares diferentes. Isso permite que um aplicativo faça downgrade normal do desempenho com base nos recursos de hardware detectados.

Um conjunto de técnicas pode ser agrupado em um grupo (que usa a sintaxe "fxgroup"). As técnicas podem ser agrupadas de qualquer maneira. Por exemplo, vários grupos podem ser criados, um por material; cada material pode ter uma técnica para cada nível de hardware; cada técnica teria um conjunto de passagens que definem o material no hardware específico.

Nesta seção

Tópico Descrição
Organizando estado em um efeito
Com o Direct3D 11, o estado de efeito para determinados estágios de pipeline é organizado por estruturas.
Interfaces do sistema de efeito
O sistema de efeito define várias interfaces para gerenciar o estado de efeito.
Especializando interfaces
ID3DX11EffectVariable tem vários métodos para converter a interface no tipo específico de interface de que você precisa.
Interfaces e classes em efeitos
Há várias maneiras de usar classes e interfaces em Efeitos 11.
Renderizando um efeito
Um efeito pode ser usado para armazenar informações ou para renderizar usando um grupo de estado.
Clonando um efeito
A clonagem de um efeito cria uma segunda cópia quase idêntica do efeito.
Sintaxe do Stream Out
Um sombreador de geometria com fluxo para fora é declarado com uma sintaxe específica.
Diferenças entre efeitos 10 e efeitos 11
Este tópico mostra as diferenças entre Efeitos 10 e Efeitos 11.

Guia de programação para Direct3D 11