Sto guardando il sorgente di un'applicazione OpenGL che usa shader. Uno shader particolare si presenta così:Valori float costanti negli shader GLSL: qualsiasi motivo per utilizzare le uniformi?
uniform float someConstantValue;
void main()
{
// Use someConstantValue
}
L'uniforme viene impostata una volta dal codice e non cambia mai durante il tempo di esecuzione dell'applicazione.
In quali casi, desidero dichiarare someConstantValue
come uniform
e non come const float
?
Modifica: Giusto per chiarire, il valore costante è una costante fisica.
"la differenza di prestazioni tra l'utilizzo di un'uniforme o di una costante è ** probabilmente ** trascurabile" Non è consigliabile indovinare. La dichiarazione di un valore costante consente al compilatore GLSL di eseguire ottimizzazioni che altrimenti non sarebbero possibili. Purtroppo, i compilatori GLSL tendono ad avere bug e comportarsi in modi imprevedibili. Quindi una risposta generale in realtà non è possibile. Ho riscontrato gravi differenze nelle prestazioni tra l'utilizzo di array const e non-const (a seconda della loro lunghezza) anche se il loro valore non verrà mai modificato. Presumo che questo sia un bug del compilatore. – Tara
Sebbene il commento precedente fosse probabilmente accurato al momento, ora è possibile attendersi questo tipo di compilazione just-in-time. I valori uniformi possono essere ottimizzati come se fossero costanti. Vedi [questo] (https://www.khronos.org/opengl/wiki/Core_Language_ (GLSL) #Dynamically_uniform_expression) per maggiori informazioni. –