[Interest] Bad application rendering on Remote Desktop

Calogero Mauceri mauceri at actgate.com
Mon Apr 27 16:17:40 CEST 2015


Hi all,

switching my application from using QGLWidget to the new QOpenGLWidget I 
noticed a very weird problem when using the application through Remote 
Desktop on Windows. The whole application is fully black, it is not 
properly rendered, not only the QOpenGLWidget, but also the other 
widgets in the application.

I created a very simple example demonstrating my issue.

MyWidget::MyWidget(QWidget* parent, Qt::WindowFlags fl)
     : QWidget(parent, fl)
{
     QVBoxLayout *vBoxLayout = new QVBoxLayout(this);
     QHBoxLayout *hLayout = new QHBoxLayout;

     QLabel *myLabel = new QLabel("Test", this);
     QPushButton *myButton = new QPushButton("Test", this);
     hLayout->addWidget(myLabel);
     hLayout->addWidget(myButton);

     QGLWidget *myOPenGLWidget = new QGLWidget(this);
     // QOpenGLWidget *myOPenGLWidget = new QOpenGLWidget(this);// this 
causes bad app rendering on Remote Desktop

     vBoxLayout->addItem(hLayout);
     vBoxLayout->addWidget(myOPenGLWidget);
}

When I use QGLWidget the widgets are properly rendered, as you can see 
in the attached image. When I replace the QGLWidget with its counter 
part QOpenGLWidget then the whole app is fully black when launched 
through remote desktop (on Windows), no widget is rendered (see other 
image attached). If I run the application on my local machine, then 
everything is properly rendered.

Am I doing something wrong? Or is this a limit/bug in Qt (I'm using 
latest Qt version, 5.4.1)?

This is my main

int main( int argc, char *argv[] )
{
     QApplication appMain(argc, argv);

     MyWidget *mainWin = new MyWidget;
     mainWin->show();

     return appMain.exec();
}

I enabled qt.qpa.gl debugging and this is the output of the application 
in the two cases.

Output in case of QGLWidget enabled:
[...]
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext 
QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 1, 
redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize 
-1, stencilBufferSize 1, samples -1, swapBehavior 2, swapInterval -1, 
profile  0)
qt.qpa.gl: Qt: Using WGL and OpenGL from "opengl32.dll"
qt.qpa.gl: QOpenGLStaticContext::create OpenGL: "Microsoft 
Corporation","GDI Generic" default ContextFormat: v1.1 profile: 0 
options: QFlags(0x4)
Extensions: 3
qt.qpa.gl: QWindowsGLContext::QWindowsGLContext 0x6be850 GDI  
requested:  QSurfaceFormat(version 2.0, options QFlags(), 
depthBufferSize 1, redBufferSize -1, greenBufferSize -1, blueBufferSize 
-1, alphaBufferSize -1, stencilBufferSize 1, samples -1, swapBehavior 2, 
swapInterval -1, profile  0)
     obtained # 8 GDI QSurfaceFormat(version 1.1, options QFlags(0x4), 
depthBufferSize 16, redBufferSize 8, greenBufferSize 8, blueBufferSize 
8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior 2, 
swapInterval 1, profile  0)
      PIXELFORMATDESCRIPTOR dwFlags=0x465 PFD_DRAW_TO_WINDOW 
PFD_SUPPORT_OPENGL PFD_GENERIC_FORMAT PFD_DOUBLEBUFFER iPixelType=0 
cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 
cBlueBits=8 cBlueShift=0 cDepthBits=16 cStencilBits=8 iLayerType=0 
cAlphaBits=8 cAlphaShift=0 cAccumBits=64 cAccumRedBits=16 
cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16 swap interval: -1
     default: ContextFormat: v1.1 profile: 0 options: QFlags(0x4)
     HGLRC=0x20000
[...]

Output in case of QOpenGLWidget enabled:
[...]
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext 
QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize -1, 
redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize 
-1, stencilBufferSize -1, samples -1, swapBehavior 0, swapInterval 1, 
profile  0)
qt.qpa.gl: Qt: Using WGL and OpenGL from "opengl32.dll"
qt.qpa.gl: QOpenGLStaticContext::create OpenGL: "Microsoft 
Corporation","GDI Generic" default ContextFormat: v1.1 profile: 0 
options: QFlags(0x4)
Extensions: 3
qt.qpa.gl: QWindowsGLContext::QWindowsGLContext 0x4c0e68 GDI  
requested:  QSurfaceFormat(version 2.0, options QFlags(), 
depthBufferSize -1, redBufferSize -1, greenBufferSize -1, blueBufferSize 
-1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior 
0, swapInterval 1, profile  0)
     obtained # 7 GDI QSurfaceFormat(version 1.1, options QFlags(0x4), 
depthBufferSize 32, redBufferSize 8, greenBufferSize 8, blueBufferSize 
8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior 2, 
swapInterval 1, profile  0)
      PIXELFORMATDESCRIPTOR dwFlags=0x465 PFD_DRAW_TO_WINDOW 
PFD_SUPPORT_OPENGL PFD_GENERIC_FORMAT PFD_DOUBLEBUFFER iPixelType=0 
cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 
cBlueBits=8 cBlueShift=0 cDepthBits=32 cStencilBits=8 iLayerType=0 
cAlphaBits=8 cAlphaShift=0 cAccumBits=64 cAccumRedBits=16 
cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16 swap interval: -1
     default: ContextFormat: v1.1 profile: 0 options: QFlags(0x4)
     HGLRC=0x20000
QOpenGLShaderProgram: could not create shader program
QOpenGLShader: could not create shader
bool __thiscall QOpenGLTextureBlitter::create(void) Could not link 
shader program:
  ""
QOpenGLBuffer::bind(): buffer not created
QOpenGLBuffer::release(): buffer not created
QOpenGLBuffer::bind(): buffer not created
QOpenGLBuffer::release(): buffer not created
[...]

Thanks in advance for your help!
Calogero

-- 
Calogero Mauceri
Software Engineer

Applied Coherent Technology Corporation (ACT)
www.actgate.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: qglwidget.jpg
Type: image/jpeg
Size: 7814 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150427/58786eb8/attachment.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: qopenglwidget.jpg
Type: image/jpeg
Size: 5401 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150427/58786eb8/attachment-0001.jpg>


More information about the Interest mailing list