Pour autant que je sache, il n'y a aucun moyen dans DX ou GL de réutiliser l'alpha de RT 0 pour toutes les opérations de mélange. Malheureusement, cela ne semble pas être pris en charge par le matériel.
Vous pouvez configurer différents modes de fusion pour chaque cible de rendu, ou activer la fusion pour certains et désactiver pour d'autres; cependant, si le mélange est activé pour une cible de rendu, il utilise toujours son propre alpha.
Il existe également un mode appelé "mélange à double source" (voir doc DX11 et doc OGL ), qui vous permet de spécifier l'alpha pour le mélange avec une sortie entièrement distincte du pixel shader, pas le canal alpha de la cible de rendu. Cependant, ce mode ne fonctionne qu'avec une seule cible de rendu sur le matériel actuel.
Donc, pour autant que je sache, les seules options pour mélanger plusieurs cibles de rendu avec le même alpha sont:
- Afficher le même alpha sur toutes les cibles de rendu (sacrifiant la possibilité de stocker d'autres valeurs dans le canal alpha comme vous le feriez dans un ombrage différé, par exemple).
- Répétez le rendu dans une passe distincte pour chaque cible de rendu, en utilisant le mélange à double source.
- Utilisez des UAV / magasin de chargement d'image pour exécuter le mélange dans le pixel shader (ne fonctionne que si la géométrie ne se chevauche pas automatiquement dans l'espace de l'écran, car il n'y a pas de protection contre les conditions de concurrence; également probablement un peu lent).
- Sur le matériel qui le prend en charge, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock ou INTEL_fragment_shader_ordering (ce dernier étant également exposé par les GPU AMD). Ce sont trois noms pour la même chose: fondamentalement une "section critique" dans le pixel shader qui vous permet de lire-modifier-écrire une texture atomiquement par rapport aux autres invocations de pixel shader. Il permet essentiellement un mélange programmable arbitraire, mais il est probablement assez lent et n'est disponible que sur du matériel récent.