Valeurs flottantes constantes dans les shaders GLSL - quelle raison d'utiliser des uniformes?
Je suis à la recherche à la source d'une application OpenGL qui utilise les shaders. Un shader en particulier ressemble à ceci:
uniform float someConstantValue;
void main()
{
//Use someConstantValue
}
L'uniforme est fixé une fois de code et ne change pas tout au long de l'application au moment de l'exécution.
Dans ce cas, je veux déclarer someConstantValue
comme un uniform
et non pas comme const float
?
Edit:
Juste pour préciser, la valeur de la constante est une constante physique.
source d'informationauteur kshahar
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, la différence de rendement entre l'utilisation d'un uniforme ou d'une constante est probablement négligeable. Deuxièmement, tout simplement parce que la valeur est toujours constante dans la nature ne signifie pas que vous aurez toujours voulez être constant dans votre programme. Les programmeurs vont souvent ajuster les valeurs physiques pour produire le meilleur résultat, même quand cela ne correspond pas à la réalité. Par exemple, l'accélération due à la gravité est souvent augmenté dans certains types de jeux afin de les rendre plus rapides.
Si vous ne voulez pas avoir à définir l'uniforme dans votre code, vous pouvez fournir une valeur par défaut dans GLSL:
Cela dit, il n'y a pas de raison de ne pas utiliser const pour quelque chose comme pi où il n'y aurait que peu de valeur en le modifiant....
Énorme raison:
Si j'utilise:
J'obtiens une erreur parce que
myfloat
n'est pas unconstant expression
.Cependant ce qui est parfaitement valide:
Pourquoi?
Je pense à deux raisons:
Le développeur réutilise une bibliothèque de shaders dans plusieurs applications. Ainsi, au lieu de personnalisation de chaque shader pour chaque application, le développeur tente de rester dans le général.
Le développeur prévoit cette variable sera plus tard un utilisateur, en milieu contrôlé. Donc la déclarer comme uniforme, c'est la préparation pour cette fonctionnalité à venir.
Si j'étais le développeur et rien de ce qui précède s'applique alors je voudrais déclarer que "const" à la place car il peut donner un avantage en matière de performances et je n'aurais pas à définir l'uniforme de mon code.