2010-02-24 11 views
8

यह अच्छी तरह से ज्ञात है कि वर्दी और गुण GPU में रजिस्ट्रार हैं। और मेरा सवाल यह है कि जब विभिन्न कार्यक्रम बंधे होते हैं तो क्या होता है? मानक गारंटी है कि पहले सेट वर्दी और/या विशेषता पॉइंटर्स को फिर से लोड किया जाएगा या मुझे किसी भी मामले में उन्हें मैन्युअल रूप से पुनः लोड करने की आवश्यकता है? मैं कैशिंग सिस्टम बनाना चाहता हूं। ऐसा लगता है कि जब प्रोग्राम रीबाउंड और वर्दी के बारे में क्या होता है तो गुणों को फिर से लोड नहीं किया जाता है (हाँ?)? क्या जीएल ईएस ड्राइवर मेरे लिए अपने मूल्य पुनः लोड करता है?ओपनजीएल ईएस 2: वर्दी और गुण

उत्तर

17

नहीं, यह अच्छी तरह से ज्ञात नहीं है कि वर्दी और गुण GPU में पंजीयक हैं। वास्तव में, कम से कम एक व्यापक रूप से तैनात ओपनजीएल ईएस 2.0 जीपीयू में यह गलत है।

स्पष्ट रूप से प्रारंभ होने तक एक वर्दी शून्य है। वर्दी मान वे राज्य हैं जो प्रोग्राम ऑब्जेक्ट का पालन करते हैं। दूसरे शब्दों में, यदि आप किसी दिए गए प्रोग्राम ऑब्जेक्ट पर एक वर्दी सेट करते हैं, तो आप के समान प्रोग्राम ऑब्जेक्ट के उपयोग में संरक्षित मूल्य पर निर्भर कर सकते हैं, लेकिन आप एकाधिक प्रोग्राम में संरक्षित किसी दिए गए स्थान पर वर्दी पर निर्भर नहीं हो सकते वस्तुओं। वास्तव में, यह एक ओपनजीएल ईएस कार्यान्वयन करता है जो यह करता है कि यह spec का उल्लंघन करेगा। यह अपरिभाषित व्यवहार नहीं है।

विशेषता पॉइंटर्स वैश्विक संदर्भ-राज्य हैं, और आप इन ओपनजीएल ES संदर्भ में कॉल के बीच संरक्षित होने पर निर्भर कर सकते हैं। वर्तमान विशेषता मानों के लिए यह भी जाता है (glVertexAttribute * -functions के माध्यम से सेट करें)

+0

मुझे ओपनजीएल ईएस विनिर्देश में मिला है कि "वर्दी प्रोग्राम ऑब्जेक्ट-विशिष्ट स्थिति हैं। वे एक बार लोड होने पर अपने मान बनाए रखते हैं, और जब भी कोई प्रोग्राम प्रोग्राम होता है तब तक उनके मूल्य बहाल किए जाते हैं ऑब्जेक्ट का उपयोग किया जाता है, जब तक कि प्रोग्राम ऑब्जेक्ट को फिर से लिंक नहीं किया गया हो "। इसलिए यदि यह मूल्य वही रहता है तो मैं इसे अपरिवर्तित छोड़ सकता हूं। विशेषताओं के बारे में। मेरा प्रयोग अलग-अलग कहता है: यदि मैं glvertxAttribPointer को छोड़ देता हूं तो पॉइंटर और बफर समान होते हैं, तो मुझे कुछ गलत या यहां तक ​​कि ब्लैक स्क्रीन मिलती है। लेकिन GlGetError अभी भी ठीक है। – demi

+0

वर्दी के बारे में हिस्सा मूल रूप से मैंने जो कहा है। विशेषताओं के बारे में, क्या आप सुनिश्चित हैं कि जिन गुणों का आप पुन: उपयोग करने का प्रयास करते हैं, वही विशेषता स्थान हैं? यदि नहीं, तो प्रोग्राम सुनिश्चित करने के लिए प्रोग्राम को जोड़ने से पहले आप glbindAttribLocation का उपयोग करने का प्रयास कर सकते हैं। – kusma

+0

मेरी इच्छा है कि मैं दो बार +1 कर सकता हूं। एक सही जवाब के लिए, "रजिस्टर्स" tidbit के लिए 1। आप किस जीपीयू से अवगत हैं, यह नहीं करता है, बीटीडब्ल्यू? – Bahbar

संबंधित मुद्दे