首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SSBO复制到另一个SSBO中

将SSBO复制到另一个SSBO中
EN

Stack Overflow用户
提问于 2013-11-25 16:24:20
回答 1查看 812关注 0票数 0

最近,我注意到glCopyBufferSubData不适用于Storage对象,因为扩展没有提到它。为了确保这一点,我通过打印映射缓冲区进行了测试,而新的SSBO包含重复的无意义的内容,这表明情况就是这样。不需要创建一个自定义的计算着色器就可以做到这一点,是否有任何方法从CPU发出的命令复制GPU上的数据,类似于glCopyBufferSubData对其他缓冲区类型所做的操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-25 16:41:05

函数glCopyBufferSubData在缓冲区对象上工作。缓冲区对象本身并不特殊,所有缓冲区对象都是相同的。只有当将缓冲区对象绑定为着色存储缓冲区时,它才用作着色器存储缓冲区。但是,如果不是用作着色存储缓冲区,它只是一个普通的缓冲区对象。因此,您认为glCopyBufferSubData不适用于着色存储缓冲区的假设显然是错误的,它适用于缓冲区,无论您以后使用的是哪些缓冲区。扩展没有提到SSBO的唯一原因是,在引入copy_buffer扩展时,SSBO并不存在,但是这种功能与SSBO完全正交。

它对你不起作用的原因是在其他地方被搜索。也许您不能使用GL_SHADER_STORAGE_BUFFER作为glCopyBufferSubData的有效目标,但这并不是必需的,只需将缓冲区绑定到另一个目标,例如GL_COPY_READ_BUFFERGL_COPY_WRITE_BUFFER。另一个错误源可能是,从着色器写入SSBO不一定与以下读取操作同步,如果在计算后立即复制数据,则可能需要额外的glMemoryBarrier

但是要明确的是,glCopyBufferSubData适用于任何类型的缓冲区,而绑定缓冲区的目标完全不绑定到缓冲区对象及其数据本身。您可以完美地使用SSBO计算一些数据,然后将其呈现为VBO等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20197996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档