Hasta donde sé, no hay forma en DX o GL de reutilizar el alfa de RT 0 para todas las operaciones de fusión. Desafortunadamente, no parece ser algo que sea compatible con el hardware.
Puede configurar diferentes modos de fusión para cada objetivo de renderizado, o habilitar la fusión para algunos y deshabilitar para otros; sin embargo, si la combinación está habilitada para un objetivo de representación, siempre usa su propio alfa.
También hay un modo llamado "fusión de doble fuente" (ver DX11 doc y OGL doc ), que le permite especificar el alfa para mezclar con una salida completamente separada del sombreador de píxeles, no el canal alfa del objetivo de renderizado. Sin embargo, este modo solo funciona con un objetivo de renderizado en el hardware actual.
Por lo que puedo decir, las únicas opciones para combinar varios objetivos de renderizado con el mismo alfa son:
- Imprima el mismo alfa en todos los objetivos de renderizado (sacrificando la capacidad de almacenar otros valores en el canal alfa como lo haría en el sombreado diferido, por ejemplo).
- Repita el renderizado en un pase separado para cada objetivo de renderizado, utilizando una combinación de doble fuente.
- Use UAV / almacén de carga de imágenes para ejecutar la mezcla en el sombreador de píxeles (solo funciona si la geometría no se superpone en el espacio de la pantalla, porque no hay protección contra las condiciones de carrera; probablemente también un poco lento).
- En el hardware que lo admite, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock o INTEL_fragment_shader_ordering (este último también expuesto por las GPU AMD). Estos son tres nombres para lo mismo: básicamente, una "sección crítica" en el sombreador de píxeles que le permite leer, modificar y escribir una textura atómicamente con respecto a otras invocaciones de sombreador de píxeles. Básicamente, permite una combinación programable arbitraria, pero probablemente sea bastante lenta y solo esté disponible en hardware reciente.