+
+void UniformBuffer::ReadyToLockUniformBuffer()
+{
+ DALI_LOG_INFO(gUniformBufferLogFilter, Debug::General, "LockUniformBuffer\n");
+ if(DALI_UNLIKELY(mReadyToBeLocked && mLockedBufferIndex != INVALID_BUFFER_INDEX))
+ {
+ // Unlock previous locked buffer first
+ DALI_LOG_ERROR("Warning! : called LockUniformBuffer() before called UnlockUniformBuffer()!\n");
+ UnlockUniformBuffer();
+ }
+
+ mReadyToBeLocked = true;
+ mLockedBufferIndex = INVALID_BUFFER_INDEX;
+ mLockedPtr = nullptr;
+}
+
+void UniformBuffer::UnlockUniformBuffer()
+{
+ DALI_LOG_INFO(gUniformBufferLogFilter, Debug::General, "UnlockUniformBuffer (lockedBufferIndex : %d / %d [%d], lockedPtr : %p)\n", mLockedBufferIndex, mBuffers.size(), mSize, mLockedPtr);
+ if(mReadyToBeLocked && mLockedBufferIndex != INVALID_BUFFER_INDEX)
+ {
+ auto& bufferDesc = mBuffers[mLockedBufferIndex];
+ if(bufferDesc.memory)
+ {
+ bufferDesc.memory->Unlock(true);
+ }
+ // Flush all allocated buffers
+ for(auto i = 0u; i < mBuffers.size(); ++i)
+ {
+ Flush(i);
+ }
+ }
+ mLockedPtr = nullptr;
+ mLockedBufferIndex = INVALID_BUFFER_INDEX;
+ mReadyToBeLocked = false;
+}
+
+} // namespace Dali::Internal::Render
\ No newline at end of file