सबसे पहले मुझे नहीं लगता कि यह glGetAttribLocation
के बजाय glBindAttribLocation
के माध्यम से स्पष्ट बाध्यकारी का उपयोग करने की सामान्य सिफारिश है। कहा जा रहा है, इन मुख्य कारणों में मैं glGetAttribLocation
उपयोग बंद कर दिया हैं:
सबसे पहले, यह अनावश्यक भूमि के ऊपर हो सकता है। यह सब अच्छा और अच्छा लगता है कि आप संख्याओं के बजाय एक पठनीय नामों का उपयोग कर सकते हैं। बनाम 'ओह ठीक है, texture_coordinate विशेषता' 'क्या बिल्ली विशेषता 7': मैं पहली बार व्याख्या करेंगे संभव भूमि के ऊपर हो सकता है और उसके बाद क्यों कि आखिरी हिस्सा भी मतलब नहीं है।
आप विशेषता स्थान अक्सर, glGetAttribLocation
बुला गैर नगण्य हो सकता है, ड्राइवर पर निर्भर करता है की भूमि के ऊपर की जरूरत है। तो सामान्य मामले को संभालने के लिए आपको कैशिंग-सिस्टम बनाना होगा। बढ़िया, संख्याओं के बजाय नामों के साथ मेरी आसान और पठनीय विधि जाती है, मुझे बस बहुत सारे गैर-तुच्छ रैपर कोड लिखना पड़ा। इससे भी बदतर, आपको वास्तव में ध्यान रखना चाहिए कि जब प्रोग्राम अमान्य हो जाता है तो आप कैश को नष्ट कर देते हैं, यह संभावना है कि आप यह गलत करेंगे और बग के साथ समाप्त हो जाएंगे। तो हम 'अच्छे पठनीय नाम' से 'भयानक छोटी गाड़ी' में गए।
इससे भी अधिक, 'अच्छा पठनीय नाम' तर्क त्रुटिपूर्ण है। आप पूरी तरह से की तरह कुछ कर सकते हैं शेडर अपने आप में निर्धारित स्थानों के लिए निम्नलिखित:
const GLint vertex_loc_att = 0;
const GLint texture_coord_att = 1;
...
या आप भी इस तरह की एक साहचर्य कंटेनर का उपयोग कर सकते हैं:
attribute_locations["vertex_location"] = 0;
attribute_locations["texture_coordinate"] = 1;
...
यह एक आप भी glBindAttribLocation
साथ गठजोड़ कर सकते हैं, बस लिंक करने से पहले ऐसा करते हैं:
foreach name, location in attribute_locations
{
glBindAttribLocation(program_id, location, name);
}
फिर भी बहुत पठनीय, कोई गतिशील कैश आवश्यक हो, तो बस कुछ स्थैतिक चर भी मिल सकता है कि अनुकूलित अनुकूलित
फिर, आप इसे स्वयं कहते हैं: यह स्पष्ट रूप से कई प्रोग्रामों का उपयोग करते समय फायदे हैं, मैं इसे दोहराना नहीं चाहूंगा, क्योंकि कोस explained that one in detail already। मैं सिर्फ आपके तर्कों में से एक का उत्तर दूंगा:
विशेषताएँ जिन्हें साझा करने की आवश्यकता नहीं है: इसका तात्पर्य है कि ऐसे गुण भी हैं जिन्हें साझा करने की आवश्यकता है, जिसके लिए यह एक बड़ा फायदा है कि आप निश्चित स्थानों का उपयोग करते हैं। आप एक आवेदन में दो स्थान प्रबंधन दृष्टिकोण क्यों मिश्रण करेंगे? अपने आप को रखरखाव सिरदर्द से रखें और स्पष्ट रूप से पूर्वनिर्धारित स्थानों के साथ चिपके रहें क्योंकि आपको साझा विशेषताओं के लिए उनकी आवश्यकता है।
टीएल; डॉ कोई बड़ा सौदा नहीं। यह फ़ंक्शन _might_ आसान है लेकिन यह एक बड़ी बात नहीं है। मैं नहीं देख सकता कि यह एक * अनुशंसित अभ्यास *, स्रोत कैसे हो सकता है? – Kos
आपने पहले से ही इसका उत्तर दिया है। तो आप प्रोग्राम को दो पूर्वनिर्धारित विशेषताओं को साझा कर सकते हैं और आप प्रोग्राम स्विच कर सकते हैं या विभिन्न वस्तुओं आदि के लिए भी उनका उपयोग कर सकते हैं। अभ्यास में मुझे यह एक बड़ा फायदा मिलता है। – Invalid
मैंने अपने ग्राफिक्स इंजन में 'glbindAttribLocation' का उपयोग करके परेशान नहीं किया, जिसने लिनक्स पर अच्छी तरह से काम किया। जब मैंने खिड़कियों पर पोर्ट किया, तो यह मेरे मानदंडों को चरम के रूप में उपयोग कर रहा था - मुझे इसे 'glbindAttribLocation' के माध्यम से चर के क्रम में स्पष्ट रूप से बताना था ... – Jarrett