Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QOpenGLWidget with QPainter coredump
Forum Updated to NodeBB v4.3 + New Features

QOpenGLWidget with QPainter coredump

Scheduled Pinned Locked Moved Solved General and Desktop
3 Posts 2 Posters 1.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    lygstate
    wrote on last edited by
    #1

    I was trying to calling QPainter after OpenGL rendering for tangram-es. and then it's coredump

    void GLWidget::paintGL()
    {
        QPainter painter;
        painter.begin(this);
    
        painter.beginNativePainting();
    
        tangramProcessNetworkQueue();
        double timeNow = currentTime();
        tangramUpdate(map, timeNow - lastTime);
        lastTime = timeNow;
    
        tangramRender(map);
    
        painter.endNativePainting();
    
        painter.setPen(Qt::black);
        painter.drawText(20, 40, QStringLiteral(" paintGL calls / s"));
        painter.end();
    
        update();
    
    }
    

    The stack trace is:

    Program received signal SIGSEGV, Segmentation fault.
    0x00007fffe4e24ec0 in ?? () from /usr/lib64/dri/swrast_dri.so
    
    
    #0  0x00007fffe4e24ec0 in ?? () from /usr/lib64/dri/swrast_dri.so
    #1  0x00007fffe4e3af58 in ?? () from /usr/lib64/dri/swrast_dri.so
    #2  0x00007fffe4e240ec in ?? () from /usr/lib64/dri/swrast_dri.so
    #3  0x00007fffe4e24474 in ?? () from /usr/lib64/dri/swrast_dri.so
    #4  0x00007ffff6ba2bfd in ?? () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
    #5  0x00007ffff6ba4284 in QOpenGL2PaintEngineEx::drawTextItem(QPointF const&, QTextItem const&) () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
    #6  0x00007ffff6b01905 in ?? () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
    #7  0x00007ffff6b02380 in QPainter::drawText(QPointF const&, QString const&, int, int) () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
    #8  0x000000000040c47d in QPainter::drawText (this=0x7fffffffce50, x=20, y=40, 
        s=...) at ../../../../Qt5.7.0/5.7/gcc_64/include/QtGui/qpainter.h:890
    #9  0x0000000000409cd1 in GLWidget::paintGL (this=0x6620b0)
        at ../../opengl/qopenglwidget/glwidget.cpp:346
    #10 0x00007ffff70e2a25 in ?? ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #11 0x00007ffff70c2b78 in QWidget::event(QEvent*) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #12 0x00007ffff707d52c in QApplicationPrivate::notify_helper(QObject*, QEvent*)
        () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #13 0x00007ffff7084220 in QApplication::notify(QObject*, QEvent*) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #14 0x00007ffff6091ae0 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
    ---Type <return> to continue, or q <return> to quit---
        () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5
    #15 0x00007ffff70bb54a in QWidgetPrivate::sendPaintEvent(QRegion const&) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #16 0x00007ffff70e28c1 in QOpenGLWidget::resizeEvent(QResizeEvent*) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #17 0x00007ffff70c300e in QWidget::event(QEvent*) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #18 0x00007ffff707d52c in QApplicationPrivate::notify_helper(QObject*, QEvent*)
        () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #19 0x00007ffff7084220 in QApplication::notify(QObject*, QEvent*) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #20 0x00007ffff6091ae0 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
        () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5
    #21 0x00007ffff70bb4d2 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #22 0x00007ffff70bf9a6 in QWidgetPrivate::show_helper() ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #23 0x00007ffff70bf8f0 in QWidgetPrivate::showChildren(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #24 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #25 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    ---Type <return> to continue, or q <return> to quit---
    #26 0x00007ffff70bf958 in QWidgetPrivate::showChildren(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #27 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #28 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #29 0x00007ffff70bf958 in QWidgetPrivate::showChildren(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #30 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #31 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #32 0x00007ffff70bf958 in QWidgetPrivate::showChildren(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #33 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #34 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
       from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
    #35 0x0000000000407df6 in main (argc=1, argv=0x7fffffffdba8)
        at ../../opengl/qopenglwidget/main.cpp:69
    

    So what's going on after all?

    kshegunovK 1 Reply Last reply
    0
    • L lygstate

      I was trying to calling QPainter after OpenGL rendering for tangram-es. and then it's coredump

      void GLWidget::paintGL()
      {
          QPainter painter;
          painter.begin(this);
      
          painter.beginNativePainting();
      
          tangramProcessNetworkQueue();
          double timeNow = currentTime();
          tangramUpdate(map, timeNow - lastTime);
          lastTime = timeNow;
      
          tangramRender(map);
      
          painter.endNativePainting();
      
          painter.setPen(Qt::black);
          painter.drawText(20, 40, QStringLiteral(" paintGL calls / s"));
          painter.end();
      
          update();
      
      }
      

      The stack trace is:

      Program received signal SIGSEGV, Segmentation fault.
      0x00007fffe4e24ec0 in ?? () from /usr/lib64/dri/swrast_dri.so
      
      
      #0  0x00007fffe4e24ec0 in ?? () from /usr/lib64/dri/swrast_dri.so
      #1  0x00007fffe4e3af58 in ?? () from /usr/lib64/dri/swrast_dri.so
      #2  0x00007fffe4e240ec in ?? () from /usr/lib64/dri/swrast_dri.so
      #3  0x00007fffe4e24474 in ?? () from /usr/lib64/dri/swrast_dri.so
      #4  0x00007ffff6ba2bfd in ?? () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
      #5  0x00007ffff6ba4284 in QOpenGL2PaintEngineEx::drawTextItem(QPointF const&, QTextItem const&) () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
      #6  0x00007ffff6b01905 in ?? () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
      #7  0x00007ffff6b02380 in QPainter::drawText(QPointF const&, QString const&, int, int) () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5
      #8  0x000000000040c47d in QPainter::drawText (this=0x7fffffffce50, x=20, y=40, 
          s=...) at ../../../../Qt5.7.0/5.7/gcc_64/include/QtGui/qpainter.h:890
      #9  0x0000000000409cd1 in GLWidget::paintGL (this=0x6620b0)
          at ../../opengl/qopenglwidget/glwidget.cpp:346
      #10 0x00007ffff70e2a25 in ?? ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #11 0x00007ffff70c2b78 in QWidget::event(QEvent*) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #12 0x00007ffff707d52c in QApplicationPrivate::notify_helper(QObject*, QEvent*)
          () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #13 0x00007ffff7084220 in QApplication::notify(QObject*, QEvent*) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #14 0x00007ffff6091ae0 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
      ---Type <return> to continue, or q <return> to quit---
          () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5
      #15 0x00007ffff70bb54a in QWidgetPrivate::sendPaintEvent(QRegion const&) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #16 0x00007ffff70e28c1 in QOpenGLWidget::resizeEvent(QResizeEvent*) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #17 0x00007ffff70c300e in QWidget::event(QEvent*) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #18 0x00007ffff707d52c in QApplicationPrivate::notify_helper(QObject*, QEvent*)
          () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #19 0x00007ffff7084220 in QApplication::notify(QObject*, QEvent*) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #20 0x00007ffff6091ae0 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
          () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5
      #21 0x00007ffff70bb4d2 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #22 0x00007ffff70bf9a6 in QWidgetPrivate::show_helper() ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #23 0x00007ffff70bf8f0 in QWidgetPrivate::showChildren(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #24 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #25 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      ---Type <return> to continue, or q <return> to quit---
      #26 0x00007ffff70bf958 in QWidgetPrivate::showChildren(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #27 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #28 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #29 0x00007ffff70bf958 in QWidgetPrivate::showChildren(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #30 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #31 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #32 0x00007ffff70bf958 in QWidgetPrivate::showChildren(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #33 0x00007ffff70bf9c2 in QWidgetPrivate::show_helper() ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #34 0x00007ffff70c2635 in QWidget::setVisible(bool) ()
         from /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5
      #35 0x0000000000407df6 in main (argc=1, argv=0x7fffffffdba8)
          at ../../opengl/qopenglwidget/main.cpp:69
      

      So what's going on after all?

      kshegunovK Offline
      kshegunovK Offline
      kshegunov
      Moderators
      wrote on last edited by
      #2

      @lygstate said in QOpenGLWidget with QPainter coredump:

      QPainter::drawText (this=0x7fffffffce50, x=20, y=40, s=...) at ../../../../Qt5.7.0/5.7/gcc_64/include/QtGui/qpainter.h:890
      

      This this=0x7fffffffce50 looks invalid.

      What happens if you run this code instead:

      void GLWidget::paintGL()
      {
          QPainter painter(this);
          painter.beginNativePainting();
      
          tangramProcessNetworkQueue();
          double timeNow = currentTime();
          tangramUpdate(map, timeNow - lastTime);
          lastTime = timeNow;
      
          tangramRender(map);
      
          painter.endNativePainting();
      
          update(); //< Do this externaly
      }
      

      By the way why do you use a native painting block? It's somewhat unusual.

      Read and abide by the Qt Code of Conduct

      1 Reply Last reply
      0
      • L Offline
        L Offline
        lygstate
        wrote on last edited by
        #3

        OK, I found the cause, it's because the tangramUpdate doesn't release some buffer

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved