summaryrefslogtreecommitdiffstats
path: root/examples/widgets/painting/composition/composition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/painting/composition/composition.cpp')
-rw-r--r--examples/widgets/painting/composition/composition.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/examples/widgets/painting/composition/composition.cpp b/examples/widgets/painting/composition/composition.cpp
index 93ca5259aa..b902498b2d 100644
--- a/examples/widgets/painting/composition/composition.cpp
+++ b/examples/widgets/painting/composition/composition.cpp
@@ -219,6 +219,7 @@ CompositionRenderer::CompositionRenderer(QWidget *parent)
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
#if QT_CONFIG(opengl)
m_pbuffer_size = 1024;
+ m_base_tex = 0;
#endif
}
@@ -314,6 +315,7 @@ void CompositionRenderer::paint(QPainter *painter)
{
#if QT_CONFIG(opengl)
if (usesOpenGL() && glWindow()->isValid()) {
+ auto *funcs = QOpenGLContext::currentContext()->functions();
if (!m_blitter.isCreated())
m_blitter.create();
@@ -338,10 +340,13 @@ void CompositionRenderer::paint(QPainter *painter)
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
drawBase(p);
p.end();
+ if (m_base_tex)
+ funcs->glDeleteTextures(1, &m_base_tex);
m_base_tex = m_fbo->takeTexture();
}
painter->beginNativePainting();
+ uint compositingTex;
{
QPainter p(m_fbo.get());
p.beginNativePainting();
@@ -353,19 +358,18 @@ void CompositionRenderer::paint(QPainter *painter)
p.endNativePainting();
drawSource(p);
p.end();
- m_compositing_tex = m_fbo->takeTexture();
+ compositingTex = m_fbo->texture();
}
painter->endNativePainting();
painter->beginNativePainting();
- auto *funcs = QOpenGLContext::currentContext()->functions();
funcs->glEnable(GL_BLEND);
funcs->glBlendEquation(GL_FUNC_ADD);
funcs->glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
m_blitter.bind();
const QRect targetRect(QPoint(0, 0), m_fbo->size());
const QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(0, 0), size()));
- m_blitter.blit(m_compositing_tex, target, QOpenGLTextureBlitter::OriginBottomLeft);
+ m_blitter.blit(compositingTex, target, QOpenGLTextureBlitter::OriginBottomLeft);
m_blitter.release();
painter->endNativePainting();
} else