Renderizando um efeito (Direct3D 11)
Um efeito pode ser usado para armazenar informações ou 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 do sombreador, estado de amostragem e textura, estado de exibição de acesso não ordenado e outro estado de pipeline. Portanto, depois de organizar o estado em um efeito, você pode encapsular o efeito de renderização resultante desse estado criando e renderizando o efeito.
Há algumas etapas para preparar um efeito para renderização. A primeira é a compilação, que verifica o código HLSL como em relação à sintaxe da linguagem HLSL e às regras da estrutura de efeito. Você pode compilar um efeito de seu aplicativo usando chamadas à API ou pode compilar um efeito offline usando o utilitário do compilador de efeito fxc.exe. Depois que o efeito for compilado com êxito, 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 no HLSL. Para algumas variáveis, isso pode ser feito uma vez quando um efeito é criado; outras pessoas devem ser atualizadas sempre que o aplicativo chamar o loop de renderização. Depois que as variáveis de efeito forem definidas, você informará o runtime para renderizar o efeito aplicando uma técnica. Todos esses tópicos são discutidos mais detalhadamente abaixo.
Naturalmente, há considerações de desempenho para usar 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 seção
Tópico | Descrição |
---|---|
Compilar um efeito |
Depois que um efeito tiver sido criado, a próxima etapa é compilar o código para marcar para problemas de sintaxe. |
Criar um efeito |
Um efeito é criado carregando o código de bytes 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. |
Definir Estado do Efeito |
Algumas constantes de efeito só precisam ser inicializadas. Depois de inicializado, o estado de efeito é definido como o dispositivo para todo o loop de renderização. Outras variáveis precisam ser atualizadas sempre 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 o estado do sombreador declarados e inicializados, a única coisa a fazer é definir o estado de efeito no dispositivo. |