Partilhar via


Objetos de estado (Direct3D 10)

No Direct3D 10, o estado do dispositivo é agrupado em objetos de estado que reduzem consideravelmente o custo das alterações de estado. Existem vários objetos de estado, e cada um é projetado para inicializar um conjunto de estado para um estágio de pipeline específico. Você pode criar até 4096 de cada tipo de objeto de estado.

Estado Input-Layout

Esse grupo de estado (consulte D3D10_INPUT_ELEMENT_DESC) dita como o de estágio de montagem de entrada lê dados dos buffers de entrada e os monta para uso pelo sombreador de vértice. Isso inclui estados como o número de elementos no buffer de entrada e a assinatura dos dados de entrada. O estágio de montagem de entrada é um novo estágio no pipeline cujo trabalho é transmitir primitivos da memória para o pipeline.

Para criar um objeto input-layout-state, consulte CreateInputLayout.

Estado Rasterizer

Este grupo de estado (ver D3D10_RASTERIZER_DESC) inicializa o estágio rasterizador. Este objeto inclui estados como modos de preenchimento ou abate, habilitando um retângulo tesoura para recorte e definindo parâmetros de várias amostras. Este estágio rasteriza primitivos em pixels, executando operações como recorte e mapeamento de primitivos para o visor.

Para criar um objeto de estado rasterizador, consulte CreateRasterizerState.

Estado Depth-Stencil

Este grupo de estado (ver D3D10_DEPTH_STENCIL_DESC) inicializa a parte de estêncil de profundidade do estágio de fusão de saída . Mais especificamente, este objeto inicializa testes de profundidade e estêncil.

Para criar um objeto de estado de estêncil de profundidade, consulte CreateDepthStencilState.

Estado de mistura

Este grupo de estados (ver D3D10_BLEND_DESC) inicializa a parte de mistura do estágio de fusão de saída .

Para criar um objeto de estado combinado, consulte CreateBlendState.

Estado do amostrador

Este grupo de estado (consulte D3D10_SAMPLER_DESC) inicializa um objeto sampler. Um objeto sampler é usado pelos estágios do sombreador para filtrar texturas na memória.

Diferenças entre o Direct3D 9 e o Direct3D 10:

  • No Direct3D 10, o objeto sampler não está mais vinculado a uma textura específica, ele apenas descreve como fazer a filtragem dado qualquer recurso anexado.

 

Para criar um objeto sampler-state, consulte CreateSamplerState.

Considerações sobre desempenho

Projetar a API para usar objetos de estado cria várias vantagens de desempenho. Isso inclui validar o estado no momento da criação do objeto, habilitar o cache de objetos de estado no hardware e reduzir consideravelmente a quantidade de estado que é passada durante uma chamada de API de configuração de estado (passando um identificador para o objeto de estado em vez do estado).

Para obter essas melhorias de desempenho, você deve criar seus objetos de estado quando o aplicativo for iniciado, bem antes do loop de renderização. Os objetos de estado são imutáveis, ou seja, uma vez criados, você não pode alterá-los. Em vez disso, você deve destruí-los e recriá-los. Para lidar com essa restrição, você pode criar até 4096 de cada tipo de objetos de estado. Por exemplo, você pode criar vários objetos sampler com várias combinações de sampler-state. A alteração do estado do amostrador é então realizada chamando a API set apropriada, que passa um identificador para o objeto (em oposição ao estado do amostrador). Isso reduz significativamente a quantidade de sobrecarga durante cada quadro de renderização para alterar o estado, uma vez que o número de chamadas e a quantidade de dados são muito reduzidos.

Como alternativa, você pode optar por usar o sistema de efeitos que gerenciará automaticamente a criação eficiente e a destruição de objetos de estado para seu aplicativo.

recursos da API (Direct3D 10)