微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

顶点缓冲区未正确清除

如何解决顶点缓冲区未正确清除

上下文

我是 3D 图形的初学者,我开始使用 Vulkan,我已经知道不建议保存它,请保存,目前正在从事一个大学项目,以开发基于 3D 计算机图形引擎的基础Vulkan API。

问题

Example of running the app to render the classic 2D triangle

Drawing a 3D mesh after having drawn the triangle

如上图所示,我希望能够:

  1. 运行引擎。
  2. 选择要绘制的对象。
  3. 关闭窗口。
  4. 选择另一个要绘制的对象。
  5. 打开同一个窗口,只显示最后选择的对象。

我一直这样做的方法是基本上清理整个交换链,并在关闭窗口并选择新对象后从头开始重新创建它。现在我知道这对任何计算机图形工程师来说听起来都像是恐怖主义,但我这样做的原因是因为我不知道更好的方法,我刚刚完成了 vulkan 教程。

尝试过的解决方

  1. 我已经检查过我是否在当前顶点缓冲区上执行了 vkDestroyBuffer 和 vkFreeMemory,然后在我选择不同的对象后再次重新创建它。
  2. 我完全禁用了深度测试,以防万一它与它有关,但它没有。

注意:代码很广泛,我真的不知道它的哪一部分可能与问题相关,所以我选择不混淆问题,如果有您认为可能会帮助您找到解决方案的特定部分,请提出要求。

感谢您花时间阅读我的问题。

解决方法

user369070 的评论最终让我注意到了我用来读取 OBJ 文件的函数,这让我意识到这个函数并没有清理我用来存储在传递之前选择要绘制的对象的顶点的数据结构它们到顶点缓冲区。

我只需要在函数顶部添加 vertices = {}; 来解决它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。