Condivisione delle funzioni tra più shader


10

Domanda semplice:

In GLSL, c'è un modo per condividere le funzioni tra più shader o devo definire tutte le funzioni in ogni shader che ne ha bisogno?

Risposte:


12

Puoi definire alcune funzioni in un file header e #includerle al tuo shader. È un po 'diverso da C / C ++ in quanto inseriresti i corpi delle tue funzioni nelle intestazioni, non solo i loro prototipi (poiché gli shader non hanno il concetto di compilazione e collegamento separati), ma a parte questo è proprio come C / C ++ intestazioni.


2
Nota almeno che #include non è effettivamente supportato in nessuna versione di GLSL fino alla 3.30, tranne tramite un'estensione che non è universalmente disponibile. Qualsiasi framework di shader decente dovrebbe estendere il linguaggio per fornire questa funzionalità (incluso Cg).
Sean Middleditch il

7

Se #include non è disponibile, utilizzare gli argomenti di glShaderSource per specificare le cose condivise. Esempio:

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.