summaryrefslogtreecommitdiffstats
path: root/examples/widgets/painting/shared
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/painting/shared')
-rw-r--r--examples/widgets/painting/shared/fbopaintdevice.cpp17
-rw-r--r--examples/widgets/painting/shared/fbopaintdevice.h2
-rw-r--r--examples/widgets/painting/shared/hoverpoints.cpp2
3 files changed, 16 insertions, 5 deletions
diff --git a/examples/widgets/painting/shared/fbopaintdevice.cpp b/examples/widgets/painting/shared/fbopaintdevice.cpp
index 305f4f2c2c..5875e6574b 100644
--- a/examples/widgets/painting/shared/fbopaintdevice.cpp
+++ b/examples/widgets/painting/shared/fbopaintdevice.cpp
@@ -24,11 +24,13 @@ QFboPaintDevice::QFboPaintDevice(const QSize &size, bool flipped, bool clearOnIn
context()->functions()->glClearColor(0, 0, 0, 0);
context()->functions()->glClear(GL_COLOR_BUFFER_BIT);
}
+ m_resolvedFbo = new QOpenGLFramebufferObject(m_framebufferObject->size(), m_framebufferObject->attachment());
}
QFboPaintDevice::~QFboPaintDevice()
{
delete m_framebufferObject;
+ delete m_resolvedFbo;
delete m_surface;
}
@@ -40,12 +42,19 @@ void QFboPaintDevice::ensureActiveTarget()
m_framebufferObject->bind();
}
+GLuint QFboPaintDevice::texture()
+{
+ m_resolvedFbo->bind(); // to get the backing texture recreated if it was taken (in takeTexture) previously
+ QOpenGLFramebufferObject::blitFramebuffer(m_resolvedFbo, m_framebufferObject);
+ return m_resolvedFbo->texture();
+}
+
GLuint QFboPaintDevice::takeTexture()
{
- // We have multisamples so we can't just forward takeTexture().
- QOpenGLFramebufferObject resolvedFbo(m_framebufferObject->size(), m_framebufferObject->attachment());
- QOpenGLFramebufferObject::blitFramebuffer(&resolvedFbo, m_framebufferObject);
- return resolvedFbo.takeTexture();
+ m_resolvedFbo->bind(); // to get the backing texture recreated if it was taken (in takeTexture) previously
+ // We have multisamples so we can't just forward takeTexture(), have to resolve first.
+ QOpenGLFramebufferObject::blitFramebuffer(m_resolvedFbo, m_framebufferObject);
+ return m_resolvedFbo->takeTexture();
}
QImage QFboPaintDevice::toImage() const
diff --git a/examples/widgets/painting/shared/fbopaintdevice.h b/examples/widgets/painting/shared/fbopaintdevice.h
index a46166217b..b2e77a228a 100644
--- a/examples/widgets/painting/shared/fbopaintdevice.h
+++ b/examples/widgets/painting/shared/fbopaintdevice.h
@@ -22,6 +22,7 @@ public:
bool isValid() const { return m_framebufferObject->isValid(); }
GLuint handle() const { return m_framebufferObject->handle(); }
+ GLuint texture();
GLuint takeTexture();
QImage toImage() const;
@@ -36,6 +37,7 @@ public:
private:
QOpenGLFramebufferObject *m_framebufferObject;
+ QOpenGLFramebufferObject *m_resolvedFbo;
QSurface *m_surface;
};
diff --git a/examples/widgets/painting/shared/hoverpoints.cpp b/examples/widgets/painting/shared/hoverpoints.cpp
index 7d2bb81538..87e1eb4415 100644
--- a/examples/widgets/painting/shared/hoverpoints.cpp
+++ b/examples/widgets/painting/shared/hoverpoints.cpp
@@ -268,7 +268,7 @@ void HoverPoints::paintPoints()
p.setPen(m_pointPen);
p.setBrush(m_pointBrush);
- for (const auto &point : qAsConst(m_points)) {
+ for (const auto &point : std::as_const(m_points)) {
QRectF bounds = pointBoundingRect(point);
if (m_shape == CircleShape)
p.drawEllipse(bounds);