【发布时间】:2024-01-23 07:54:01
【问题描述】:
正如我的问题标题所说,我想为每一帧更新纹理。
我有个主意:
创建一个VkImage 作为具有以下配置的纹理缓冲区:initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZEDusage= VK_IMAGE_USAGE_SAMPLED_BIT
它的内存类型是VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
在绘制循环中:
第一帧:
- 将纹理数据映射到
VkImage(使用vkMapMemory)。 - 将
VkImage布局从VK_IMAGE_LAYOUT_PREINITIALIZED更改为VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL。 - 将此
VkImage用作纹理缓冲区。
第二帧:
第一帧之后的布局将是VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,我可以直接将下一个纹理数据映射到这个VkImage而不改变它的布局吗?如果我不能这样做,我可以将 VkImage 更改为哪个布局?
在 vkspec 11.4 中它说:
a 中使用的新布局 过渡不能是 VK_IMAGE_LAYOUT_UNDEFINED 或 VK_IMAGE_LAYOUT_PREINITIALIZED
所以,我无法将布局改回_PREINITIALIZED。
任何帮助将不胜感激。
【问题讨论】: