首页 > 解决方案 > 用于读取和写入的 OpenGL 缓冲区使用

问题描述

虽然 OpenGL 函数中的使用标志glBufferData只是一个提示而不是真正的限制,但文档说“DRAW”是指“用户写入它,然后使用它作为参数传递给其他 OpenGL 函数”。并且“READ”是“这个缓冲区将被来自 GL 的数据填充并且用户想要从中读取。” 但是如果我想要,只是作为一个假设的用途,使用 GPU 作为外部存储,然后简单地从同一个缓冲区写入然后读取(可能在 GL 对其进行更改之后)?

这些常量的位值并不表明我可以将它们组合起来(如GL_DYNAMIC_READ | GL_DYNAMIC_DRAW)。

是否有任何“最佳”使用标志我可以用来提示 GL“我想使用该缓冲区作为存储来读取和写入”?

标签: openglbuffer

解决方案


如果我想要,只是作为一个假设的用途,将 GPU 用作外部存储,然后简单地写入并稍后从同一个缓冲区读取(可能在 GL 对其进行更改之后)?

那么要么你不再关心使用提示,要么你不使用 OpenGL。OpenGL 的缓冲区对象是为了 OpenGL 的使用而存在的。它们不是为了让您访问一个新的内存池来玩弄。

尤其是因为“内存池*很可能与malloc等人分配的内存池相同。在 OpenGL 中您无法确保缓冲区对象的存储来自 GPU 内存(或者甚至检查 GPU 是否有专用内存)。

简而言之,这不是 OpenGL 支持的使用模式,因此它不能很好地支持它。


推荐阅读