İşlevleri birden fazla gölgelendiricide paylaşma


10

Basit soru:

GLSL'de, işlevleri birden fazla gölgelendirici arasında paylaşmanın bir yolu var mı, yoksa ihtiyaç duyan her gölgelendiricideki tüm işlevleri tanımlamak zorunda mıyım?

Yanıtlar:


12

Bir başlık dosyasında bazı işlevleri tanımlayabilir ve # gölgelendiricinize ekleyebilirsiniz. C / C ++ 'dan biraz farklıdır , çünkü işlevlerinizin gövdelerini yalnızca prototiplerine değil, başlıklarına koyarsınız (gölgelendiricilerin ayrı bir derleme ve bağlantı kavramına sahip olmadıkları için), ancak bunun dışında C / C ++ gibi başlıkları.


2
En azından #include'un, evrensel olarak mevcut olmayan bir uzantı dışında, GLSL'nin 3.30'a kadar herhangi bir sürümünde gerçekten desteklenmediğini unutmayın. İyi bir gölgelendirici çerçevesi, bu özelliği sağlamak için dili genişletmelidir (Cg dahil).
Sean Middleditch

7

#İnclude yoksa paylaşılan şeyleri belirtmek için glShaderSource değişkenlerini kullanırsınız. Misal:

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.