【发布时间】:2018-02-11 15:18:37
【问题描述】:
本题主要涉及VkFramebufferCreateInfo结构中的尺寸参数(width、height、layers)。
实际问题:
如果用于创建VkFrameBuffer 的一个或多个VkImageViews 的尺寸大于用于创建VkFrameBuffer 的VkFramebufferCreateInfo 中指定的尺寸,如何控制哪一个? VkImageView 的一部分在渲染通道实例期间使用?
其他措辞问题:
我基本上是在问,如果图像比帧缓冲区大(尺寸不同),什么定义了图像的哪一部分被使用(读/写)?
一些细节:
规范声明这是一种有效的情况(我看到很多人声明帧缓冲区使用的附件必须与帧缓冲区本身的尺寸相匹配,但我在规范中找不到对此的支持):
pAttachments 的每个元素的尺寸必须至少与相应的帧缓冲区尺寸一样大。
我想明确一点,我知道如果我只是想绘制图像的一部分,我可以使用与图像具有相同尺寸的帧缓冲区,并使用viewports和scissors。但是据我从规范中可以看出,剪刀和视口是相对于帧缓冲区的 (0,0) 定义的,尽管我不清楚。
我问这个问题是为了帮助我理解帧缓冲区,因为我确信我误解了一些东西。我觉得帧缓冲区空间中的 (x,y) 很可能是图像空间中的 (x,y) (因为无法控制 VkImageView 的哪个部分是使用)。
我已经坚持了很长一段时间(大约 4 天),并且尝试了 Vulkan: Cookbook 和 Vulkan Programming Guide,并阅读了大部分规范,并在网上搜索。
如果问题需要澄清,请提出。我只是不想让它太长。
感谢您的阅读。
【问题讨论】:
-
嗯,这是一个非常有趣的问题。相对于用作帧缓冲区附件的图像的左上角,看起来确实无法控制帧缓冲区区域的开始位置。您不能在创建帧缓冲区期间提供左上角,也不能在创建图像视图期间提供。只考虑整个图像,所以我认为帧缓冲区是相对于图像的左上角,[0,0] 坐标。唯一让您控制它的是 vkCmdBeginRenderPass() 命令中的渲染区域并为视口和剪刀测试设置适当的值。
标签: vulkan