Vulkan - 直接绘制纹理而无需顶点和着色器。

17

在Vulkan中,是否可以直接将纹理(如果它具有正确的宽度、高度和像素格式)直接绘制到帧缓冲区,而不使用顶点和着色器?


对于那些给这篇文章投反对票的人:我猜他正在寻找与OpenGL的glDrawPixels() / glDrawBuffer()类似的Vulkan API,它可以直接绘制到帧缓冲区。虽然使用纹理贴图在屏幕上画出一个没有透视效果和Z缓冲写入的四边形是解决方法之一,但这仍然是一个合理的问题。 - Alex Byrth
6
抱歉,但您非常困难。Vulkan是一种可怕的新技术,并且有一个巨大的文档和庞大的结构需要查看。它绝不是简单的。我猜StackOverflow的目的是在了解和不了解之间搭建桥梁。 - Alex Byrth
我同意Alex的观点 - 有很多文档需要查看,如果你还没有使用Vulkan,并且正在阅读文档以决定是否要使用它,那么你可能不会意识到vkCmdCopy*命令是你想要的。大多数小样本展示如何使用索引和顶点绘制,而不是直接纹理复制。我曾经问过问题,文档中有可以回答它们的部分,但我没有找到它们。 - Andrew Williamson
1个回答

13

如果vkSurface支持作为TRANSFER_DST,则可以使用vkCmdCopyImagevkImage中的内容复制到交换链的vkImage中,方法是通过vkGetPhysicalDeviceSurfaceCapabilitiesKHR的结果中的supportedUsageFlags字段确定。

否则,您需要进行全屏渲染,并将输入图像的颜色数据作为采样纹理或输入附件获取。


如果您需要进行缩放、过滤或格式转换,也可以使用 vkCmdBlitImage。而 vkCmdCopyImage 只是直接复制内存,这并不总是有用的。 - Quinchilion
但请注意,这需要源格式支持VK_FORMAT_FEATURE_BLIT_SRC_BIT和目标格式支持VK_FORMAT_FEATURE_BLIT_DST_BIT。这并不总是成立的,因此如果要使用blit,请先检查这些内容。 - Sascha Willems

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接