【问题标题】:When to clear a vertex buffer object何时清除顶点缓冲区对象
【发布时间】:2014-07-01 14:13:42
【问题描述】:

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

【问题讨论】:

    标签: opengl vbo


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 对于寻求现代方法的人,可以考虑 glClearNamedBufferSubData 等函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多