OpenGL ES 2.0) Shading Language: Comment l'entrée booléenne dans le vertex shader et passer au fragment shader?
Je suis en train de passer un booléen dans mon vertex shader pour la première fois; j'ai seulement été à l'aide de flotteurs jusqu'à maintenant.
Le booléen en question est primitif, de sorte que ne peut pas être transmise d'une façon uniforme. Toutefois, il a la même valeur pour tous les sommets d'une donnée primitive.
Il semble d'après le Khronos spec que "variable" est le seul moyen de transmettre des données dans le fragment shader, mais sans surprise déclarer des variables bool my_bool; " provoque une erreur de l'analyseur lors de mon vertex shader.
Je suis de passage le booléen dans mon vertex shader:
attribute bool a_my_bool;
De définir une variable dans une tentative de faire passer le fragment shader:
varying bool v_my_bool;
void main() {
//...
v_my_bool = a_my_bool;
}
Quelqu'un pourrait-il me dire comment je peux obtenir ce que je veux?
OriginalL'auteur KomodoDave | 2012-01-14
Vous devez vous connecter pour publier un commentaire.
Du §4.3.5 de OpenGL® ES Shading Language version 1.0.17 (PDF):
Et de §4.3.3:
De sorte que vous ne pouvez pas avoir un
attribute bool
, sans parler d'unevarying bool
, selon la spécification.Si vous avez vraiment besoin d'une valeur booléenne par sommet vous pouvez utiliser 0.0 pour faux et de 1,0 pour vrai. Lors de l'essai, vérifier
x > 0.5
. par exemple:Tant que tous les sommets de chaque triangle ont la même valeur, cela devrait fonctionner. Si ils ne sont pas compatible, alors vous vous retrouverez avec différents fragments de la même triangle se comporter différemment. (Si vous vous en tenez à 0.0 et 1.0 le quart du triangle le plus proche de "bizarre" dans le coin se comporter différemment du reste.)
OriginalL'auteur Laurence Gonsalves
Je conseil vivement de vous de ne pas utiliser l'attribut et de le passer en uniformes, même si le booléen est attaché à une donnée primitive. Avec l'Uniforme que vous mettez une fois et d'utiliser de nombreuses fois, avec l'attribut vous augmenter beaucoup la bande passante de la mémoire nécessaire à chaque tirage. Le seul sens que je vois, c'est si vous effectuez une extrême traitement par lot de vos primitives mais, même dans ce cas, les véritables avantages de cette solution doit être évalué avec prudence, car le risque est d'obtenir l'effet inverse.
Sur différentes variables, une erreur courante est de ne pas déclarer les variables dans les deux Vertex et Fragment shaders et de manquer l'un des 2.
Cela générerait une erreur de couplage et vous serait-il un avis de toute façon par la vérification de la compiler et lier les résultats.
Un autre aspect que je voudrais vérifier dans votre place est de s'assurer que les variables sont affectés et utilisés dans votre code depuis compilateur bandes de contenu inutilisé (mort d'optimisation de code) et il en résulte un problème très commun.
OriginalL'auteur Maurizio Benedetti