2010-11-18 18 views
6

मैं (एक OpenGLwidget में) एक QPainter में 60fps पर वीडियोQPainter प्रदर्शन उच्च फ्रेम दर

मैं एक मुद्दा है कि कभी कभी ड्राइंग बहुत लंबा और अगले रीपेंट घटना होता है, जबकि QPainter में है लेता हो रहा है दिखाने के लिए कोशिश कर रहा हूँ उपयोग - जो एक चेतावनी और यादृच्छिक दुर्घटना उत्पन्न करता है।

सवालों की एक जोड़ी:
वहाँ एक 'क्यूटी रास्ता' कुशलतापूर्वक गूंथ के लिए फिर से रंगना करने के लिए कॉल है, के बाद से शायद QPainter जानता है कि यह किया जा रहा है - या मैं बस अपना प्लेटफार्मों म्युटेक्स समर्थन प्रयोग करते हैं?

क्या केवल एक टाइमर कॉलिंग repaint() की तुलना में उच्च फ्रेम दर (जिसे निश्चित रूप से VSync पर लॉक करने की आवश्यकता है) पर आकर्षित करने का एक बेहतर तरीका है?

+0

टाइमर आग लगने पर आप क्या निर्देश देते हैं? या, यदि आप स्वयं को कुछ भी नहीं कहते हैं, तो आप 60fps को कैसे लागू करते हैं? –

+0

repaint(), तो मैं अपने छवि डेटा प्राप्त करने के लिए paintEvent() को अधिभारित करता हूं और इसे QImage में प्रस्तुत करता हूं जो –

+0

प्रदान करता है ठीक है आप QImages को एक अलग थ्रेड में बना सकते हैं, इसलिए पेंटिंग थ्रेड को प्रत्येक पेंटएवेंट पर कम समय की आवश्यकता होगी। – smerlin

उत्तर

2

repaint() के बजाय update() का उपयोग करने का प्रयास करें।

यह फ़ंक्शन तत्काल पुनर्विचार का कारण नहीं बनता है; इसके बजाय को प्रोसेस करने के लिए एक पेंट इवेंट शेड्यूल करता है जब क्यूटी मुख्य ईवेंट लूप पर लौटता है। यह क्यूटी को के लिए कॉल से पुन:() करने के लिए कॉल करने के लिए अधिक गति और कम झिलमिलाहट के लिए ऑप्टिमाइज़ करने की अनुमति देता है।

कॉलिंग अपडेट() कई बार आमतौर पर केवल paintEvent() कॉल में परिणाम देता है।

+0

मुझे जितनी जल्दी हो सके पेंट इवेंट की आवश्यकता है (आदर्श रूप में मुझे अगले वीएसआईएनसी पर एक ईवेंट चाहिए - जो कि क्यूटी 5 में है) - और मुझे प्रति फ्रेम 1/60 के लिए एक फ्रेम की आवश्यकता है। अद्यतन() अधिक उपयुक्त है जब आपके पास –

+1

को फिर से निकालने के लिए बहुत सारे विजेट हैं, अद्यतन धीमा नहीं है, यह केवल झिलमिलाहट और अनावश्यक कॉल से बचने के लिए कॉल को दोबारा दबाता है। कोशिश करो। लेकिन अगर यह वास्तव में बहुत धीमी है, तो शायद QPainter के बजाय QtOpenGl का उपयोग करना बेहतर होगा? या शायद फोनन? वीडियो का स्रोत क्या है, बीटीडब्ल्यू? –

+0

मैं QPLWidget को प्रस्तुत करने के लिए उपयोग कर रहा हूं, बस QPainter :: drawImage() को कॉल करना - माना जाता है कि यह ओजीएल 2 के साथ हार्डवेयर तेज है। अंततः वीडियो एक कैमरा से है - लेकिन मुझे प्रत्येक QImage पर कुछ प्रसंस्करण करना है। –

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