Partilhar via


Cadeias de troca

Uma cadeia de troca é uma coleção de buffers usados para exibir quadros para o usuário. Cada vez que um aplicativo apresenta um novo quadro para exibição, o primeiro buffer na cadeia de troca substitui o buffer exibido. Esse processo é chamado de troca ou inversão.

Um adaptador gráfico contém um ponteiro para uma superfície que representa a imagem que está sendo exibida no monitor, chamada de buffer frontal. À medida que o monitor é atualizado, a placa gráfica envia o conteúdo do buffer frontal para o monitor para ser exibido. No entanto, isso leva a um problema de "rasgo" ao renderizar gráficos em tempo real. O cerne do problema é que as taxas de atualização do monitor são muito lentas em comparação com o resto do computador. As taxas de atualização comuns variam de 60 Hz (60 vezes por segundo) a 100 Hz.

Se o aplicativo estiver atualizando o buffer frontal enquanto o monitor estiver no meio de uma atualização, a imagem exibida será cortada ao meio com a metade superior da exibição contendo a imagem antiga e a metade inferior contendo a nova imagem. Esse problema é conhecido como rasgo.

Evitando rasgar

O Direct3D implementa duas opções para evitar rasgos:

  • Uma opção para permitir apenas atualizações do monitor na operação de retrocesso vertical (ou sincronização vertical). Um monitor normalmente atualiza sua imagem movendo um alfinete de luz horizontalmente, ziguezagueando a partir do canto superior esquerdo do monitor e terminando no canto inferior direito. Quando o pino de luz atinge a parte inferior, o monitor recalibra o pino de luz movendo-o de volta para o canto superior esquerdo para que o processo possa começar novamente.

    Essa recalibração é chamada de sincronização vertical. Durante uma sincronização vertical, o monitor não está desenhando nada, portanto, qualquer atualização no buffer frontal não será vista até que o monitor comece a desenhar novamente. A sincronização vertical é relativamente lenta; no entanto, não lento o suficiente para renderizar uma cena complexa enquanto espera. O que é necessário para evitar rasgos e ser capaz de renderizar cenas complexas é um processo chamado buffer de retorno.

  • Uma opção para usar uma técnica chamada buffer de fundo. O buffer traseiro é o processo de desenhar uma cena em uma superfície fora da tela, chamada de buffer traseiro. Qualquer superfície que não seja o buffer frontal é chamada de superfície fora da tela porque nunca é exibida diretamente pelo monitor.

    Usando um buffer de fundo, um aplicativo tem a liberdade de renderizar uma cena sempre que o sistema estiver ocioso (ou seja, nenhuma mensagem do Windows está esperando) sem precisar considerar a taxa de atualização do monitor. O buffer traseiro traz uma complicação adicional de como e quando mover o buffer traseiro para o buffer frontal.

Inversão de superfície

O processo de mover o buffer traseiro para o buffer frontal é chamado de inversão de superfície. Como a placa gráfica simplesmente usa um ponteiro para uma superfície para representar o buffer frontal, uma simples alteração de ponteiro é tudo o que é necessário para definir o buffer traseiro para o buffer frontal. Quando um aplicativo solicita que o Direct3D apresente o buffer traseiro para o buffer frontal, o Direct3D simplesmente "inverte" os dois ponteiros de superfície. O resultado é que o buffer traseiro agora é o novo buffer frontal e o buffer frontal antigo é o novo buffer traseiro.

Uma inversão de superfície é invocada sempre que um aplicativo solicita que o dispositivo Direct3D apresente o buffer de fundo; no entanto, o Direct3D pode ser configurado para enfileirar as solicitações até que ocorra uma sincronização vertical. Essa opção é conhecida como o intervalo de apresentação do dispositivo Direct3D. Os dados no novo buffer traseiro podem não ser reutilizáveis, dependendo de como um aplicativo especifica como o Direct3D deve lidar com a inversão de superfície.

A inversão de superfície é fundamental em multimídia, animação e software de jogos; é equivalente à maneira como você pode fazer animação com um bloco de papel. Em cada página, o artista muda ligeiramente as figuras, de modo que, quando você vira rapidamente entre as folhas, o desenho parece animado.

Dispositivos