36 const void* data =
m_buffer->getData();
39 if (!data || size == 0) {
43 uint32_t maxFrames =
m_ctx->maxFrameInFlight();
44 size_t copySize = std::min(size,
static_cast<size_t>(
m_bufferInfos[0].range));
51 uint32_t frameIndex =
m_ctx->currentSubmitFrameIndex();
62 uint32_t currentFrame =
m_ctx->currentSubmitFrameIndex();
74 for (uint32_t i = 0; i < maxFrames; i++) {
75 if (i != currentFrame) {
123 vk::Device device =
m_ctx->getDevice();
124 uint32_t maxFramesInFlight =
m_ctx->maxFrameInFlight();
126 vk::DeviceSize bufferSize =
m_layout.getTotalSize();
127 if (bufferSize == 0) {
136 for (uint32_t i = 0; i < maxFramesInFlight; i++) {
138 vk::BufferCreateInfo bufferInfo;
139 bufferInfo.size = bufferSize;
140 bufferInfo.usage = vk::BufferUsageFlagBits::eUniformBuffer;
141 bufferInfo.sharingMode = vk::SharingMode::eExclusive;
143 m_buffers[i] = device.createBuffer(bufferInfo);
145 vk::MemoryRequirements memRequirements = device.getBufferMemoryRequirements(
m_buffers[i]);
147 vk::MemoryAllocateInfo allocInfo;
148 allocInfo.allocationSize = memRequirements.size;
149 allocInfo.memoryTypeIndex =
m_ctx->findMemoryType(
150 memRequirements.memoryTypeBits,
151 vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
154 m_memories[i] = device.allocateMemory(allocInfo);
160 memset(
m_mappedData[i], 0,
static_cast<size_t>(bufferSize));
162 catch (
const vk::SystemError& e) {
163 throw std::runtime_error(
"Failed to create uniform buffer: " + std::string(e.what()));
168 for (uint32_t i = 0; i < maxFramesInFlight; i++) {