OpenGL में फ़्रेमबफ़र और रेंडरबफ़र के बीच की अवधारणा और अंतर क्या है?


137

मैं फ्रेमबफ़र और रेंडरबफ़र की अवधारणा के बारे में उलझन में हूं। मुझे पता है कि उन्हें प्रस्तुत करना आवश्यक है, लेकिन मैं उपयोग करने से पहले उन्हें समझना चाहता हूं।

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

उनमें से क्या अंतर है?


7
रेंडरबफ़र फ्रेमबफ़र के चैनल जैसे घटक (रंग, स्टैंसिल, गहराई और आदि) है। देखें: developer.apple.com/iphone/library/documentation/3DDrawing/…
eonil

2
लिंक iPhone विशिष्ट है, लेकिन फ्रेमबफर्स ​​को अच्छी तरह से समझाया गया है।
j00hi

जवाबों:


62

इस पृष्ठ में कुछ विवरण हैं जो मुझे लगता है कि अंतर को काफी अच्छी तरह से समझाता है। पहले तो:

OpenGL पाइपलाइन के अंतिम रेंडरिंग डेस्टिनेशन को []] फ्रेमबफ़र कहा जाता है ।

जहाँ तक:

रेंडरबफ़र ऑब्जेक्ट
इसके अलावा, रेंडरबफ़र ऑब्जेक्ट को ऑफ़स्क्रीन रेंडरिंग के लिए नए रूप में पेश किया गया है। यह एक दृश्य वस्तु को सीधे एक रेंडरबफ़र ऑब्जेक्ट को रेंडर करने की अनुमति देता है, बजाय एक टेक्सचर ऑब्जेक्ट को रेंडर करने के। रेंडरबफ़र एक डेटा स्टोरेज ऑब्जेक्ट है जिसमें रेंडर करने योग्य आंतरिक प्रारूप की एकल छवि होती है। इसका उपयोग OpenGL लॉजिकल बफ़र्स को संग्रहीत करने के लिए किया जाता है, जिसमें समान बनावट प्रारूप नहीं होता है, जैसे कि स्टेंसिल या गहराई बफर।


196

फ्रेमबफर वस्तु वास्तव में एक बफर, लेकिन एक एग्रीगेटर उद्देश्य यह है कि एक या अधिक अटैचमेंट है, जो अपनी बारी से, वास्तविक बफ़र्स होते हैं नहीं है। आप फ़्रेमबफ़र को सी संरचना के रूप में समझ सकते हैं जहां हर सदस्य एक बफर को इंगित करता है। किसी भी लगाव के बिना, एक फ़्रेमबफ़र ऑब्जेक्ट में बहुत कम पदचिह्न है।

अब प्रत्येक बफर एक से जुड़ी फ्रेमबफर एक हो सकता है Renderbuffer या बनावट

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

रेंडरबफर्स एक अपेक्षाकृत नई अवधारणा है। उनसे पहले, एक फ़्रेमबफ़र का उपयोग एक बनावट को प्रस्तुत करने के लिए किया गया था , जो धीमा हो सकता है क्योंकि एक बनावट एक मानक प्रारूप का उपयोग करती है। एक बनावट को प्रस्तुत करना अभी भी संभव है, और यह काफी उपयोगी है जब एक दृश्य बनाने के लिए, या किसी अन्य दृश्य की सतह पर एक दृश्य खींचने के लिए प्रत्येक पिक्सेल पर कई पास करने की आवश्यकता होती है!

OpenGL विकी में यह पृष्ठ है जो अधिक विवरण और लिंक दिखाता है।


13
धन्यवाद! इसे इस तरह की संरचना और संकेत के रूप में स्पष्ट करना मेरे लिए बहुत मायने रखता है।
डगलसहेरोट

2
यह अभी भी मेरे लिए थोड़ा भ्रमित करने वाला है। यदि रेंडरबफ़र किसी अन्य रेंडर बफर को केवल त्वरित प्रतिलिपि की अनुमति देता है, तो इसके लिए लगभग कोई फायदा नहीं है! अगर मुझे एक पोस्ट-प्रोसेसिंग स्टेज (SSAO की तरह) करना है, तो पहले से रेंडरबर्फर को रेंडर करने और फिर स्क्रीन पर कॉपी करने की तुलना में टेक्स्ट को दिए गए डिफॉल्ट फ्रेमबफ़र का उपयोग करना अधिक आसान नहीं है।
कॉफिडेवेलर

4
रेंडर बफ़र्स को कस्टम पोस्ट-प्रोसेसिंग के लिए डिज़ाइन नहीं किया गया है। उनका उपयोग ड्रॉ प्रक्रिया के लिए गहराई और स्टैंसिल जानकारी को संग्रहीत करने के लिए किया जा सकता है। यह संभव है क्योंकि केवल जीपीएल कार्यान्वयन के लिए ही रेंडरबफ़र डेटा को पढ़ने की आवश्यकता होती है, और बनावट की तुलना में तेज़ हो जाती है, क्योंकि एक देशी प्रारूप का उपयोग करता है। यदि आपको पोस्ट प्रोसेसिंग की आवश्यकता है, तो बनावट का उपयोग करें।
fernacolo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.