2012-12-20 26 views
5

वर्टेक्स शेडर में, निश्चित रूप से सीमित संख्या वर्दी स्टोरेज की अनुमति है, और यह मेरी समझ है कि अलग-अलग सिस्टम कोडिंग संकलन के मामले में जीएलएसएल को थोड़ा अलग तरीकों से लागू कर सकते हैं। मैंने कशेरुक शेडर कोड में अक्षर लिखने के बजाय स्थिरांक का उपयोग करने की सिफारिश सुनी है।वर्टेक्स शेडर में अक्षर के बजाय स्थिरांक घोषित करना। मानक अभ्यास, या अनावश्यक कठोरता?

उदाहरण के लिए, निम्नलिखित कोड माना जाता है परिणामस्वरूप उपलब्ध वर्दी संग्रहण में कमी आई है। (मैं काफी कैसे समझ में नहीं आता।)

उदाहरण 1: शाब्दिक

vec4 myVector = vec4(1.0, 0.0, 0.0, 1.0); 
मेरी समझ के लिए

के साथ, वहाँ संभावना है कि 1.0 या 0.0 में से प्रत्येक के उपयोग वर्दी के कुछ राशि लेता है स्टोरेज की जगह।

उदाहरण 2:: शाब्दिक बजाय स्थिरांक के साथ

const float zero = 0.0; 
const float one = 1.0; 

vec4 myVector = vec4(one, zero, zero, one); 

किसी को क्या हो रहा है के पीछे तर्क समझ में है सिफारिश के बाद की तरह कुछ में है कि पिछले कोड चालू करने के लिए इसलिए है? मुझे कोड के साथ कोई समस्या नहीं है, मैं बस सामान को सही ढंग से समझने की कोशिश कर रहा हूं ताकि मुझे भविष्य में कोई समस्या न हो। विशेष रूप से आईओएसओपन ES 2.0 का उपयोग कर मंच के लिए, सबसे अच्छा अभ्यास शाब्दिक (उदाहरण 1), या स्थिरांक के साथ (उदाहरण के 2 के साथ बात को लिखने के लिए है:

मेरे औपचारिक सवाल पीछा कर रहा है)। क्या मुझे अपना समय हर समय स्थिरांक के साथ लिखने में व्यतीत करना चाहिए, या क्या मुझे अक्षर लिखना चाहिए और केवल कंटेंट का उपयोग करना चाहिए यदि वर्टेक्स शेडर ठीक से संकलित करने में विफल रहता है?

धन्यवाद!

+0

क्या आप बाइनरी को देख सकते हैं और देख सकते हैं कि कोई अंतर है या नहीं? –

उत्तर

1

OpenGL® ES 2.0 Programming Guide

जहां तक ​​शाब्दिक मूल्यों का संबंध है से, ओपन ES 2.0 छायांकन भाषा कल्पना कहा गया है कि कोई लगातार प्रचार माना जाता है। यह का अर्थ है कि एक ही शाब्दिक मूल्य (ओं) के कई उदाहरण कई बार गिना जाएगा। शाब्दिक मूल्यों का उपयोग करने के बजाय, उचित कॉन्स्ट चर घोषित किया जाना चाहिए। यह वही शाब्दिक मान गणना कई बार होने से बचाता है, जो वर्टेक्स शेडर को संकलित करने में विफल होने का कारण बन सकता है यदि वर्टेक्स वर्दी संग्रहण आवश्यकताओं कार्यान्वयन का समर्थन करता है।

मुझे वास्तविक कल्पना में इससे संबंधित कुछ भी नहीं मिला। आईओएस के लिए विशिष्ट जानकारी भी नहीं है।

इसके अलावा आप इस समस्या से निपटने के लिए लिखे गए GLSL Optimizer टूल को भी देख सकते हैं (और बहुत से अन्य)।

+0

धन्यवाद किमी, जब मैं इस सवाल के साथ आया तो मैं यही पढ़ रहा था। मैं जो कर सकता हूं वह केवल शाब्दिक समूह के समूह में टाइप करें और देखें कि क्या यह किसी बिंदु पर संकलित करने में विफल रहता है, और फिर बस उन्हें स्थिरांक के साथ स्वैप करें और देखें कि यह बदलता है या नहीं। प्रोग्रामिंग गाइड पढ़ने में मेरा विचार यह था कि लेखक संभावित रूप से सुझाव देने की कोशिश कर रहे थे जो सभी प्लेटफॉर्म पर काम करेंगे, और इसलिए मैं अनिवार्य रूप से सोच रहा था कि वर्टेक्स शेडर कंपाइलर का आईओएस कार्यान्वयन स्वयं इस मुद्दे से संबंधित है या नहीं। यह एक अति जरूरी सवाल नहीं है, लेकिन अगर मुझे कोई जवाब मिल जाए, तो मैं इसे पोस्ट करूंगा। – Mike

3

कल्पना में कुछ भी नहीं मिल के बारे में किमि के उल्लेख के बारे में, परिशिष्ट A-7 The OpenGL® ES Shading Language कल्पना की निम्नलिखित शामिल है:

इस्तेमाल किया वर्दी चर की संख्या, किसी भी शाब्दिक स्थिरांक शेडर में मौजूद की गणना करते समय प्रीप्रोकैसिंग के बाद स्रोत भंडारण आवश्यकताओं की गणना करते समय शामिल है। समान स्थिरांक के कई उदाहरण को कई बार गिनना चाहिए।

यह शायद OpenGL® ES 2.0 Programming Guide में सिफारिश का स्रोत है कि किमी उद्धरण देता है।

हालांकि, इस प्रतिबंध को इस प्रतिबंध को अनिवार्य नहीं है, और संभवतः किसी भी कार्यान्वयन पर सुधार करने के लिए स्वतंत्र है, लेकिन मुझे आईओएस जीएल ड्राइवरों के बारे में कुछ भी नहीं मिल रहा है।

मैं उत्सुक हूं, क्या किसी ने वास्तव में किसी भी संभावित अधिकतम वर्दी सीमा तक पहुंचने के प्रयास में, सचमुच नमूना शेडर को ओवरलोड करने के विचारों का पालन किया है?

(क्षमा करें ... मैं इस उत्तर को किमी के उत्तर पर टिप्पणी के रूप में पोस्ट करना चाहता था, लेकिन अभी तक आवश्यक 50 प्रतिनिधि अंक नहीं हैं)।