当您在Vulkan中创建要渲染的帧缓冲区时,需要填写其大小:
VkFramebufferCreateInfo framebufferInfo{};
framebufferInfo.width = width;
framebufferInfo.height = height;
显然,缓冲区或视口的大小很重要,因为你需要在NDC中写出来,它是-1比1。本质上,Vulkan需要将-1到1到0映射到缓冲区/图像的大小。然而,当我们创建管道时,我们指定了视口的大小,我认为Vulkan在知道渲染的大小时使用了这个大小。如果是这样的话,在帧缓冲区创建信息中指定大小有什么意义?
帧缓冲区大小定义了附加图像的可用空间,超出该空间就无法进行渲染。如果生成的片段的帧缓冲区空间坐标(由视口变换生成(位于帧缓冲区区域之外,则会丢弃该片段。
将通过应用下面描述的任何基元光栅化规则而产生但位于帧缓冲区之外的片段不会产生,也不会由管道的任何后期处理,包括任何片段操作。
请注意,视口状态可以是动态的,并且可以在渲染过程的中间更改;帧缓冲区大小不能。
还要注意的是,您根本不必将图像附加到帧缓冲区,也可以使用没有颜色或深度附件的子路径。片段着色器仍将根据帧缓冲区大小调用,从而允许FS使用副作用来执行一些基于光栅化的任务。