2010-07-01 13 views
9

ग्रीटिंग्स,QGLWidget और हार्डवेयर त्वरण?

क्या बस QGLWidget subclassing और paintEvent() को पुन: कार्यान्वित करना ओपनजीएल और हार्डवेयर त्वरण का उपयोग करता है? मैं एक QPainter बनाते हैं और इस paintEvent() में QImages खींचते हैं।

QGLWidget की paintEvent() विधि के अंदर क्या होता है? क्या यह छवियों (QImage, QPixmap) को OpenGL बनावट में परिवर्तित करता है?

क्या यह छवि स्केलिंग के लिए हार्डवेयर त्वरण का उपयोग करता है?

अग्रिम धन्यवाद,

umanga
+1

बहुत असंभव लगता है। दस्तावेज़ों से - सिवाय इसके कि QPainter आदि का उपयोग करके विजेट की सामग्री को चित्रित करने के बजाय आप मानक ओपनजीएल प्रतिपादन आदेशों का उपयोग करते हैं। – tathagata

+2

@tathagata: दुर्भाग्यवश आप अपवित्र होने के बावजूद गलत हैं; कृपया प्रश्न का मेरा जवाब पढ़ें। –

+0

धन्यवाद ग्रेग, यह इंगित करने के लिए! मैं बस एक तार्किक अनुमान बना रहा था। मुझे लगता है कि मैं गलत था। – tathagata

उत्तर

13

एक निर्देशक उदाहरण के लिए http://doc.qt.io/archives/4.6/opengl-2dpainting.html पर एक नज़र डालें, जहां आप निम्न उद्धरण भी प्राप्त कर सकते हैं: "अपने [QGLWidget] paintEvent() को फिर से कार्यान्वित करना संभव है और डिवाइस पर आकर्षित करने के लिए QPainter का उपयोग करना, जैसा कि आप एक QWidget के साथ होगा। केवल अंतर यह है कि पेंटिंग ऑपरेशंस हार्डवेयर में तेज़ हो जाएंगे यदि यह आपके सिस्टम के ओपनजीएल ड्राइवरों द्वारा समर्थित है। "

तो, आपके पहले प्रश्न का उत्तर हाँ है।

void QOpenGLPaintEngine::drawImage(const QRectF &r, const QImage &image, 
           const QRectF &sr, Qt::ImageConversionFlags) 
{ 
    Q_D(QOpenGLPaintEngine); 
    if (d->composition_mode > QPainter::CompositionMode_Plus 
     || d->high_quality_antialiasing && !d->isFastRect(r)) 
     d->drawImageAsPath(r, image, sr); 
    else { 
     GLenum target = (QGLExtensions::glExtensions 
         & QGLExtensions::TextureRectangle) 
         ? GL_TEXTURE_RECTANGLE_NV 
         : GL_TEXTURE_2D; 
     if (r.size() != image.size()) 
      target = GL_TEXTURE_2D; 
     d->flushDrawQueue(); 
     d->drawable.bindTexture(image, target); 
     drawTextureRect(image.width(), image.height(), r, sr, target); 
    } 
} 

यह आपके सवाल का जवाब:

कार्यान्वयन का सटीक विवरण पता लगाना के लिए, QOpenGLPaintEngine से स्रोत-कोड का एक टुकड़ा (इंटरनेट खोज के द्वारा पाया जा सकता है) इसकी एक झलक लेते हैं QImages के संबंध में, वे वास्तव में बनावट का उपयोग कर खींचे जाते हैं।

+0

बहुत बहुत धन्यवाद ग्रेग! जो मेरे संदेह को मंजूरी दे दी। –

+3

opensource के लाभ! –

6

हाँ, यदि आप जीएल एक QGLWidget अंदर आदेश का उपयोग करें, paintGL, resizeGL और initializeGL तरीकों के अंदर, आप पूर्ण हार्डवेयर त्वरण मिल जाएगा (यदि उपलब्ध हो)।

यह भी लगता है कि एक QGLWidget में QPainter का उपयोग करने से एचडब्ल्यू त्वरण भी मिलता है, क्योंकि ओपनजीएल क्यूपेनइंजिन कार्यान्वयन होता है, आप उस here के बारे में पढ़ सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^