summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYAMAMOTO Atsushi <atsushi.yamamoto@signal-slot.co.jp>2022-06-23 20:22:55 +0900
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-07-14 01:03:04 +0000
commit580c1161c739e6d30da0b9812031747765cdc0b5 (patch)
treeff14355b0a1aeccb1139a2bc4a2dd28807276e4a
parent3ef20fe3f6345864a6205e61e965a5452735d6a0 (diff)
downloadqt3d-580c1161c739e6d30da0b9812031747765cdc0b5.tar.gz
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: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r--src/plugins/renderers/rhi/renderer/renderer.cpp5
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 1f3043fd4..5d25e3257 100644
--- a/src/plugins/renderers/rhi/renderer/renderer.cpp
+++ b/src/plugins/renderers/rhi/renderer/renderer.cpp
@@ -2746,14 +2746,15 @@ 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);
QMutexLocker lock(&m_pendingRenderCaptureSendRequestsMutex);
if (!Qt3DCore::contains(m_pendingRenderCaptureSendRequests, renderCaptureId))
m_pendingRenderCaptureSendRequests.push_back(renderCaptureId);
- delete readBackResult;
};
QRhiReadbackDescription readbackDesc;