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:
parent
e39b0fd861
commit
716f5d5bcb
@ -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 )
|
||||
|
@ -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 )
|
||||
|
Loading…
x
Reference in New Issue
Block a user