Partilhar via


Renderizando um efeito (Direct3D 11)

Um efeito pode ser usado para armazenar informações ou para renderizar usando um grupo de estado. Cada técnica especifica algum conjunto de sombreadores de vértice, sombreadores de casco, sombreadores de domínio, sombreadores de geometria, sombreadores de pixel, sombreadores de computação, estado de sombreador, estado de amostra e textura, estado de exibição de acesso não ordenado e outro estado de pipeline. Assim, depois de organizar o estado em um efeito, você pode encapsular o efeito de renderização que resulta desse estado criando e renderizando o efeito.

Existem algumas etapas para preparar um efeito para renderização. A primeira é a compilação, que verifica o código similar ao HLSL em relação à sintaxe da linguagem HLSL e às regras da estrutura de efeitos. Você pode compilar um efeito de seu aplicativo usando chamadas de API ou pode compilar um efeito offline usando o utilitário de compilador de efeitos fxc.exe. Depois que o efeito for compilado com sucesso, crie-o chamando um conjunto diferente (mas muito semelhante) de APIs.

Depois que o efeito é criado, há duas etapas restantes para usá-lo. Primeiro, você deve inicializar os valores de estado de efeito (os valores das variáveis de efeito) usando vários métodos para definir o estado se eles não forem inicializados em HLSL. Para algumas variáveis, isso pode ser feito uma vez quando um efeito é criado; outros devem ser atualizados sempre que seu aplicativo chamar o loop de renderização. Depois que as variáveis de efeito são definidas, você diz ao tempo de execução para renderizar o efeito aplicando uma técnica. Estes tópicos são todos discutidos em mais pormenor abaixo.

Naturalmente, há considerações de desempenho para o uso de efeitos. Essas considerações são basicamente as mesmas se você não estiver usando um efeito. Coisas como minimizar a quantidade de alterações de estado e organizar as variáveis por frequência de atualização. Essas táticas são usadas para minimizar a quantidade de dados que precisam ser enviados da CPU para a GPU e, portanto, minimizar possíveis problemas de sincronização.

Nesta secção

Tópico Descrição
Compilar um efeito
Depois que um efeito tiver sido criado, a próxima etapa é compilar o código para verificar se há problemas de sintaxe.
Criar um efeito
Um efeito é criado carregando o bytecode de efeito compilado na estrutura de efeitos. Ao contrário dos Efeitos 10, o efeito deve ser compilado antes de criar o efeito. Os efeitos carregados na memória podem ser criados chamando D3DX11CreateEffectFromMemory.
Estado de Efeito Definido
Algumas constantes de efeito só precisam ser inicializadas. Uma vez inicializado, o estado do efeito é definido para o dispositivo para todo o loop de renderização. Outras variáveis precisam ser atualizadas cada vez que o loop de renderização é chamado. O código básico para definir variáveis de efeito é mostrado abaixo, para cada um dos tipos de variáveis.
Aplicar uma técnica
Com as constantes, texturas e estado do sombreador declarados e inicializados, a única coisa que resta fazer é definir o estado de efeito no dispositivo.

Effects (Direct3D 11)