【发布时间】:2016-12-11 10:43:20
【问题描述】:
我在程序的“load vulkan”阶段创建了一个顶点缓冲区。无论什么模型实例可能使用它们,都应该成为所有顶点的缓冲区。我的应用程序应该能够在运行时随时加载顶点,为顶点缓冲区(当然还有索引缓冲区)使用不同的偏移量。
用于测试顶点缓冲区的静态大小为 8 个顶点,索引缓冲区的静态大小为 12 个索引。
我现在正在尝试加载第一个模型实例(4 个顶点,6 个索引),它可以工作。我可以在屏幕上看到结果。 (这是一个正方形) 然后我尝试加载另一个模型实例(同样是 4 个顶点,6 个索引)(另一个正方形)。
问题:第二个模型实例不会显示在屏幕上。我检查了顶点缓冲区和索引缓冲区的偏移量。他们似乎是对的。我知道第二个实例还没有纹理图像,但是至少应该有一个白色方块,因为着色器中的默认混合颜色是白色。屏幕的默认清除颜色为黑色。为了进行测试,我还将其更改为白色,假设 uv 颜色可能是 0、0、0。
那么为什么屏幕上看不到第二个实例? 我读了一些文章,有些建议在更新顶点缓冲区后“执行命令缓冲区”。除了理解这意味着什么之外,这真的没有意义,因为这两个实例都是在运行时创建的,而第一个有效!
请问有什么帮助吗?
你可以在这里找到源代码:
游戏设计,加载模型实例:gm_update.cpp
引擎的东西,vulkan:de_core.cpp
顶点着色器:shaders/stage.vert
片段着色器:shaders/stage.frag
您可以在该文件夹中找到所有源文件。只需更改文件名。 我想发布代码示例。但我真的不知道错误在 de_core.cpp 中的确切位置
【问题讨论】:
-
请不要将您的代码作为链接发布,而是在您的问题中使用minimal reproducible example 来重现您的问题。
-
是的,你做了太多的假设。使用最少示例的另一个好处是您可以轻松地尝试类似的新功能。 ;;但我在你的代码中看到
VkDeviceSize offsets[] = {0};在vkCmdBindVertexBuffers()之前,vkCmdBindIndexBuffer()::offset= 0,所以看起来你根本没有使用偏移量。
标签: c++ buffer offset vertex vulkan