मैकोज़ एक्स पर, आप अपनी पसंद के ऑब्जेक्ट को ओपनजीएल प्रस्तुत कर सकते हैं, बस NSOpenGLContext
बनाकर और फिर -setView:
पर कॉल करके। हालांकि, आप किसी भी समय एक ही ओपनजीएल संदर्भ के साथ एक दृश्य को जोड़ सकते हैं।ओपनजीएल संदर्भ स्विच करें या संदर्भ के बजाय संदर्भ प्रस्तुत करें स्विच करें, क्या बेहतर है?
एक संदर्भ बना सकते हैं और हमेशा दृश्य बदलने, फोन करके: मेरा सवाल है, अगर मैं एक एकल खिड़की के भीतर दो अलग विचारों (या दो संभवतः के भीतर विभिन्न विंडोज़) के लिए ओपन प्रस्तुत करना चाहता हूँ, मुझे दो विकल्प हैं
setView
हर बार उचित के रूप में मैं दूसरे दृश्य में प्रस्तुत करना चाहता हूं। यह विचार तब भी काम करेगा जब विचार अलग-अलग विंडो या विभिन्न स्क्रीन पर हों।दो
NSOpenGLContext
ऑब्जेक्ट्स बनाएं और किसी एक के साथ एक दृश्य को संबद्ध करें। इन दो संदर्भों को साझा किया जा सकता है, जिसका अर्थ है कि अधिकांश संसाधन (जैसे बनावट, बफर इत्यादि) स्मृति के दो बार बर्बाद किए बिना दोनों विचारों में उपलब्ध होंगे। उस स्थिति में, हालांकि, मुझे ओपनजीएल कॉल करने से पहले सही संदर्भ पर-makeCurrentContext
पर कॉल करके, प्रत्येक बार जब मैं अन्य दृश्य में प्रस्तुत करना चाहता हूं, तो वर्तमान संदर्भ को स्विच करना होगा।
मैं वास्तव में अतीत में या तो विकल्प का इस्तेमाल किया है, उनमें से प्रत्येक मेरी जरूरतों के लिए ठीक काम किया है, तथापि, मैं अपने आप से पूछा है, जो जिस तरह से प्रदर्शन, संगतता के मामले में बेहतर है, और इतने पर है। मैंने पढ़ा है कि संदर्भ स्विचिंग वास्तव में बहुत धीमी है, या कम से कम यह अतीत में बहुत धीमी होती थी, इस बीच बदल सकती है। यह इस बात पर निर्भर हो सकता है कि किसी संदर्भ (उदा। संसाधन) से कितने डेटा जुड़े हुए हैं, क्योंकि सक्रिय संदर्भ को स्विच करने से सिस्टम मेमोरी और GPU मेमोरी के बीच डेटा स्थानांतरित किया जा सकता है।
दूसरी तरफ दृश्य को स्विच करना बहुत धीमा हो सकता है, खासकर यदि यह अंतर्निहित रेंडरर को बदलने का कारण बन सकता है; जैसे यदि आपके दो विचार दो अलग-अलग स्क्रीनों पर स्थित दो अलग-अलग विंडो का हिस्सा हैं जो दो अलग ग्राफिक एडेप्टर द्वारा संचालित होते हैं। यहां तक कि अगर रेंडरर परिवर्तन नहीं करता है, मुझे नहीं पता है, तो प्रणाली जब एक दृश्य स्विच बनाने/उदाहरण के लिए render-/फ्रेमबफर वस्तुओं को नष्ट करने की तरह महंगा ओपन सेटअप/सफाई का एक बहुत करता है।
50 एमएस, क्या वे जीएलसीएन्टेक्स्ट स्विचिंग या लक्ष्य स्विचिंग प्रस्तुत करते हैं? और यदि वे पहले व्यक्ति को संदर्भित करते हैं, तो क्या संदर्भ साझा या साझा नहीं किए गए थे? – Mecki
संदर्भ साझा किए गए थे (अनिवार्य), ओवरहेड कम या ज्यादा स्थिर था और खिड़कियों के अलग-अलग जोड़े बनाने से आया और संदर्भों को वर्तमान में प्रस्तुत किया, स्वतंत्र रूप से जो एक बदल गया। यह माप सामान्य सत्य नहीं हो सकता है, क्योंकि मैंने साझा डेटा के बिना स्विचिंग ओवरहेड को मापने या लंबित ड्रॉ कॉल के बिना माप नहीं किया। यह संभव है कि आप अपने विशिष्ट मामले (ड्राइंग के साथ या बिना) में अपने दोनों दृष्टिकोणों के लिए मतभेदों को माप सकें। – Sam
खैर, मैंने एक सिंटेक्टिकल बेंचमार्क द्वारा संदर्भ स्विचिंग ओवरहेड को बेंचमार्क करने का प्रयास किया, जिसमें से प्रत्येक में केवल एक संसाधन (एक बहुत बड़ा बनावट) और बिना किसी लंबित ड्राइंग कॉल के अनछुए संदर्भों का उपयोग किया गया। नतीजा यह था कि प्रति सेकंड लगभग 50'000 संदर्भ स्विच संभव हैं। यह सुंदर hgih लगता है लेकिन नमक के अनाज के साथ लिया जाना चाहिए, ईमानदारी से, यह बेंचमार्क कितना यथार्थवादी है? कौन सा ऐप उस छोटे संसाधनों या कभी लंबित ड्राइंग कॉल नहीं करेगा? तो आपकी संख्या शायद कम से कम अधिक यथार्थवादी से बेहतर है। – Mecki