我在" load vulkan"中创建了一个顶点缓冲区。我的节目的阶段。它可以成为所有顶点的缓冲区,无论哪种模型实例都可以使用它们。我的应用程序应该能够在运行时随时加载顶点,使用顶点缓冲区(当然还有索引缓冲区)的不同偏移量。
用于测试顶点缓冲区的静态大小为8个顶点,索引缓冲区的静态大小为12个索引。
我试试'现在加载第一个模型实例(4个顶点,6个索引),这是有效的。我可以在屏幕上看到结果。 (这是一个正方形) 然后,我试着去试试'加载另一个模型实例(再次是4个顶点,6个索引)(另一个方块)。
问题:第二个模型实例不会出现在屏幕上。我检查了顶点缓冲区和索引缓冲区的偏移量。他们似乎是对的。我知道第二个实例没有纹理图像,但至少应该有一个白色方块,因为着色器中的默认混合颜色是白色。屏幕的默认清晰颜色为黑色。为了测试,我也将它改为白色,假设,uv颜色可以是0,0,0。
那么为什么第二个实例在屏幕上不可见? 我读了一些文章,有些人建议"执行命令缓冲区"更新顶点缓冲区后。除了理解这意味着什么之外,它真的没有意义,因为这两个实例都是在运行时创建的,而第一个实例是有效的!
所以请帮忙吗?
你可以在这里找到源代码:
游戏设计,加载模型实例:gm_update.cpp
引擎的东西,vulkan:de_core.cpp
顶点着色器:着色器/ stage.vert
片段着色器:着色器/ stage.frag
您可以在该文件夹中找到所有源文件。只需更改文件名。 我想发布代码示例。但我真的不知道de_core.cpp中错误的确切位置
答案 0 :(得分:0)
您的源代码链接对我不起作用,但我有一个建议。绑定缓冲区时,请确保每次绘制调用只调用一次vkBindVertexBuffers。它取代了当前绑定的缓冲区。如果你需要绑定多个缓冲区,请执行类似这样的操作
vkBuffer buffers[2] = {buffer1, buffer2};
vkDeviceSize offsets[2] = {0, 0};//offsets of buffers
vkbindVertexBuffers(commandBuffer, firstInputBindingToUpdate(probably 0), 2, buffers, offsets);