कई VBOs होने जब तक कि वे एक निश्चित आकार है के रूप में ठीक है। आप जो बचाना चाहते हैं वह बहुत कम ड्रॉ कॉल करना है, और अलग-अलग बफर को बार-बार बांधना है।
अत्यधिक ओवरहेड से बचने के लिए बफर को कितने बड़े होने चाहिए, इतने सारे कारकों पर निर्भर करता है कि अंगूठे का नियम भी देना असंभव है। खेल में आने वाले कारकों में शामिल हैं:
- हार्डवेयर प्रदर्शन विशेषताओं।
- चालक दक्षता।
- टुकड़ों की संख्या (त्रिभुज आकार) से संबंधित शीर्षकों की संख्या।
- शेडर्स की जटिलता।
आम तौर पर यह समान/संबंधित वस्तुओं को रखने के लिए समझ में आता है जिसे आप आम तौर पर एक ही कशेरुक बफर में एक ही समय में आकर्षित करते हैं।
एक ही बफर में सबकुछ रखना चरम लगता है, और वास्तव में प्रतिकूल प्रभाव हो सकता है। मान लें कि आपके पास एक बड़ी "दुनिया" है, जहां आप किसी दिए गए फ्रेम में केवल एक छोटा सबसेट प्रस्तुत करते हैं। यदि आप चरम पर जाते हैं, तो एक विशाल बफर में सभी कोष्ठक होते हैं, कि प्रत्येक ड्रॉ कॉल के लिए बफर को GPU के लिए पहुंच योग्य होने की आवश्यकता होती है। वास्तुकला के आधार पर, और कैसे बफर आवंटित किया जाता है, इसका मतलब यह हो सकता है:
- समर्पित GPU स्मृति (जैसे VRAM) में बफर है, जो अगर यह बहुत बड़ा है समस्याग्रस्त किया जा सकता रखने के लिए प्रयास कर रहा है।
- GPU पता स्थान में स्मृति को मैप करना।
- स्मृति पिनिंग/तारों।
यदि उपर्युक्त में से किसी एक को बहुत बड़े बफर पर लागू करने की आवश्यकता है, लेकिन आप फ्रेम को प्रस्तुत करने के लिए केवल इसका एक छोटा सा अंश उपयोग कर समाप्त करते हैं, तो इन परिचालनों में महत्वपूर्ण अपशिष्ट है। वीआरएएम के साथ एक प्रणाली में, यह वीआरएएम में फिट करने के लिए बनावट जैसे अन्य आवंटन को भी रोक सकता है।
यदि कॉलिंग के साथ प्रतिपादन किया जाता है जो तर्कों द्वारा दिए गए बफर के उप-समूह तक पहुंच सकता है, जैसे glDrawArrays()
या glDrawRangeElements()
, ड्राइवर के लिए पूरे बफर GPU को सुलभ बनाने से बचना संभव हो सकता है। लेकिन मैं उस घटना पर जरूरी नहीं होगा।
स्रोत
2014-10-03 07:56:09
तो ठीक है, मैं वातावरण, स्थिर वस्तुओं, गतिशील वस्तुओं जैसे दृश्यों पर विभिन्न चीज़ों के लिए छोटे बफर बनाएगा। कूलिंग का उपयोग करके मैं केवल आवश्यक वस्तुओं को बफर में लोड करूंगा। लेकिन मैं इसे उचित शेडर्स के साथ कैसे आकर्षित कर सकता हूं? मुझे इन ऑब्जेक्ट्स को एक-एक करके खींचना है (जांचें कि ऑब्जेक्ट दिखाई दे रहा है, बफर में ऑब्जेक्ट लोड करें, जांचें कि बफर में डेटा बदल गया है/बदल गया है, बफर बांधें, शेडर्स का उपयोग करें, बफर से रेंज ड्रॉ करें, अनबिंड करें), या इस तरह से है क्या मैं इसे सब कुछ एक साथ खींच सकता हूं? – nullable