Tengo una aplicación OpenGL que utiliza pruebas de galería de símbolos de forma bastante extensa para representar formas irregulares (un poco como un simple CSG 2-D ). Si pudiera averiguar cuántos fragmentos pasaron la prueba de plantilla y realmente se procesaron, esto sería muy útil para simplificar algunos cálculos en el futuro. Específicamente, me permitiría determinar el área de la forma renderizada de forma gratuita en lugar de tener que aproximarla con una simulación de Monte Carlo más adelante.
Sé que existe un concepto similar para las primitivas emitidas por el sombreador de geometría, llamado transformación de retroalimentación . Me gustaría saber si existe un concepto similar para los fragmentos y la prueba de plantilla.
opengl
stencil-test
Martin Ender
fuente
fuente
Respuestas:
Un posible enfoque podría ser el uso de Hardware Occlusion Query.
Puede utilizar los hechos de que, por especificación, la Prueba de plantilla se ejecuta antes de la prueba de profundidad, y solo los fragmentos que pasan la prueba de profundidad se cuentan en la Consulta de oclusión.
Un ejemplo simple (no probado) sería como:
Tenga en cuenta que la llamada para obtener el número de muestras requerirá el vaciado de la tubería y esperará a que finalice la consulta. Si necesita un enfoque más asíncrono, puede consultar si la consulta de oclusión se realiza o no mediante:
fuente
Si lo que le interesa es el área, puede reducir el tamaño del búfer de la plantilla hasta llegar a un píxel y deducir esa área de su color.
Los pasos serían:
fuente