diff options
author | YAMAMOTO Atsushi <atsushi.yamamoto@signal-slot.co.jp> | 2022-06-23 20:22:55 +0900 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-06-24 13:23:29 +0000 |
commit | c3b21eeb432f8b09683b134b9b6e522bbf5599b6 (patch) | |
tree | 2d0499a7e25bb103a2b908b2060bc52c21489323 | |
parent | 3aefbda5247dc366e951f8d64c23ee579b7c870d (diff) |
RHI: fix Rhi::Renderer that creating bad QImage instance
Rhi::Renderer frees the memory referenced by QImage immediately after generating QImage.
This memory should not be freed during using QImage.
Task-number: QTBUG-104534
Change-Id: Ib17c91c1e87d7544d1bf9a836f554f351c0b3968
Reviewed-by: Mike Krus <mike.krus@kdab.com>
(cherry picked from commit e70cdcc26d51410c6b2968160c549e55f12a5a5d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/plugins/renderers/rhi/renderer/renderer.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/plugins/renderers/rhi/renderer/renderer.cpp b/src/plugins/renderers/rhi/renderer/renderer.cpp index e51bef278..cfffd064c 100644 --- a/src/plugins/renderers/rhi/renderer/renderer.cpp +++ b/src/plugins/renderers/rhi/renderer/renderer.cpp @@ -2780,13 +2780,14 @@ bool Renderer::executeCommandsSubmission(const RHIPassInfo &passInfo) readBackResult->completed = [this, readBackResult, renderCaptureId, request] () { const QImage::Format fmt = QImage::Format_RGBA8888_Premultiplied; // fits QRhiTexture::RGBA8 const uchar *p = reinterpret_cast<const uchar *>(readBackResult->data.constData()); - const QImage image(p, readBackResult->pixelSize.width(), readBackResult->pixelSize.height(), fmt); + const QImage image(p, readBackResult->pixelSize.width(), readBackResult->pixelSize.height(), fmt, [] (void *ptr) { + delete static_cast<QRhiReadbackResult *>(ptr); + }, readBackResult); Render::RenderCapture *renderCapture = static_cast<Render::RenderCapture*>(m_nodesManager->frameGraphManager()->lookupNode(renderCaptureId)); renderCapture->addRenderCapture(request.captureId, image); if (!Qt3DCore::contains(m_pendingRenderCaptureSendRequests, renderCaptureId)) m_pendingRenderCaptureSendRequests.push_back(renderCaptureId); - delete readBackResult; }; QRhiReadbackDescription readbackDesc; |