मैं शेडर्स का उपयोग करने वाले ओपनजीएल एप्लिकेशन के स्रोत को देख रहा हूं। एक विशेष शेडर इस तरह दिखता है:जीएलएसएल शेडर्स में निरंतर फ्लोट वैल्यू - वर्दी का उपयोग करने का कोई कारण?
uniform float someConstantValue;
void main()
{
// Use someConstantValue
}
वर्दी कोड से एक बार सेट की जाती है और पूरे एप्लिकेशन रन-टाइम में कभी भी बदलाव नहीं होती है।
किस मामले में मैं someConstantValue
को uniform
के रूप में घोषित करना चाहता हूं और const float
के रूप में नहीं?
संपादित करें: बस स्पष्ट करने के लिए, निरंतर मान एक भौतिक स्थिरता है।
"वर्दी या निरंतर उपयोग के बीच प्रदर्शन अंतर ** शायद ** नगण्य है" अनुमान लगाना अच्छा नहीं है। निरंतर मूल्य घोषित करने से जीएलएसएल कंपाइलर ऑप्टिमाइज़ेशन करने की अनुमति देता है जो अन्यथा संभव नहीं होगा। लेकिन दुख की बात है कि जीएलएसएल कंपाइलर्स में बग्स हैं और अप्रत्याशित तरीकों से व्यवहार करते हैं। तो एक सामान्य जवाब वास्तव में संभव नहीं है। मुझे कॉन्स और गैर-कॉन्स एरे (उनकी लंबाई के आधार पर) का उपयोग करने के बीच गंभीर प्रदर्शन अंतर का सामना करना पड़ा है, भले ही उनके मूल्य को कभी भी संशोधित नहीं किया जाएगा। मुझे लगता है कि यह एक कंपाइलर बग है। – Tara
हालांकि पिछली टिप्पणी उस समय सटीक थी, इस तरह के समय-समय पर संकलन की उम्मीद की जा सकती है। समान मूल्यों को अनुकूलित किया जा सकता है जैसे कि वे स्थिर थे। अधिक जानकारी के लिए [यह] देखें (https://www.khronos.org/opengl/wiki/Core_Language_ (GLSL) #Dynamically_uniform_expression)। –