framebuffer mode removed as it crashes in the multithreaded situation +

didn't offer the expected workaround for the missing multisampling
support on certain VMs
This commit is contained in:
Uwe Rathmann 2018-02-01 09:15:36 +01:00
parent e39b0fd861
commit 716f5d5bcb
2 changed files with 0 additions and 104 deletions

View File

@ -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 )

View File

@ -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 )