2013-09-05 1 views
0

Il y a un je suis constant utilisant à la fois dans mon code principal (Android) et dans le shader:OpenGL ES 2.0: constantes de partage entre le programme principal et le code shader

// Main code 
private static final int XSIZE=16; 
private float[] sinusoida = new float[XSIZE]; 

// shader 
const int XSIZE = 16; 
uniform float u_SinArray[XSIZE]; 

Les deux constantes se réfèrent à la même chose , donc évidemment il serait optimal de les partager et d'en changer automatiquement quand vous changez le premier. Est-ce possible?

Répondre

1

Si vous demandez si le code Java et le code shader peuvent littéralement accéder à la même variable, alors non. Surtout si vous utilisez un shader pré-compilé, la réponse est non. Si vous compilez le shader dans votre code Java, vous pouvez simplement utiliser la constante Java pour construire le script shader (mais ce n'est pas ce que vous faites). Une alternative serait de passer un autre uniforme au shader au lieu d'utiliser une constante. En supposant qu'il ne vous mettrait pas sur le nombre maximum d'uniformes dans votre shader, c'est probablement le moyen le plus sûr d'aller à l'OMI.

Editer: Pour les futurs lecteurs, peu importe la suggestion uniforme. Les uniformes sont implicitement constants pendant l'exécution, mais pas au moment de la compilation, ce qui serait nécessaire pour une déclaration de tableau.

+0

@fadden Pour ne pas être difficile, mais je l'ai mentionné. – Dave

+0

Ok, je vois. Passer un uniforme - remarquez que je déclare un tableau de la taille de XSIZE plus tard dans mon shader, puis-je déclarer un tableau de taille passé par un uniforme? Je ne pense pas, mais laissez-moi vérifier. Quoi qu'il en soit, même si cela fonctionne, cela ralentirait le shader, donc ce n'est pas le chemin à parcourir. – Utumno

+0

Génération de code shader dans mon code Java - sonne mieux, bien que ce soit toujours maladroit. Actuellement, je suis en train d'écrire le shader dans un fichier texte qui plus tard sera lu dans mon code Java et compilé. Je suppose que je pourrais lire le fichier et remplacer la valeur de XSIZE pour le moment. Je ne sais pas si je veux déranger, ce n'est pas un gros problème pour écrire des parseurs GLSL ... J'espérais qu'il y avait un moyen de définir une constante et de la transmettre au compilateur shader, un peu comme lorsque vous compilez du code C définir une variable dans le makefile et y accéder dans votre code C? – Utumno