+ DALI_LOG_INFO(gUniformBufferLogFilter, Debug::General, "Unlock (lockedBufferIndex : %d / %d [%d], lockedPtr : %p)\n", mLockedBufferIndex, mBuffers.size(), mSize, mLockedPtr);
+
+ // mLockedBufferIndex == INVALID_BUFFER_INDEX only first time of current RenderScene.
+ if(DALI_LIKELY(mLockedBufferIndex != INVALID_BUFFER_INDEX))
+ {
+ // Unlock previous memory
+ if(mBuffers[mLockedBufferIndex].memory)
+ {
+ mBuffers[mLockedBufferIndex].memory->Unlock(true);
+ }
+ }
+ mLockedBufferIndex = bufferIndex;
+ mLockedPtr = nullptr;
+
+ // Initial mapping done previously. Just lock and roll now.
+ if(mBuffers[mLockedBufferIndex].memory)
+ {
+ mLockedPtr = reinterpret_cast<uint8_t*>(mBuffers[mLockedBufferIndex].memory->LockRegion(0, mBuffers[mLockedBufferIndex].createInfo.size));
+ }
+ DALI_LOG_INFO(gUniformBufferLogFilter, Debug::General, "Lock (lockedBufferIndex : %d / %d [%d], lockedPtr : %p)\n", mLockedBufferIndex, mBuffers.size(), mSize, mLockedPtr);
+ }
+
+ DALI_LOG_INFO(gUniformBufferLogFilter, Debug::Verbose, "memcpy (lockedBufferIndex : %d / %d [%d], lockedPtr : %p, offset : %d, size : %d, lockedBufferSize : %d)\n", mLockedBufferIndex, mBuffers.size(), mSize, mLockedPtr, bufferOffset, size, mBuffers[mLockedBufferIndex].createInfo.size);
+
+ // We already check validation of buffer range. We can assume that bufferOffset + size <= mBuffers[mLockedBufferIndex].createInfo.size
+ if(mLockedPtr)
+ {
+ memcpy(mLockedPtr + bufferOffset, data, size);