Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- VkCommandBuffer commandBuffer = beginSingleTimeCommands();
- VkBuffer stagingBuffer;
- VkDeviceMemory stagingBufferMemory;
- VkDeviceSize imageSize = eyeDimensions.width()*eyeDimensions.height()*4;
- VkMemoryRequirements memRequirements;
- createBuffer(imageSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT, stagingBuffer, stagingBufferMemory, memRequirements);
- capture->image().convertTo(QImage::Format_RGB888);
- const int align_mod = memRequirements.size % memRequirements.alignment;
- const int aligned_size = ((memRequirements.size % memRequirements.alignment) == 0)
- ? memRequirements.size
- : (memRequirements.size + memRequirements.alignment - align_mod);
- uint *imgData = (uint*) malloc(sizeof (uint) * imageSize); // TODO: free somewhere
- memset(imgData, 0, sizeof(uint) * imageSize);
- void* data = nullptr;
- vkMapMemory(graphics->openxr->vulkan->device, stagingBufferMemory, 0, imageSize, 0, &data);
- memcpy(data, imgData, imageSize);
- vkUnmapMemory(graphics->openxr->vulkan->device, stagingBufferMemory);
- free(imgData);
- VkBufferImageCopy region = {};
- region.bufferOffset = 0;
- region.bufferRowLength = graphics->vulkanImageTemplateInfo.extent.width;
- region.bufferImageHeight = graphics->vulkanImageTemplateInfo.extent.height;
- region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
- region.imageSubresource.mipLevel = 0;
- region.imageSubresource.baseArrayLayer = 0;
- region.imageSubresource.layerCount = 1;
- region.imageOffset = {0, 0, 0};
- region.imageExtent = graphics->vulkanImageTemplateInfo.extent;
- vkCmdCopyBufferToImage(
- commandBuffer,
- stagingBuffer,
- *image,
- VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
- 1,
- ®ion
- );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement