Compartilhar via


Objetos de estado (Direct3D 10)

No Direct3D 10, o estado do dispositivo é agrupado em objetos de estado, o que reduz consideravelmente o custo das alterações de estado. Há vários objetos de estado, e cada um deles é 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 de layout de entrada

Esse grupo de estado (consulte D3D10_INPUT_ELEMENT_DESC) determina como o estágio do assembler de entrada lê os dados dos buffers de entrada e os monta para uso pelo sombreador de vértice. Isso inclui o estado, como o número de elementos no buffer de entrada e a assinatura dos dados de entrada. O estágio do assembler 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 do rasterizador

Esse grupo de estado (consulte D3D10_RASTERIZER_DESC) inicializa o estágio do rasterizador. Esse objeto inclui o estado como modos preenchimento ou eliminação, permitindo o recorte de um retângulo de corte e a configuração de parâmetros de várias amostras. Este estágio rasteriza os primitivos em pixels, realizando operações como recorte e mapeamento de primitivos no visor.

Para criar um objeto de estado de rasterizador, consulte CreateRasterizerState.

Estado do estêncil de profundidade

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

Para criar um objeto depth-stencil-state, consulte CreateDepthStencilState.

Estado de mesclagem

Esse grupo de estado (consulte D3D10_BLEND_DESC) inicializa a parte de mesclagem do estágio de fusão de saída.

Para criar um objeto de estado de combinação, consulte CreateBlendState.

Estado do sampler

Esse grupo de estado (consulte D3D10_SAMPLER_DESC) inicializa um objeto sampler. Um objeto de amostra é usado pelos estágios de 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 associado a uma textura específica, apenas descreve como fazer a filtragem considerando 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 validação de estado no momento da criação de objeto, habilitação do cache de objetos de estado no hardware e redução considerável da quantidade de estado que é passada durante uma chamada de API de configuração de estado (passando um manipulador para o objeto de estado em vez do estado).

Para obter essas melhorias de desempenho, é necessário criar os objetos de estado quando seu aplicativo for inicializado, logo antes do seu loop de renderização. Os objetos de estado são imutáveis, ou seja, depois que são criados, não podem ser alterados. Em vez disso, você deve destruí-los ou recriá-los. Para lidar com essa restrição, você pode criar até 4096 de cada tipo de objeto de estado. Por exemplo, você pode criar vários objetos sampler com várias combinações de estado de amostragem. A alteração do estado do sampler é então realizada chamando a API Set apropriada, que passa um identificador para o objeto (em vez do estado do sampler). 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 consideravelmente reduzidos.

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

Recursos de API (Direct3D 10)