Eu tenho um aplicativo OpenGL que usa testes de estêncil bastante para renderizar formas irregulares (um pouco como um simples CSG 2-D ). Se eu descobrisse quantos fragmentos passaram no teste de estêncil e foram realmente renderizados, isso seria muito útil para simplificar alguns cálculos na linha. Especificamente, me permitiria determinar a área da forma renderizada de graça, em vez de precisar aproximá-la com uma simulação de Monte Carlo posteriormente.
Eu sei que existe um conceito semelhante para primitivas emitidas a partir do shader de geometria, chamado feedback de transformação . Gostaria de saber se existe um conceito semelhante para fragmentos e para o teste de estêncil.
opengl
stencil-test
Martin Ender
fonte
fonte
Respostas:
Uma abordagem possível poderia ser o uso da consulta de oclusão de hardware.
Você pode usar os fatos de que, por especificação, o Teste de Estêncil é executado antes do teste de profundidade, e apenas os fragmentos que passam no teste de profundidade são contados pela Consulta de Oclusão.
Um exemplo simples (não testado) seria como:
Observe que a chamada para obter o número de amostras chamará forçosamente a liberação do pipeline e aguardará a conclusão da consulta. Se você precisar de uma abordagem mais assíncrona, poderá consultar se a consulta de oclusão foi feita ou não usando:
fonte
Se você estiver interessado na área, poderá reduzir o tamanho do buffer de estêncil até atingir um pixel e deduzir essa área de sua cor.
Os passos seriam:
fonte