vulkan:如何使用一个具有不同偏移量的顶点缓冲区?

时间:2016-12-11 10:43:21

标签: c++ buffer offset vertex vulkan

我在" load vulkan"中创建了一个顶点缓冲区。我的节目的阶段。它可以成为所有顶点的缓冲区,无论哪种模型实例都可以使用它们。我的应用程序应该能够在运行时随时加载顶点,使用顶点缓冲区(当然还有索引缓冲区)的不同偏移量。

用于测试顶点缓冲区的静态大小为8个顶点,索引缓冲区的静态大小为12个索引。

我试试'现在加载第一个模型实例(4个顶点,6个索引),这是有效的。我可以在屏幕上看到结果。 (这是一个正方形) 然后,我试着去试试'加载另一个模型实例(再次是4个顶点,6个索引)(另一个方块)。

问题:第二个模型实例不会出现在屏幕上。我检查了顶点缓冲区和索引缓冲区的偏移量。他们似乎是对的。我知道第二个实例没有纹理图像,但至少应该有一个白色方块,因为着色器中的默认混合颜色是白色。屏幕的默认清晰颜色为黑色。为了测试,我也将它改为白色,假设,uv颜色可以是0,0,0。

那么为什么第二个实例在屏幕上不可见? 我读了一些文章,有些人建议"执行命令缓冲区"更新顶点缓冲区后。除了理解这意味着什么之外,它真的没有意义,因为这两个实例都是在运行时创建的,而第一个实例是有效的!

所以请帮忙吗?

你可以在这里找到源代码:

project: main function

游戏设计,加载模型实例:gm_update.cpp

引擎的东西,vulkan:de_core.cpp

顶点着色器:着色器/ stage.vert

片段着色器:着色器/ stage.frag

您可以在该文件夹中找到所有源文件。只需更改文件名。 我想发布代码示例。但我真的不知道de_core.cpp中错误的确切位置

1 个答案:

答案 0 :(得分:0)

您的源代码链接对我不起作用,但我有一个建议。绑定缓冲区时,请确保每次绘制调用只调用一次vkBindVertexBuffers。它取代了当前绑定的缓冲区。如果你需要绑定多个缓冲区,请执行类似这样的操作

vkBuffer buffers[2] = {buffer1, buffer2};
vkDeviceSize offsets[2] = {0, 0};//offsets of buffers
vkbindVertexBuffers(commandBuffer, firstInputBindingToUpdate(probably 0), 2, buffers, offsets);