ओपनजीएल 4.3 तक, जीएलएसएल में सरणी एक निश्चित, संकलन-समय आकार का होना था। 4.3 शेडर स्टोरेज बफर ऑब्जेक्ट्स के उपयोग की अनुमति देता है, जो उनकी अंतिम लंबाई को "असंबद्ध" होने की अनुमति देता है। मूल रूप से, आप यह कर सकते हैं:
buffer BlockName
{
mat4 manyManyMatrices[];
};
ओपन यह पता लगाने जाएगा कि कितने मैट्रिक्स कार्यावधि में इस सरणी में कैसे आप glBindBufferRange
का उपयोग के आधार पर कर रहे हैं। तो आप लंबाई प्राप्त करने के लिए अभी भी manyManyMatrices.length()
का उपयोग कर सकते हैं, लेकिन यह संकलन-समय स्थिर नहीं होगा।
हालांकि, यह सुविधा (इस संपादन के समय) बहुत नई है और केवल बीटा में लागू की गई है। इसके लिए जीएल 4.x-class हार्डवेयर (उर्फ: डायरेक्ट 3 डी 11-क्लास हार्डवेयर) भी आवश्यक है। अंत में, चूंकि यह शेडर स्टोरेज ब्लॉक का उपयोग करता है, इसलिए डेटा तक पहुंच धीमी हो सकती है, जिसके लिए उम्मीद हो सकती है।
इस प्रकार, मैं सुझाव दूंगा कि आप केवल एक समान ब्लॉक का उपयोग करें जिसमें आप उपयोग की जाने वाली मैट्रिस की सबसे बड़ी संख्या के साथ उपयोग करें। यदि यह एक स्मृति समस्या (असंभव) बन जाता है, तो आप सरणी आकार के आधार पर अपने शेडर्स को विभाजित कर सकते हैं या शेडर स्टोरेज ब्लॉक या जो कुछ भी उपयोग कर सकते हैं।
स्रोत
2012-03-28 23:33:46