2012-01-08 6 views
7

इससे पहले कि मैं इसे एक उचित उदाहरण में कम कर दूं, मैं उम्मीद कर रहा था कि कोई इससे पहले इसमें भाग ले सकता है और समस्या पर कुछ प्रकाश डाल सकता है।ओपनजीएल अधिकतम 32 ऑन-स्क्रीन विंडो विस्टा/7

मेरे पास 32-बिट सी आधारित एप्लिकेशन है जो प्रति विंडो एक ओपनजीएल संदर्भ का उपयोग करता है, सभी संदर्भ और विंडोज़ समान रूप से स्थापित होते हैं। अनुरोधित पिक्सेल प्रारूप 32 बिट रंग, अल्फा, गहराई बफर, त्वरित है। विंडोज 2000 और एक्सपी पर सब कुछ बेकार ढंग से काम करता है।

सबकुछ विस्टा पर 7 और 33 वें विंडो/संदर्भ जोड़ी बनने तक बेकार ढंग से काम करता है। विंडो बनाने में कोई त्रुटि नहीं है, संदर्भ बनाने में कोई त्रुटि नहीं है, जिससे संदर्भ में कोई त्रुटि नहीं है, ड्राइंग कोई त्रुटि उत्पन्न नहीं करती है, स्वैपबफर त्रुटि उत्पन्न नहीं करते हैं। हालांकि, ओपनजीएल संदर्भ किसी आउटपुट का उत्पादन करने में असफल होते हैं, एरो के साथ खिड़कियां सफेद होती हैं, क्लासिक मोड के साथ वे ड्रॉ नहीं करते हैं और केवल स्क्रीन कचरा हैं। डीडब्लूएम को मारना समस्या को ठीक नहीं करता है, विभिन्न पिक्सेल प्रारूपों (एकल बफर, diff। गहराई, आदि) और PFD_SUPPORT_COMPOSITION समस्या को ठीक नहीं करता है। यह Vista/7 के साथ कई अलग-अलग मशीनों पर है, कभी XP नहीं।

मैं बैक बफर glReadPixels कर सकते हैं और वे सही पिक्सेल हैं। एक ही संदर्भ के साथ एक pbuffer में प्रस्तुत करना ठीक काम करता है,> 32 pbuffers में rendering ठीक है।

यदि मैं ऑन-स्क्रीन संदर्भ/विंडोज़ पर काम करता हूं, तो गैर-काम करने वाली विंडो फिर से काम करना शुरू कर देती हैं। ऐसा लगता है कि Vista/7 बस स्क्रीन पर 32 विंडोज़ स्क्रीन के बाद ओपनजीएल प्रतिपादन प्रदर्शित करना बंद कर देता है।

यदि पिक्सेल प्रारूप वर्णनकर्ता में PFD_SUPPORT_GDI सब कुछ ठीक है, लेकिन यह सॉफ़्टवेयर रेंडरर का उपयोग कर रहा है जो अस्वीकार्य है।

मुझे आश्चर्य है कि यह Vista/7 में ओएस सीमा या ड्राइवर सीमा है या नहीं। किसी भी अंतर्दृष्टि के लिए धन्यवाद।

+0

के लिए इसी तरह अगर आप 33 खिड़कियां एक ही अद्वितीय संदर्भ से जुड़ी बनाने क्या व्यवहार है? – Luca

+2

मुझे संदेह है कि यह एक विशेष ड्राइवर कार्यान्वयन है जिसे दोष देना है। क्या आप एक ही व्यवहार को कई कार्ड/निर्माताओं में देख रहे हैं? – eodabash

उत्तर

2

सीमा कार्यान्वयन-विशिष्ट है, और आप जो भी कर सकते हैं वह सामान्य हार्डवेयर पर कुछ परीक्षण चलाने के लिए है।

मैंने कुछ परीक्षण स्वयं चलाए और यह पता चला कि GeForce कार्ड (शायद कोई सीमा भी नहीं) के लिए सीमा बहुत अधिक है। डेस्कटॉप क्वाड्रो के लिए, 128 संदर्भों की सीमा थी जो सही ढंग से पुनर्निर्मित करने में सक्षम थे, कार्यक्रम 128 त्रुटियों को बिना किसी त्रुटि के बनाने में सक्षम था, लेकिन खिड़कियों में बकवास था। मैं PFD_SUPPORT_GDI का उपयोग नहीं कर रहा हूं।

यह एटीआई राडेन 6950 पर और भी दिलचस्प था, वहां खिड़की # 105 पर रोकथाम बंद हो गया, और प्रतिपादन संदर्भ # 200 बनाना विफल रहा।

यदि आप अपने लिए प्रयास करना चाहते हैं, तो प्रोग्राम यहां पाया जा सकता है: Max OpenGL Contexts test (पूर्ण स्रोत कोड + win32 बाइनरी है)। हो सकता है कि आप कोड को देख सकें और अपराधी को ट्रैक कर सकें, इसके बारे में सुनवाई में बहुत दिलचस्पी होगी।

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

इस नोट बल्कि Is there a limit to how many OpenGL rendering contexts you can create simultaneously?

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