Jawaban sederhananya adalah Anda mengubahnya di antara setiap panggilan draw. Mengatur shader, menggambar teko, mengatur shader lain, menggambar teko lain.
Untuk hal-hal yang lebih kompleks di mana Anda perlu menerapkan beberapa shader hanya pada satu objek seperti blur, cahaya dan sebagainya. Anda pada dasarnya memiliki semua yang dirender menjadi tekstur. Lalu Anda membuat quad di seluruh layar Anda dengan tekstur yang diterapkan saat menggunakan shader lain.
Misalnya jika Anda ingin memberikan efek cahaya, pertama-tama Anda harus membuat adegan non-glowing biasa, lalu render hanya siluet berwarna dari hal-hal yang ingin Anda pijar pada tekstur kemudian Anda beralih ke shader blur dan membuat Anda quad dengan tekstur yang melekat pada adegan non-glowing Anda.
Ada teknik lain yang disebut Deferred shading di mana Anda membuat adegan tanpa pencahayaan dan menerapkannya nanti di ruang layar. Tujuan utamanya adalah untuk mengurangi biaya pencahayaan per piksel.
Biasanya Anda membuat buffer warna yang diletakkan di layar. Dengan shading yang ditangguhkan, Anda alih-alih membuat buffer warna serta buffer normal dan kedalaman dalam satu lintasan shader (Anda dapat menyimpan vektor normal dan kedalaman dalam tekstur seperti dengan pemetaan normal dan tinggi).
Ini berarti, untuk setiap piksel, Anda tahu posisi potongan terdekat dari geometri non-transparan (kedalaman atau jarak dari mata) warna dan normal. Karena itu, Anda dapat menerapkan pencahayaan ke setiap piksel di layar alih-alih ke setiap piksel yang terlihat dari setiap objek yang Anda render. Ingat bahwa beberapa objek akan digambar di atas objek lain jika adegan tidak sempurna ditampilkan di depan ke belakang.
Untuk bayangan Anda benar-benar membuat buffer kedalaman dari sudut pandang cahaya Anda kemudian gunakan informasi kedalaman itu untuk mengetahui di mana cahaya menyerang. Itu disebut pemetaan bayangan (ada juga pendekatan lain yang disebut volume bayangan yang berhasil membentuk siluet geometri dan mengekstruksinya, tetapi Anda masih akan menggunakan shader.).
Dengan OpenGL yang lebih modern (3.0+) Anda menggunakan Objek Framebuffer dengan Objek Renderbuffers terlampir. Karena renderbuffers dapat diperlakukan seperti tekstur. Anda mungkin melakukan hal-hal seperti memiliki 1 shader render ke beberapa renderbuffers yang berbeda (jadi Anda tidak harus membuat tekstur Anda maka normals Anda kemudian komponen cahaya) tetapi praktik dasarnya masih sama.
Juga diinginkan untuk meminimalkan jumlah sakelar shader sebanyak mungkin untuk menghemat overhead. Jadi beberapa mesin akan mengelompokkan semuanya dengan bahan yang sama sehingga semuanya dapat ditarik sekaligus.