लेने के लिए अपने आवेदन में मैं दो उद्देश्यों के लिए एक QGLWidget की सामग्री की फोटो ले:कैसे विश्वसनीय QGLWidget स्नैपशॉट
- दृश्य पुनः बनाने नहीं सभी समय था जब केवल एक उपरिशायी परिवर्तन, बजाय
- एक कैश्ड पिक्समैप का उपयोग कर लैट उपयोगकर्ता विशेष प्लॉट्स (3 डी दृश्य) के स्क्रीनशॉट लेते हैं
पहली बात मैंने कोशिश की है grabFrameBuffer()
। पहले चरण के लिए इस फ़ंक्शन का उपयोग करना स्वाभाविक है, वर्तमान में विजेट में जो दिखाई देता है वह वही है जो मैं कैश करना चाहता हूं। समस्या: कुछ हार्डवेयर (जैसे इंटेल इंटीग्रेटेड ग्राफिक्स, जीईफ़ोर्स ग्राफिक्स के साथ मैक ओएस एक्स) पर, प्राप्त छवि में वर्तमान स्क्रीन सामग्री नहीं है, लेकिन इससे पहले की सामग्री। तो यदि दृश्य दो बार खींचा जाएगा, तो स्क्रीन पर आप दूसरी ड्राइंग देखते हैं, छवि में आप पहली ड्राइंग देखते हैं (जो बैकबफर की सामग्री होनी चाहिए?)।
दूसरी बात मैंने कोशिश की है renderToPixmap()
। यह paintGL()
का उपयोग करता है, लेकिन paint()
का उपयोग नहीं करता है। मेरे पास paint()
में मेरी सारी चीज़ें हैं, क्योंकि मैं क्यूटी की पेंटिंग कार्यक्षमता का उपयोग करता हूं और कोड का केवल एक छोटा टुकड़ा देशी जीएल (beginNativePainting()
, endNativePainting()
) का उपयोग करता है।
मैंने नियमित QWidget की स्नैपशॉट क्षमता (QPixmap :: fromWidget(), या जिसे इसे कहा जाता है) भी कोशिश की, लेकिन वहां जीएल फ्रेमबफर काला है।
इस मुद्दे को हल करने और वर्तमान में खींचे गए दृश्य का विश्वसनीय चित्रण प्राप्त करने के बारे में कोई भी विचार?
मैं एक एफबीओ के साथ काम करना समाप्त कर दिया। – ypnos