web-dev-qa-db-fra.com

Uniforme booléen OpenGL?

J'essaie d'envoyer un booléen à un shader glsl OpenGL.

Actuellement, je l'ai dans le shader:

uniform bool foo;

Et je l'utilise pour le régler:

glUniform1i(glGetUniformLocation(shader, "foo"), true);

Il ne semble pas y avoir de glUniform1b, je le mets donc sous forme d'entier. Cela semble bien fonctionner.

Y a-t-il un problème avec cette approche? Est-il portable ou pourrait-il se casser sur d'autres cartes graphiques/pilotes? J'utilise OpenGL 4.3 pour le moment.

26
Jan Rüegg

§ 4.1 Types de base Le langage d'ombrage OpenGL prend en charge les types de données de base suivants, regroupés comme suit:

  • bool un type conditionnel, prenant des valeurs true ou false
  • bvec2 un vecteur booléen à deux composants
  • bvec3 un vecteur booléen à trois composantes
  • bvec4 un vecteur booléen à quatre composantes

...

§ 4.1.2 Booleans Pour faciliter l'exécution conditionnelle du code, le type bool est supporté. Il n'y a aucune attente que le matériel supporte directement les variables de ce type. (...)

Quant au réglage:

§ 2.2.1 (...) Lorsque des valeurs d'état sont spécifiées à l'aide d'un type de paramètre différent du type réel de cet état, les conversions de données sont effectuées comme suit:

  • Lorsque le type d'état interne est booléen, les valeurs nulles ou à virgule flottante sont converties en FALSE et les valeurs non nulles sont converties en TRUE.
28
Bartek Banachewicz