Os detalhes de como trocar o buffer frontal e traseiro variam de plataforma para plataforma e, portanto, a resposta depende da plataforma.
De acordo com a documentação de referência GLX glXSwapBuffers :
O conteúdo do buffer de fundo fica indefinido após uma troca. Observe que isso se aplica aos buffers de pixel e às janelas.
No entanto, existe a extensão GLX_EXT_buffer_age :
O objetivo desta extensão é expor informações suficientes aos aplicativos sobre como o driver gerencia o conjunto de buffers frontal e traseiro associados a uma determinada superfície para permitir que os aplicativos reutilizem o conteúdo de quadros antigos e minimizar o quanto deve ser redesenhado para o próximo quadro.
Mas o Win32 SwapBuffers apenas diz:
Se o formato de pixel atual da janela referenciada por este contexto de dispositivo incluir um buffer de fundo, a função trocará os buffers frontal e traseiro ... Se o formato de pixel atual da janela mencionada pelo contexto de dispositivo não incluir um buffer de fundo, isso chamada não tem efeito e o conteúdo do buffer de fundo é indefinido quando a função retorna.
E CGLFlushDrawable, para gráficos do OS X Core diz:
Se o atributo de armazenamento de backup estiver definido como falso, os buffers poderão ser trocados em vez de copiados. Geralmente, esse é o caso no modo de tela cheia. Se o receptor não for um contexto com buffer duplo, esta chamada não fará nada.
Finalmente, na função de troca de buffer padrão do OpenGL ES, eglSwapBuffers :
O buffer de cores da superfície é deixado indefinido após a chamada eglSwapBuffers.
Então, o que tudo isso significa?
- Para ser verdadeiramente multiplataforma, você não pode assumir nada sobre o buffer traseiro após uma troca. Seu conteúdo é indefinido, e você provavelmente deve glClear ou corrigi-lo antes de usá-lo.
- Se você estiver usando Linux, poderá verificar a extensão da idade do buffer. Como um sistema pode ter um buffer triplo, talvez seja necessário rastrear vários quadros com danos e lidar com isso.
- Se você estiver usando o OS X, poderá ser copiado e poderá obter uma troca. Portanto, você pode assumir que o conteúdo do backbuffer não é lixo, mas não controla se é o quadro que você acabou de enviar ou o quadro anterior.
- Se você está direcionando apenas o Win32 e tem certeza de que possui um buffer de fundo, presumivelmente, pode presumir que seu conteúdo agora é o que estava no buffer frontal. (Embora essa seja uma suposição por omissão, e não explicitamente declarada; eu não ficaria surpreso se não funcionar em muitas / quaisquer configurações.)
Dadas as restrições do GLX e CGL e o desejo de minimizar as alterações entre o OpenGL e o OpenGL ES, você também pode simplesmente assumir que o conteúdo é lixo.