Fungsi berbagi di banyak shader


10

Pertanyaan sederhana:

Di GLSL, apakah ada cara untuk berbagi fungsi di beberapa shader, atau apakah saya harus mendefinisikan semua fungsi di setiap shader yang membutuhkannya?

Jawaban:


12

Anda dapat mendefinisikan beberapa fungsi dalam file header dan # memasukkannya ke shader Anda. Ini sedikit berbeda dari C / C ++ karena Anda akan menempatkan tubuh fungsi Anda di header, bukan hanya prototipe mereka (karena shader tidak memiliki konsep kompilasi & penautan terpisah), tetapi selain itu hanya seperti C / C ++ header.


2
Perhatikan setidaknya #include tidak benar-benar didukung dalam versi GLSL apa pun hingga 3.30, kecuali melalui ekstensi yang tidak tersedia secara universal. Kerangka kerja shader yang layak harus memperluas bahasa untuk menyediakan fitur ini, meskipun (termasuk Cg).
Sean Middleditch

7

Jika #include tidak tersedia, Anda akan menggunakan argumen glShaderSource untuk menentukan hal-hal yang dibagikan. Contoh:

char *sharedcode = "...shared code here...";
char *fs1 = "...fragment shader 1...";
char *fs2 = "...fragment shader 2...";

char *awesomeeffect1[] = {sharedcode, fs1};
char *awesomeeffect2[] = {sharedcode, fs2};

glShaderSource (shader1, 2, awesomeeffect1, NULL);
glShaderSource (shader2, 2, awesomeeffect2, NULL);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.