如何停止清除命令缓冲区之间的内容?

尼科·范·本图姆

我正在尝试使ImGui在我的引擎中工作,但是在将其“叠加”到我的立方体网格上时遇到了一些麻烦。我将两个分开分开的命令缓冲区

std::array<VkCommandBuffer, 2> cmdbuffers = { commandBuffers[imageIndex], imguicmdbuffers[imageIndex] };

然后在我的队列提交信息中,我将命令缓冲区计数设置为2并将数据传递给它,如下所示

submitInfo.commandBufferCount = 2;
submitInfo.pCommandBuffers = cmdbuffers.data();

但是现在发生的是它仅呈现imgui,或者如果我在数组中切换顺序,则仅呈现多维数据集,而不会两者都呈现。是否因为它们共享相同的渲染过程?我将VkRenderPassBeginInfo透明颜色更改为仔细检查,实际上它要么清除黄色并绘制图像,要么清除红色并绘制立方体。我尝试将清除Alpha设置为0,但这是行不通的,而且无论如何似乎都是一种hack。我感觉我不了解它如何提交和执行命令缓冲区以及如何将其与渲染通道/帧缓冲区绑定在一起,那么怎么办?

尼科尔·波拉斯(Nicol Bolas)

给定以下语句(即假设它们是正确的):

  • 他们共享相同的渲染通道

  • 在我的队列提交信息中,我将命令缓冲区数设为2

  • VkRenderPassBeginInfo清除颜色

有关渲染性质的某些事情变得显而易见(您未直接声明或提供代码的事情)。首先,将两个单独的命令缓冲区直接提交到队列。只能将主命令缓冲区提交到队列。

其次,根据渲染过程的性质,渲染过程实例不能跨越主要命令缓冲区。因此,您必须具有两个渲染通道实例。

第三,您指定可以在开始渲染过程实例时更改图像的透明颜色。因此,渲染过程必须指定将图像作为加载操作清除。

综上所述,我得出的结论是您要开始VkRenderPass两次相同的操作如先前所推导的,渲染通道设置为清除渲染通道实例开始处的图像这将尽职尽责地发生两次,其中第二次将预先擦除渲染到该图像的所有内容。

基本上,您有两个渲染操作,使用一个渲染通道,该通道设置为将以前任何渲染操作创建的数据销毁到它使用的图像。那是行不通的。

您有几种解决方法。

我的首选方法是开始使用辅助命令缓冲区。我不知道是否可以给ImGui一个CB来记录其数据。但是,如果可以的话,我建议将其记录到辅助CB中。然后,您可以将该次CB执行到渲染通道的适当子通道中。因此,您无需提交两个主要的CB;您只提交一个。

另外,您可以制作一个VkRenderPass不会清除先前图像的新图像。它应该加载图像数据。您的第二个渲染操作将使用该渲染过程,而您的第一个渲染操作将保留明晰的加载操作。

最坏的情况是,您可以让第二个操作渲染为完全不同的图像,然后在第三个渲染操作中将其与主图像合并。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何停止清除清除回滚缓冲区的“清除”

来自分类Dev

如何停止清除清除回滚缓冲区的“清除”

来自分类Dev

Vulkan中命令缓冲区之间的同步

来自分类Dev

在更新命令缓冲区的情况下,vulkan命令缓冲区同步

来自分类Dev

Cygwin防止清除回滚缓冲区

来自分类Dev

使用金属间接命令缓冲区时出错:“片段着色器不能与间接命令缓冲区一起使用”

来自分类Dev

如果命令终止,则杀死Emacs的异步Shell命令缓冲区

来自分类Dev

如何清除ReplaySubject上的缓冲区?

来自分类Dev

如何清除Neovim缓冲区

来自分类Dev

iOS Metal:在一个命令缓冲区中进行多个内核调用

来自分类Dev

Vulkan:在多个命令缓冲区中排序图像内存屏障

来自分类Dev

在Vulkan中重新提交待处理命令缓冲区的用例是什么

来自分类Dev

Ubuntu 16-免费命令缓冲区/缓存差异

来自分类Dev

Vulkan:更新统一变量而不重置命令缓冲区

来自分类Dev

Metal Compute - 将已经入队的命令缓冲区入队

来自分类Dev

如何停止Web音频脚本处理器并清除缓冲区?

来自分类Dev

如何停止清除顺风组件

来自分类Dev

清除键盘缓冲区

来自分类Dev

在金属中如何清除深度缓冲区或模板缓冲区?

来自分类Dev

如何在vim中的vim缓冲区和命令外壳屏幕之间切换?

来自分类Dev

如何从bash清除konsole中的回滚缓冲区?

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

如何读取缓冲区中保存内容的缓冲区?

来自分类Dev

在 Flex 中使用多个缓冲区时,如何避免令牌在缓冲区之间拆分

来自分类Dev

缓冲区的屏幕命令

来自分类Dev

如何停止RubyMine / IntelliJ关闭缓冲区?

来自分类Dev

从文件读取时如何停止堆栈缓冲区溢出?

来自分类Dev

如何停止hange复制到粘贴缓冲区?

来自分类Dev

如何在Vim中替换整个缓冲区的内容

Related 相关文章

  1. 1

    如何停止清除清除回滚缓冲区的“清除”

  2. 2

    如何停止清除清除回滚缓冲区的“清除”

  3. 3

    Vulkan中命令缓冲区之间的同步

  4. 4

    在更新命令缓冲区的情况下,vulkan命令缓冲区同步

  5. 5

    Cygwin防止清除回滚缓冲区

  6. 6

    使用金属间接命令缓冲区时出错:“片段着色器不能与间接命令缓冲区一起使用”

  7. 7

    如果命令终止,则杀死Emacs的异步Shell命令缓冲区

  8. 8

    如何清除ReplaySubject上的缓冲区?

  9. 9

    如何清除Neovim缓冲区

  10. 10

    iOS Metal:在一个命令缓冲区中进行多个内核调用

  11. 11

    Vulkan:在多个命令缓冲区中排序图像内存屏障

  12. 12

    在Vulkan中重新提交待处理命令缓冲区的用例是什么

  13. 13

    Ubuntu 16-免费命令缓冲区/缓存差异

  14. 14

    Vulkan:更新统一变量而不重置命令缓冲区

  15. 15

    Metal Compute - 将已经入队的命令缓冲区入队

  16. 16

    如何停止Web音频脚本处理器并清除缓冲区?

  17. 17

    如何停止清除顺风组件

  18. 18

    清除键盘缓冲区

  19. 19

    在金属中如何清除深度缓冲区或模板缓冲区?

  20. 20

    如何在vim中的vim缓冲区和命令外壳屏幕之间切换?

  21. 21

    如何从bash清除konsole中的回滚缓冲区?

  22. 22

    读取c中的输入后如何清除缓冲区?

  23. 23

    如何读取缓冲区中保存内容的缓冲区?

  24. 24

    在 Flex 中使用多个缓冲区时,如何避免令牌在缓冲区之间拆分

  25. 25

    缓冲区的屏幕命令

  26. 26

    如何停止RubyMine / IntelliJ关闭缓冲区?

  27. 27

    从文件读取时如何停止堆栈缓冲区溢出?

  28. 28

    如何停止hange复制到粘贴缓冲区?

  29. 29

    如何在Vim中替换整个缓冲区的内容

热门标签

归档