每帧重新创建RenderPass

问题描述

每帧重新创建RenderPass是否可以接受?

在最大动态引擎中,一帧的构图可能在一个帧到下一帧之间变化很大。一帧可能需要与之前一帧完全不同的RenderPasses / Subpass。

此外,要实现类似Frostbite引擎的FrameGraph的功能,这是否不是(可能)需要在每个帧上重新创建RenderPass吗? https://www.gdcvault.com/play/1024612/FrameGraph-Extensible-Rendering-Architecture-in

我不确定在不同的设备中(例如在台式机和移动设备之间)创建RenderPasses的成本是多少。

解决方法

如上所述,这个问题有些无法回答。如何构建您的引擎以及您采取哪些妥协措施都是基于观点的。从技术上讲,如果在外部渲染循环中调用每个函数(不是非操作),则比在内部渲染循环中调用的每个函数都更便宜。从代码库的功能和体系结构方面考虑,是否可以在每一帧外部调用这些变量只是一个问题。

只需将vkCreateRenderPassvkCreateFramebuffer视为潜在的昂贵操作。这些功能是驱动程序形成优化策略的两个时机(可能相对昂贵)。因此,如果可以的话,请将它们放在热点之外。此外,即使在框架内创建它们,也可以对其进行缓存。

对于当代台式机GPU,它应该便宜一些,而在移动(分别为图砖)GPU上,它应该有些贵。但这可能会在各代GPU之间发生变化,甚至在驱动程序版本之间也会发生变化。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...