Gdy moduł cieniujący odczytuje teksturę podczas jednoczesnego renderowania do tej samej tekstury, wyniki są niezdefiniowane. Właśnie dlatego przydatne jest "tradycyjne" lub łączenie o ustalonej funkcjonalności z glBlendFunc i glBlendEquation.
Aby zmiksować dwa obrazy przy użyciu tradycyjnego mieszania, renderujesz pierwszy obraz, ustawiasz tryb mieszania, funkcję i równanie oraz renderujesz drugi obraz. Gwarantuje to uzyskanie prawidłowych wyników i zwykle jest to najszybszy sposób osiągnięcia efektów, takich jak przezroczystość.
Aby uzyskać ten sam efekt za pomocą modułu cieniującego, należy wyrenderować pierwszy obraz na pomocniczą teksturę, zmienić moduły cieniujące i zrenderować drugi obraz do rzeczywistego bufora ramki, wykonując mieszanie jako ostatni krok w module cieniującym fragment. Zwykle jest to wolniejsze z powodu dodatkowego narzutu odczytów tekstur i z pewnością użyje więcej pamięci GPU dla pomocniczej tekstury.
Na nowoczesnym sprzęcie różnica między tymi dwoma technikami jest zazwyczaj niewielka.
Czy oznacza to, że moduł cieniujący nie może mieszać dwóch tekstur i stosować do nich trybu mieszania i wyświetlać 1 nową teksturę? Uważam, że to trochę dziwne, jeśli ludzie publikują shadery trybu Photoshop Blend w Internecie. Czy mógłbyś to rozwinąć? Dzięki! – polyclick
Nie, nadal można mieszać dwie tekstury w module cieniującym, ale to nie jest to, co robi mieszanie. Mieszanie miesza bieżący piksel z buforem ramki. Nadal możesz osiągnąć te same efekty innymi metodami (rysowanie na fakturze i miksowanie). @bartcla – Tim
Ok, więc jeśli rozumiem poprawnie: mieszanie się przez 'glBlendFunc' jest czymś zupełnie innym niż mieszanie tekstur w module cieniującym? Powiedzmy, że chcę połączyć dwa zdjęcia z trybem mieszania "multiply". Powinno to zostać wykonane w module cieniującym, zamiast używać 'glBlendFunc'? Czy możesz podać przykład użycia 'glBlendFunc'? – polyclick