मेरे पास एक wxwidgets एप्लिकेशन है जिसमें कई बच्चे ओपनगल विंडो हैं। मैं अपने स्वयं के जीएल कैनवास वर्ग का उपयोग कर रहा हूं, डब्ल्यूएक्स वन नहीं। विंडोज़ उनके ओपनजीएल संदर्भ साझा करते हैं। मुझे नहीं लगता कि यह तथ्य है कि यह wxwidgets वास्तव में यहां प्रासंगिक है।ओपनजीएल फ्लिकरिंग/विंडो आकार बदलने और डीडब्लूएम सक्रिय
ओपनग्ल खिड़कियां एक खिड़कियों के बच्चे हैं जो एक दूसरे के भाई बहन हैं, एक टैब नियंत्रण में निहित हैं। एक एमडीआई स्टाइल इंटरफ़ेस की तरह, लेकिन यह एक एमडीआई विंडो नहीं है .. प्रत्येक को व्यक्तिगत रूप से आकार दिया जा सकता है। जब तक एयरो सक्षम नहीं होता है तब तक सभी काम प्यारे होते हैं और डीडब्लूएम सक्रिय होता है।
किसी भी विंडो का आकार बदलना (यहां तक कि ओपनग्लू भी नहीं) सभी ओपनगल खिड़कियों को कभी-कभी एक स्टेल बैकिंग-स्टोर दृश्य के साथ झिलमिलाहट करने का कारण बनता है जिसमें उस बिंदु पर स्क्रीन पर जो भी बकवास होता है वह ओपनजी नहीं होता है। यह केवल एरो सक्षम के साथ होता है।
मुझे पूरा यकीन है कि यह वास्तव में डीडब्लूएम नहीं है जो वास्तव में इसकी ड्राइंग सतह बैकिंग स्टोर पर ओपनएल सामग्री नहीं रखता है और खिड़की को सही पल पर पुनर्निर्मित नहीं किया जा रहा है।
मैंने इस दौर को पाने के लिए इतनी सारी चीजों की कोशिश की है, मेरे पास एक समाधान है लेकिन यह बहुत अच्छा नहीं है और इसमें फ्रेमबफर को डीएलबी में glReadPixels के साथ पढ़ना शामिल है और फिर इसे मेरे ऑन पेंट दिनचर्या में पेंट डीसी में डालना शामिल है। यह वर्कअराउंड केवल तभी सक्षम है जब डीडब्लूएम सक्रिय है लेकिन मुझे ऐसा करने की ज़रूरत नहीं है क्योंकि यह थोड़ा सा प्रदर्शन करता है (लेकिन एक सक्षम सिस्टम पर बहुत बुरा नहीं है - दृश्य अपेक्षाकृत सरल 3 डी ग्राफ हैं)। जीडीआई और ओपनजीएल को भी मिलाकर अनुशंसित नहीं किया जाता है लेकिन यह दृष्टिकोण आश्चर्यजनक रूप से काम करता है। मैं इसके साथ अभी रह सकता हूं लेकिन मुझे इसके बजाय नहीं करना पड़ेगा। मुझे अभी भी WM_PRINT में ऐसा करना है यदि मैं बाल खिड़की का स्क्रीनशॉट लेना चाहता हूं, तो मुझे इसके चारों ओर एक रास्ता नहीं दिख रहा है।
क्या किसी को इसके लिए बेहतर समाधान पता है?
इससे पहले कि किसी को भी पूछता है मैं निश्चित रूप से निम्न कार्य करें:
- विंडो वर्ग CS_OWNDC
- WM_ERASEBACKGROUND कुछ नहीं करता है और सही रिटर्न है।
- डबल बफरिंग सक्षम है।
- विंडोज़ में WS_CLIPSIBLINGS और WS_CLIPCHILDREN विंडो शैलियों हैं।
- मेरे आकार बदलने वाले ईवेंट हैंडलर में मैं तुरंत खिड़की को पुनर्निर्मित करता हूं। पिक्सेल प्रारूप डिस्क्रिप्टर में PFD_SUPPORT_COMPOSITION स्थापना
- :
मैं कोशिश की है।
- पेंट हैंडलर में wxPaintDC का उपयोग नहीं करना और :: ValidateRect (hwnd, NULL) को इसके बजाय कॉल करना।
- WM_NCPAINT हैंडलिंग और DWM एपीआई
- रंग घटना
- glFlush और/या glFinish कॉलिंग से पहले और बफर स्वैप के बाद में क्लाइंट क्षेत्र को छोड़कर के माध्यम से ग्राहक क्षेत्र
- अक्षम करना एनसी रंग को छोड़कर।
- प्रत्येक पेंट इवेंट (एक परीक्षण के रूप में) पर विंडो को अमान्य कर रहा है - अभी भी झिलमिलाहट!
- साझा जीएल संदर्भ का उपयोग नहीं कर रहा है।
- डबल बफरिंग अक्षम करना।
- GL_FRONT_AND_BACK को
DWM अक्षम करना लेखन एक विकल्प नहीं है।
और जहां तक मुझे पता है कि यह भी एक समस्या है यदि आप OpenGL पर डायरेक्ट 3 डी का उपयोग कर रहे हैं, हालांकि मैंने इसका परीक्षण नहीं किया है क्योंकि यह बहुत सारे काम का प्रतिनिधित्व करता है।
मैं एक MFC एमडीआई एप्लिकेशन और ओपन, जहां MFC नियंत्रण कभी कभी जीएल विंडो में कलाकृतियों आकर्षित छोड़ के साथ इसी तरह की समस्याओं की है। यह तब होता है जब एरो सक्षम होता है। इसी तरह, मुझे एक संतोषजनक समाधान नहीं मिला है। – mcmcc
glReadPixels के साथ पढ़ने के रूप में ओपनएल सामग्री के साथ खिड़की पर ब्लाइटिंग इसे हल करने के लिए प्रकट होता है, लेकिन एक अच्छी विधि होनी चाहिए। – Pete