J'ai une application OpenGL qui utilise assez largement les tests de pochoir pour rendre des formes irrégulières (un peu comme un simple CSG 2D ). Si je pouvais savoir combien de fragments ont réussi le test de stencil et ont été rendus, cela serait très utile pour simplifier certains calculs sur toute la ligne. Plus précisément, cela me permettrait de déterminer la zone de la forme rendue gratuitement au lieu d'avoir à l'approximer avec une simulation de Monte Carlo plus tard.
Je sais qu'il existe un concept similaire pour les primitives émises par le shader de géométrie, appelé rétroaction de transformation . Je voudrais savoir s'il existe un concept similaire pour les fragments et le test au pochoir.
opengl
stencil-test
Martin Ender
la source
la source
Réponses:
Une approche possible pourrait être l'utilisation de la requête d'occlusion matérielle.
Vous pouvez utiliser les faits selon lesquels, par spécification, le test de gabarit est exécuté avant le test de profondeur, et seuls les fragments qui réussissent le test de profondeur sont comptés par la requête d'occlusion.
Un exemple simple (non testé) serait comme:
Notez que l'appel pour obtenir le nombre d'échantillons appellera de force le vidage du pipeline et attendra la fin de la requête. Si vous avez besoin d'une approche plus asynchrone, vous pouvez demander si la requête d'occlusion est effectuée ou non en utilisant:
la source
Si ce qui vous intéresse est la zone, vous pouvez réduire la taille du tampon de gabarit jusqu'à atteindre un pixel et déduire cette zone de sa couleur.
Les étapes seraient:
la source