Sejauh yang saya ketahui tidak ada cara di DX atau GL untuk menggunakan kembali alpha RT 0 untuk semua operasi blending. Sayangnya, sepertinya itu bukan sesuatu yang didukung oleh perangkat keras.
Anda dapat mengonfigurasi mode campuran yang berbeda untuk setiap target render, atau mengaktifkan blending untuk beberapa dan menonaktifkan untuk yang lain; namun, jika blending diaktifkan untuk target render, ia selalu menggunakan alfa sendiri.
Ada juga mode yang disebut "dual-source blending" (lihat DX11 doc dan OGL doc ), yang memungkinkan Anda menentukan alpha untuk blending dengan output yang sama sekali terpisah dari pixel shader, bukan saluran alpha target render. Namun, mode ini hanya berfungsi dengan satu target render pada perangkat keras saat ini.
Sejauh yang saya tahu, satu-satunya opsi untuk memadukan beberapa target render dengan alpha yang sama adalah:
- Keluarkan alpha yang sama pada semua target render (mengorbankan kemampuan untuk menyimpan nilai-nilai lain ke saluran alpha seperti yang Anda lakukan dalam naungan yang ditangguhkan, misalnya).
- Ulangi rendering dalam pass terpisah untuk setiap target render, menggunakan pencampuran sumber ganda.
- Gunakan UAV / penyimpanan gambar untuk menjalankan blending dalam pixel shader (hanya berfungsi jika geometri tidak tumpang-tindih di ruang layar, karena tidak ada perlindungan terhadap kondisi lomba; juga mungkin agak lambat).
- Pada perangkat keras yang mendukungnya, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock , atau INTEL_fragment_shader_ordering (yang terakhir juga diekspos oleh GPU AMD). Ini adalah tiga nama untuk hal yang sama: pada dasarnya bagian "kritis" dalam pixel shader yang memungkinkan Anda membaca-memodifikasi-menulis tekstur secara atom sehubungan dengan doa pixel shader lainnya. Ini pada dasarnya memungkinkan pencampuran yang dapat diprogram secara sewenang-wenang, tetapi mungkin cukup lambat, dan hanya tersedia pada perangkat keras terbaru.