vulkan - 更新主要命令缓冲区中的推送常量但在辅助命令缓冲区中使用?
问题描述
我有多个辅助命令缓冲区,它们负责不同的几何图形渲染。但是相机矩阵显然应该保持不变。我想通过推送常量更新相机矩阵,但我不明白 - 我应该为每个辅助命令缓冲区执行此操作还是只能执行一次 - 在主命令缓冲区中?
一方面,推送常量是流水线状态的一部分(在流水线状态布局中指定),它不被辅助命令缓冲区继承。但另一方面,有一个所谓的“管道布局兼容性”,我不完全理解,但看起来它允许更新推送常量一次并在后续命令中使用更新后的值。
解决方案
通常(如您所述)状态不会在命令缓冲区之间继承。这意味着您需要分别在每个命令缓冲区中设置状态(与绘图或计算操作相关)。这条规则有一些例外,但它们与您在这里谈论的问题无关。
所以是的,您需要分别在每个命令缓冲区中设置推送常量的值。
至于您所指的管道布局兼容性,这意味着当您为给定管道设置一些管道状态,然后当您绑定另一个具有兼容布局的管道时,您不必再次设置相同的状态。它保留在具有兼容布局的管道之间。再说一遍,是的,您可以“更新推送常量一次并在后续命令中使用更新后的值”。但这必须发生在同一个命令缓冲区中。您可以在绑定到同一命令缓冲区的管道中使用更新的值。但是如果您在另一个命令缓冲区中,您需要再次设置相关状态。更重要的是 - 在您从主命令缓冲区执行辅助命令缓冲区之后,您还需要再次在此主命令缓冲区中设置状态。换句话说,主命令缓冲区在执行辅助命令缓冲区后会忘记其状态。
推荐阅读
- sql-server - EntityType 没有在名为“NameId”的列上定义键
- python - tkinter 组合框中是否提供自动完成搜索功能?
- eclipse - Eclipse IDE 外部库设置/更改
- javascript - 如何在浏览器的左上角添加水印文字
- java - 更新半连续变量的下限不再保持半连续
- windows-update - 如何从 Web API 使用 WSUS 远程 API 连接到 WSUS 服务器?
- php - 如何分别为不同的商店设置 Magento 商店时区
- python - 查找两个列表之间的相似性。通过根据列表中值的位置给出单独的权重
- php - Laravel 中间件:标头可能不包含多个标头,检测到新行
- javascript - 单击后不显示警报