繁体   English   中英

在Vulkan中有多个子通道的情况下,如何将交换链映像复制到VkBuffer

[英]How to copy Swap chain Image to VkBuffer in case of multiple subpasses in Vulkan

我正在这个演示中寻找使用深度剥离顺序独立透明度在vulkan中渲染场景的方法

博客: https//matthewwellings.com/blog/depth-peeling-order-independent-transparency-in-vulkan/代码: https//github.com/openforeveryone/VulkanDepthPeel

我已经修改了代码,以便能够将最终渲染保存到输出image(png)中,然后再呈现给表面。

一旦由负责绘图操作的辅助命令缓冲区组成的主要命令缓冲区提交到队列以供执行和渲染完成,我将使用vkCmdCopyImageToBuffer从当前交换链图像中复制数据(复制操作是在将图像屏障引入到确保首先完成渲染)到VkBuffer,然后将缓冲存储器映射到无符号char指针,然后将此信息写入PNG文件。 但是我在PNG中看到的输出与在窗口上呈现的输出不同,因为这些框几乎完全透明,并且带有一些RGB信息,如下图所示。

我的猜测是这种情况可能是由于涉及多个子通道的特定演示而引起的,我没有正确地复制数据,但令我困扰的是,由于我是在最终呈现到表面之前直接从交换链图像进行复制,因此我应该在图像中具有最终的颜色数据,因此PNG和渲染应匹配。

渲染帧: 在此处输入图片说明 保存的帧:

在此处输入图片说明

让我知道是否错过任何详细说明,我们将为您提供帮助。 谢谢!

您在保存的图像中具有alpha值41

如果我只是将其重写为255则图像是相同的。

您可能在交换VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR使用了VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,这会自动执行。 但是典型的图像查看器会将alpha视为预乘-因此可以感知到(更明亮)的图像差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM