gpt4 book ai didi

opengl - 何时清除顶点缓冲区对象

转载 作者:行者123 更新时间:2023-12-05 08:58:19 28 4
gpt4 key购买 nike

我只是想知道:何时(以及如何)清除 VBO 中的数据。在重写数据之前是否必须始终清除它?为什么要清除它?

最佳答案

清除缓冲区(即将每个字节设置为 0)不是很有用。 正在使缓冲区无效。

使缓冲区的一部分无效意味着该部分的内容变得无效,并且您必须在使用之前向该部分写入新内容。这允许 OpenGL 实现避免等到缓冲区对象不再被使用,以便通过为您提供一个完全"new"的缓冲区来写入(以相同的名称)来将数据上传到它。这种技术称为缓冲区孤立

要使缓冲区无效,您可以使用相同的大小和用法提示调用 glBufferData,但使用 NULL 数据指针,使用 glMapBufferRange 使用 GL_MAP_INVALIDATE_BUFFER_BIT,或 glInvalidateBufferData(如果您的 GPU 支持)。

OpenGL Wiki article for Buffer Object Streaming对此进行了更详细的介绍,并提供了其他几种解决方案。

要直接回答您的问题,您不需要在更新之前使缓冲区无效或清除它。您可以随时调用 glBufferSubData 来更新您想要的任何内容。但是,在没有失效的情况下这样做可能会导致管道停顿,因为 OpenGL 在安全更新之前等待缓冲区完成使用。

关于opengl - 何时清除顶点缓冲区对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24512468/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com