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. Different behaviour of QPainter on QOpenGLWidget using different graphics cards - how to debug
QtWS25 Last Chance

Different behaviour of QPainter on QOpenGLWidget using different graphics cards - how to debug

Scheduled Pinned Locked Moved Unsolved General and Desktop
8 Posts 2 Posters 1.8k Views
  • 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.
  • A Offline
    A Offline
    axeljaeger17
    wrote on last edited by A Former User
    #1

    Hello,
    I am currently developing an application with an OpenGL scene and I am about to introduce 2D overlays on top of that.

    I evaluated two options to do that: Using OpenGL directly and using a QPainter. I would prefer using a QPainter but I found on problem so far with this approach:

    I tested a very simple application on two different systems: an nividia quadro and on my Surface Pro 3 Intel Core i5-4300U that just draw a red square on top of of a QOpenGLWidget:

    GLWidget::GLWidget(QWidget *parent)
        : QOpenGLWidget(parent) {}
    
    GLWidget::~GLWidget() {}
    
    void GLWidget::paintGL()
    {
        QPainter p(this);
        p.setBrush(Qt::red);
        p.drawRect(10,10,100,100);
    }
    

    In my main.cpp I tried different OpenGL-Context-Versions:

    #include "GLWidget.h"
    #include <QApplication>
    #include <QSurfaceFormat>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QSurfaceFormat format;
        format.setDepthBufferSize(24);
        format.setStencilBufferSize(8);
        format.setSamples(4);
        format.setVersion(4, 3); // Commented out for some of the tests
        format.setProfile(QSurfaceFormat::CompatibilityProfile);
        QSurfaceFormat::setDefaultFormat(format);
    
        GLWidget w;
        w.show();
    
        return a.exec();
    }
    

    I tried the 4.3 context and the default context which is a 2.0 OpenGL-Context I think. The result is:

    • Quadro shows the red square in both cases
    • Intel shows the red square only with the default version, the window remains pure black when requesting a 4.3 context.

    There is no error message in case of 4.3 on intel. In my main application I am perfectly fine to draw the real OpenGL-stuff using my intel graphics including shaders etc. Also intel states that the 4300U does indeed support OpenGL 4.3.

    Does anyone has an idea on how to further debug this? The problem might get resolved using 5.9 with QPainter support on core opengl profiles so I will try in two weeks as soon as the TP is out.

    Best regards

    Axel

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Did you check that you are getting the context you are asking for ? And that you are indeed using the desktop OpenGL and not falling back to Angle in the case of the Intel card ?

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • A Offline
        A Offline
        axeljaeger17
        wrote on last edited by
        #3

        Hello,
        thank you for your answer. Here is what I get when setting QT_LOGGING_RUILE to qt.qpa.gl=true when requesting the 4.3 context on intel:

        qt.qpa.gl: createPlatformOpenGLContext QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 4, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile))
        qt.qpa.gl: Basic wglCreateContext gives version 4.3
        qt.qpa.gl: OpenGL 2.0 entry points available
        qt.qpa.gl: GPU features: QSet()
        qt.qpa.gl: supportedRenderers GpuDescription(vendorId=0x8086, deviceId=0xa16, subSysId=0x51414, revision=11, driver: "igdumdim32.dll", version=20.19.15.4568, "Intel(R) HD Graphics Family") renderer:  QFlags(0x1|0x2|0x4|0x8|0x20)
        qt.qpa.gl: Qt: Using WGL and OpenGL from "opengl32.dll"
        qt.qpa.gl: create OpenGL: "Intel","Intel(R) HD Graphics 4400" default ContextFormat: v4.3 profile: QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile) options: QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions),SampleBuffers, Extension-API present
        Extensions: 200
        qt.qpa.gl: "choosePixelFormat  samples= 4  Attributes:  0x2003 , 0x2027 , 0x2010 , 0x1 , 0x2001 , 0x1 , 0x2014 , 0x18 , 0x2011 , 0x1 , 0x2022 , 0x18 , 0x2013 , 0x202b , 0x201b , 0x8 , 0x2023 , 0x8 , 0x2041 , 0x1 , 0x2042 , 0x4 , \n    obtained px # 22  of  1 \n     PIXELFORMATDESCRIPTOR dwFlags=0x8205 PFD_DRAW_TO_WINDOW PFD_SUPPORT_COMPOSITION PFD_DOUBLEBUFFER iPixelType=0 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=24 cStencilBits=8 iLayerType=0 cAlphaBits=8 cAlphaShift=24 cAccumBits=64 cAccumRedBits=16 cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16 "
        qt.qpa.gl: createContext Creating context version 4 . 3 4 attributes
        qt.qpa.gl: QWindowsGLContext 0x1eca9fb8 ARB  requested:  QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 4, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile)) 
            obtained # 22 ARB QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 4, swapBehavior QSurfaceFormat::SwapBehavior(DoubleBuffer), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile)) 
             PIXELFORMATDESCRIPTOR dwFlags=0x8205 PFD_DRAW_TO_WINDOW PFD_SUPPORT_COMPOSITION PFD_DOUBLEBUFFER iPixelType=0 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=24 cStencilBits=8 iLayerType=0 cAlphaBits=8 cAlphaShift=24 cAccumBits=64 cAccumRedBits=16 cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16  swap interval:  1 
            default:  ContextFormat: v4.3 profile: QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile) options: QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions) 
            HGLRC= 0x30000
        qt.qpa.gl: createPlatformOpenGLContext QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile))
        qt.qpa.gl: "choosePixelFormat  Attributes:  0x2003 , 0x2027 , 0x2010 , 0x1 , 0x2001 , 0x1 , 0x2014 , 0x18 , 0x2011 , 0x1 , 0x2022 , 0x18 , 0x2013 , 0x202b , 0x201b , 0x8 , 0x2023 , 0x8 , 0x2041 , 0x0 , \n    obtained px # 5  of  1 \n     PIXELFORMATDESCRIPTOR dwFlags=0x8225 PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL PFD_SUPPORT_COMPOSITION PFD_DOUBLEBUFFER iPixelType=0 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=24 cStencilBits=8 iLayerType=0 cAlphaBits=8 cAlphaShift=24 cAccumBits=64 cAccumRedBits=16 cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16 "
        qt.qpa.gl: createContext Creating context version 4 . 3 4 attributes
        qt.qpa.gl: QWindowsGLContext 0x1eca9378 ARB  requested:  QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile)) 
            obtained # 5 ARB QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DoubleBuffer), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile)) 
             PIXELFORMATDESCRIPTOR dwFlags=0x8225 PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL PFD_SUPPORT_COMPOSITION PFD_DOUBLEBUFFER iPixelType=0 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=24 cStencilBits=8 iLayerType=0 cAlphaBits=8 cAlphaShift=24 cAccumBits=64 cAccumRedBits=16 cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16  swap interval:  1 
            default:  ContextFormat: v4.3 profile: QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile) options: QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions) 
            HGLRC= 0x10001
        

        As far as I see, I get the correct context. When forcing ANGLE by setting Qt::AA_UseSoftwareOpenGL to true, I get a different behaviour: (White window instead of black window, this output and everytime the window has to be drawn "composeAndFlush: makeCurrent() failed" and the following output during startup:

        qt.qpa.gl: createPlatformOpenGLContext QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 4, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile))
        qt.qpa.gl: Qt: Using WGL and OpenGL from "opengl32sw.dll"
        qt.qpa.gl: create OpenGL: "VMware, Inc.","Gallium 0.4 on llvmpipe (LLVM 3.6, 256 bits)" default ContextFormat: v3.0 profile: QSurfaceFormat::OpenGLContextProfile(NoProfile) options: QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions),SampleBuffers, Extension-API present
        Extensions: 207
        qt.qpa.gl: "choosePixelFormat  samples= 0  Attributes:  0x2003 , 0x2027 , 0x2010 , 0x1 , 0x2001 , 0x1 , 0x2014 , 0x18 , 0x2011 , 0x1 , 0x2022 , 0x18 , 0x2013 , 0x202b , 0x201b , 0x8 , 0x2023 , 0x8 , 0x2041 , 0x1 , 0x0 , 0x0 , \n    obtained px # 0  of  0 \n     PIXELFORMATDESCRIPTOR dwFlags=0x0 iPixelType=0 cColorBits=0 cRedBits=0 cRedShift=0 cGreenBits=0 cGreenShift=0 cBlueBits=0 cBlueShift=0 cDepthBits=0 iLayerType=0 "
        Attempted to use GDI functions with a non-opengl32.dll library
        QWindowsGLContext: Unable find a suitable pixel format.
        qt.qpa.gl: QWindowsGLContext 0x165394c8 ARB  requested:  QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 4, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile)) 
            obtained # 0 GDI QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize -1, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile)) 
             PIXELFORMATDESCRIPTOR dwFlags=0x0 iPixelType=0 cColorBits=0 cRedBits=0 cRedShift=0 cGreenBits=0 cGreenShift=0 cBlueBits=0 cBlueShift=0 cDepthBits=0 iLayerType=0  swap interval:  -1 
            default:  ContextFormat: v3.0 profile: QSurfaceFormat::OpenGLContextProfile(NoProfile) options: QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions) 
            HGLRC= 0x0
        qt.qpa.gl: createPlatformOpenGLContext QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile))
        qt.qpa.gl: "choosePixelFormat  Attributes:  0x2003 , 0x2027 , 0x2010 , 0x1 , 0x2001 , 0x1 , 0x2014 , 0x18 , 0x2011 , 0x1 , 0x2022 , 0x18 , 0x2013 , 0x202b , 0x201b , 0x8 , 0x2023 , 0x8 , 0x2041 , 0x0 , \n    obtained px # 45  of  1 \n     PIXELFORMATDESCRIPTOR dwFlags=0x807c PFD_DRAW_TO_WINDOW PFD_DRAW_TO_BITMAP PFD_SUPPORT_GDI PFD_SUPPORT_OPENGL PFD_SUPPORT_COMPOSITION PFD_GENERIC_FORMAT iPixelType=1 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=16 cStencilBits=8 iLayerType=0 "
        qt.qpa.gl: createContext Creating context version 3 . 0 3 attributes
        qt.qpa.gl: QWindowsGLContext 0x16539a08 ARB  requested:  QSurfaceFormat(version 4.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(CompatibilityProfile)) 
            obtained # 45 ARB QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DoubleBuffer), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile)) 
             PIXELFORMATDESCRIPTOR dwFlags=0x807c PFD_DRAW_TO_WINDOW PFD_DRAW_TO_BITMAP PFD_SUPPORT_GDI PFD_SUPPORT_OPENGL PFD_SUPPORT_COMPOSITION PFD_GENERIC_FORMAT iPixelType=1 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=16 cStencilBits=8 iLayerType=0  swap interval:  0 
            default:  ContextFormat: v3.0 profile: QSurfaceFormat::OpenGLContextProfile(NoProfile) options: QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions) 
            HGLRC= 0x1
        
        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Indeed, it looks like you are getting the correct context, so I wonder whether it's a driver problem.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • A Offline
            A Offline
            axeljaeger17
            wrote on last edited by
            #5

            I did another test on an Intel i5-3470 and got the same behaviour. I think I have to report a bug here.

            I dont see a way to upload files here. I would like to share my testcase so other people could confirm the behaviour.

            Best regards,

            Axel

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #6

              Since you have precise spec that ends in failure, you should go directly to the bug report system. First check if there's already something related, if so, you can add your findings and sample test case to that report. If not then please open a new report providing as much details as you can as well as your sample application.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • A Offline
                A Offline
                axeljaeger17
                wrote on last edited by
                #7

                Reported: https://bugreports.qt.io/browse/QTBUG-59070

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  Nice to see it's already fixed for 5.9 !

                  Thanks for the link :)

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  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