В настоящее время я модифицирую Adreno SDK Vulkan, пример Triangle. Я хочу прочитать значения цвета визуализированного изображения Swap Chain. Я следовал следующему процессу:
Я создаю VkBuffer с шириной и высотой изображения Swap Chain. Его детали:
VkBufferCreateInfo outputinfo = {}; outputinfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; outputinfo.size = m_width * m_height * 3 * sizeof(int8_t); outputinfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; outputinfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;`
Int, потому что формат изображения
VK_FORMAT_R8G8B8_SINT
Затем выделите память и привяжите ее к буферу с типомVK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
Вызов
vkCmdCopyImageToBuffer
в буфере команд послеvkCmdDraw
,vkCmdEndRenderPass
.Затем сделайте
vkQueueSubmit
иvkQueueWaitIdle
. ВызовитеvkMapMemory
для буферной памяти и прочтите данные, но они являются значениями мусора. Дляmalloc
я сохраняю формат данных как int.
SINT
означает, что это целое число со знаком.8
s говорят вам, сколько битов используется на канал. Это 24 бита на пиксель, а не3 * sizeof(int)
на пиксель. Я хочу увидеть код, в котором вы запрашиваете этот формат изображения. Кроме того, вы проверяли, можно ли использовать изображение в качестве источника для операции передачи? - person Nicol Bolas   schedule 17.08.2016