opengl - 用于读取和写入的 OpenGL 缓冲区使用
问题描述
虽然 OpenGL 函数中的使用标志glBufferData
只是一个提示而不是真正的限制,但文档说“DRAW”是指“用户写入它,然后使用它作为参数传递给其他 OpenGL 函数”。并且“READ”是“这个缓冲区将被来自 GL 的数据填充并且用户想要从中读取。” 但是如果我想要,只是作为一个假设的用途,使用 GPU 作为外部存储,然后简单地从同一个缓冲区写入然后读取(可能在 GL 对其进行更改之后)?
这些常量的位值并不表明我可以将它们组合起来(如GL_DYNAMIC_READ | GL_DYNAMIC_DRAW
)。
是否有任何“最佳”使用标志我可以用来提示 GL“我想使用该缓冲区作为存储来读取和写入”?
解决方案
如果我想要,只是作为一个假设的用途,将 GPU 用作外部存储,然后简单地写入并稍后从同一个缓冲区读取(可能在 GL 对其进行更改之后)?
那么要么你不再关心使用提示,要么你不使用 OpenGL。OpenGL 的缓冲区对象是为了 OpenGL 的使用而存在的。它们不是为了让您访问一个新的内存池来玩弄。
尤其是因为“内存池*很可能与malloc
等人分配的内存池相同。在 OpenGL 中您无法确保缓冲区对象的存储来自 GPU 内存(或者甚至检查 GPU 是否有专用内存)。
简而言之,这不是 OpenGL 支持的使用模式,因此它不能很好地支持它。
推荐阅读
- google-maps - 在 VueJS 上显示具有动态路径的多边形图
- ruby-on-rails - 在生产中响应 csv 格式时,Rails 参数为空
- node.js - NPM 错误值“4294967295”对于选项“family”无效
- sql-server - SQL Server如何派生列值
- sql - 从 SELECT 查询中删除重复的时区
- ios - CoreLocationManager 从不暂停?
- r - 使用 group_by() 后跟 summarise() 和 dplyr 时,如何在分组中不包括 NA 观察?
- sql - 突出显示 OBIEE 或 SQL 中父值的子值差异
- swiftui - 按钮不改变 SwiftUI 中的视图
- azure - 允许我的 Azure 应用服务与我的 Azure 虚拟机对话的最佳实践/方法