diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2022-12-01 15:40:58 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2022-12-02 20:53:01 +0100 |
commit | 919664b29a874e8cdc3d74427654cbaa2b61be29 (patch) | |
tree | c9e6f5dd1ac69fc10b27c9fbf9cd2fe79a255d5e /examples/widgets/painting/composition | |
parent | f192ddad8b862d7ad2d80f28d265ea9f96142a3d (diff) |
Avoid continuous texture alloc in Composition Modes example
There seems to be some confusion from back when the example were
mass-ported to the QOpenGL stuff in Qt 5 times.
Pick-to: 6.4 6.2
Fixes: QTBUG-109119
Change-Id: Ic4bcd010df3fcf82e16385ce241b379f0c351788
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Diffstat (limited to 'examples/widgets/painting/composition')
-rw-r--r-- | examples/widgets/painting/composition/composition.cpp | 10 | ||||
-rw-r--r-- | examples/widgets/painting/composition/composition.h | 1 |
2 files changed, 7 insertions, 4 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 diff --git a/examples/widgets/painting/composition/composition.h b/examples/widgets/painting/composition/composition.h index b2fa2c5bb1..0745eb41b9 100644 --- a/examples/widgets/painting/composition/composition.h +++ b/examples/widgets/painting/composition/composition.h @@ -148,7 +148,6 @@ private: std::unique_ptr<QFboPaintDevice> m_fbo; int m_pbuffer_size; // width==height==size of pbuffer uint m_base_tex; - uint m_compositing_tex; QSize m_previous_size; QOpenGLTextureBlitter m_blitter; #endif |