From 716f5d5bcb183d0ee8613fd64ff252860062a532 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 1 Feb 2018 09:15:36 +0100 Subject: [PATCH] framebuffer mode removed as it crashes in the multithreaded situation + didn't offer the expected workaround for the missing multisampling support on certain VMs --- src/controls/QskWindow.cpp | 87 -------------------------------------- src/controls/QskWindow.h | 17 -------- 2 files changed, 104 deletions(-) diff --git a/src/controls/QskWindow.cpp b/src/controls/QskWindow.cpp index 09a834ba..28bd7c94 100644 --- a/src/controls/QskWindow.cpp +++ b/src/controls/QskWindow.cpp @@ -101,7 +101,6 @@ class QskWindowPrivate : public QQuickWindowPrivate public: QskWindowPrivate(): preferredSize( -1, -1 ), - framebufferMode( QskWindow::DefaultFramebufferMode ), explicitLocale( false ), deleteOnClose( false ), autoLayoutChildren( true ) @@ -113,9 +112,7 @@ public: // minimum/maximum constraints are offered by QWindow QSize preferredSize; - QMetaObject::Connection renderTargetConnection; - QskWindow::FramebufferMode framebufferMode : 1; bool explicitLocale : 1; bool deleteOnClose : 1; bool autoLayoutChildren : 1; @@ -314,10 +311,6 @@ void QskWindow::resizeEvent( QResizeEvent* event ) if ( isExposed() ) layoutItems(); - - Q_D( QskWindow ); - if ( d->framebufferMode == OffscreenFramebufferMode ) - d->renderTargetSize = size() * devicePixelRatio(); } QLocale QskWindow::locale() const @@ -520,86 +513,6 @@ const char* QskWindow::customRenderMode() const return d->customRenderMode; } -void QskWindow::setFramebufferMode( FramebufferMode framebufferMode ) -{ - Q_D( QskWindow ); - - if ( d->framebufferMode == framebufferMode ) - return; - - d->framebufferMode = framebufferMode; - Q_EMIT framebufferModeChanged( d->framebufferMode ); - - connect( this, &QQuickWindow::beforeRendering, - this, &QskWindow::resizeFramebuffer ); -} - -QskWindow::FramebufferMode QskWindow::framebufferMode() const -{ - Q_D( const QskWindow ); - return d->framebufferMode; -} - -void QskWindow::resizeFramebuffer() -{ - Q_D( QskWindow ); - - QObject::disconnect( this, &QQuickWindow::beforeRendering, - this, &QskWindow::resizeFramebuffer ); - - if ( d->framebufferMode == DefaultFramebufferMode ) - { - delete renderTarget(); - setRenderTarget( nullptr ); - if ( d->renderTargetConnection ) - QObject::disconnect( d->renderTargetConnection ); - return; - } - - QOpenGLFramebufferObjectFormat renderTargetFormat; - renderTargetFormat.setAttachment( QOpenGLFramebufferObject::CombinedDepthStencil ); - - const auto samples = format().samples(); - if ( samples && QOpenGLExtensions( openglContext() ).hasOpenGLExtension( - QOpenGLExtensions::FramebufferMultisample ) ) - { - renderTargetFormat.setSamples( format().samples() ); - } - - delete renderTarget(); - - const auto framebufferSize = size() * devicePixelRatio(); - - setRenderTarget( new QOpenGLFramebufferObject( - framebufferSize, renderTargetFormat ) ); - - // Hack the size to render to a portion of the FBO - d->renderTargetSize = framebufferSize; - - if ( !d->renderTargetConnection ) - { - connect( this, &QQuickWindow::afterRendering, - this, &QskWindow::blitFramebuffer ); - } -} - -void QskWindow::blitFramebuffer() -{ - if ( clearBeforeRendering() ) - { - QOpenGLFunctions gl( openglContext() ); - QOpenGLFramebufferObject::bindDefault(); - const auto c = color(); - gl.glClearColor( c.redF(), c.greenF(), c.blueF(), c.alphaF() ); - gl.glClear( GL_COLOR_BUFFER_BIT ); - } - - const QRect rect( QPoint(), renderTargetSize() ); - QOpenGLFramebufferObject::blitFramebuffer( - nullptr, rect, renderTarget(), rect, - GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); -} - void QskWindow::enforceSkin() { if ( !qskEnforcedSkin ) diff --git a/src/controls/QskWindow.h b/src/controls/QskWindow.h index 2c9d7f15..f581e7b1 100644 --- a/src/controls/QskWindow.h +++ b/src/controls/QskWindow.h @@ -25,20 +25,9 @@ class QSK_EXPORT QskWindow : public QQuickWindow Q_PROPERTY( QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL ) - Q_PROPERTY( FramebufferMode framebufferMode READ framebufferMode - WRITE setFramebufferMode NOTIFY framebufferModeChanged FINAL ) - using Inherited = QQuickWindow; public: - enum FramebufferMode - { - DefaultFramebufferMode = 0, - OffscreenFramebufferMode = 1 - }; - - Q_ENUM( FramebufferMode ) - QskWindow( QWindow* parent = nullptr ); virtual ~QskWindow(); @@ -60,9 +49,6 @@ public: Q_INVOKABLE void setFixedSize( const QSize& ); - void setFramebufferMode( FramebufferMode ); - FramebufferMode framebufferMode() const; - void polishItems(); void setCustomRenderMode( const char* mode ); @@ -70,7 +56,6 @@ public: Q_SIGNALS: void localeChanged( const QLocale& ); - void framebufferModeChanged( FramebufferMode ); void autoLayoutChildrenChanged(); void deleteOnCloseChanged(); @@ -89,8 +74,6 @@ protected: virtual void ensureFocus( Qt::FocusReason ); private: - void resizeFramebuffer(); - void blitFramebuffer(); void enforceSkin(); Q_DECLARE_PRIVATE( QskWindow )