diff --git a/src/gui/rhi/qrhi.cpp b/src/gui/rhi/qrhi.cpp index bfcf2d99339..521ea92d942 100644 --- a/src/gui/rhi/qrhi.cpp +++ b/src/gui/rhi/qrhi.cpp @@ -4005,11 +4005,11 @@ void QRhiBuffer::endFullDynamicBufferUpdateForCurrentFrame() /*! \internal */ -void QRhiBuffer::fullDynamicBufferUpdateForCurrentFrame(const void *data) +void QRhiBuffer::fullDynamicBufferUpdateForCurrentFrame(const void *data, quint32 size) { char *p = beginFullDynamicBufferUpdateForCurrentFrame(); if (p) { - memcpy(p, data, m_size); + memcpy(p, data, size > 0 ? size : m_size); endFullDynamicBufferUpdateForCurrentFrame(); } } diff --git a/src/gui/rhi/qrhi.h b/src/gui/rhi/qrhi.h index 8e5ef695822..ffaa1d88e18 100644 --- a/src/gui/rhi/qrhi.h +++ b/src/gui/rhi/qrhi.h @@ -881,7 +881,7 @@ public: virtual char *beginFullDynamicBufferUpdateForCurrentFrame(); virtual void endFullDynamicBufferUpdateForCurrentFrame(); - virtual void fullDynamicBufferUpdateForCurrentFrame(const void *data); + virtual void fullDynamicBufferUpdateForCurrentFrame(const void *data, quint32 size = 0); protected: QRhiBuffer(QRhiImplementation *rhi, Type type_, UsageFlags usage_, quint32 size_); diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp index 3954a7d6891..53523ba9143 100644 --- a/src/gui/rhi/qrhigles2.cpp +++ b/src/gui/rhi/qrhigles2.cpp @@ -5356,14 +5356,15 @@ void QGles2Buffer::endFullDynamicBufferUpdateForCurrentFrame() } } -void QGles2Buffer::fullDynamicBufferUpdateForCurrentFrame(const void *bufferData) +void QGles2Buffer::fullDynamicBufferUpdateForCurrentFrame(const void *bufferData, quint32 size) { + const quint32 copySize = size > 0 ? size : m_size; if (!m_usage.testFlag(UniformBuffer)) { QRHI_RES_RHI(QRhiGles2); rhiD->f->glBindBuffer(targetForDataOps, buffer); - rhiD->f->glBufferSubData(targetForDataOps, 0, m_size, bufferData); + rhiD->f->glBufferSubData(targetForDataOps, 0, copySize, bufferData); } else { - memcpy(data.data(), bufferData, m_size); + memcpy(data.data(), bufferData, copySize); } } diff --git a/src/gui/rhi/qrhigles2_p.h b/src/gui/rhi/qrhigles2_p.h index 61ab99c260d..a2925eb5c7a 100644 --- a/src/gui/rhi/qrhigles2_p.h +++ b/src/gui/rhi/qrhigles2_p.h @@ -38,7 +38,7 @@ struct QGles2Buffer : public QRhiBuffer QRhiBuffer::NativeBuffer nativeBuffer() override; char *beginFullDynamicBufferUpdateForCurrentFrame() override; void endFullDynamicBufferUpdateForCurrentFrame() override; - void fullDynamicBufferUpdateForCurrentFrame(const void *data) override; + void fullDynamicBufferUpdateForCurrentFrame(const void *data, quint32 size) override; quint32 nonZeroSize = 0; GLuint buffer = 0;