Posso usar o buffer de profundidade padrão ao desenhar para o FBO?

6

Como anexar o buffer de profundidade padrão ao FBO? Como usar o buffer de profundidade renderbuffer anexado ao FBO (depois de desenhar) como um buffer de profundidade padrão?

Basicamente, quero usar o mesmo buffer de profundidade para a renderização do FBO e do backbuffer.

JBeurer
fonte

Respostas:

4

Você não pode.

Isso ocorre por design. O OpenGL (e versões mais antigas do DirectX) foram projetadas nos dias em que aplicativos em janelas literalmente compartilhavam o mesmo buffer de quadro. Isso significava que, se você tivesse duas janelas sobrepostas, as janelas tentariam usar exatamente os mesmos pixels dos buffers de cor, profundidade e estêncil. Os sistemas de janelas tratavam disso por meio de uma operação de máscara codificada.

Em outras palavras, você não possui o buffer de profundidade padrão, não pode alterar o buffer de profundidade padrão e não pode ler com segurança o buffer de profundidade padrão na API do OpenGL.

Sua melhor aposta é fazer toda a sua renderização em um FBO e, em seguida, usar uma textura para obter a imagem final no FBO padrão.

Sean Middleditch
fonte
O que você quer dizer com confiável? De fato, você pode ler e gravar no buffer de profundidade padrão usando glReadPixels (formato definido como GL_DEPTH_COMPONENT) e glDrawPixels (formato definido como GL_DEPTH_COMPONTENT e chamando glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) antes de indicar que não mudaremos o buffer de cores). No entanto, esse pode não ser o método mais eficiente e atualizado de fazê-lo.
JBeurer
Nem todo o buffer de estrutura padrão pode ter dados válidos, devido à propriedade e máscara compartilhadas. Em todas as áreas de trabalho de composição de modem, apenas funcionará, mas a API GL não exige nem espera que seja.
Sean Middleditch