【问题标题】:OpenGL: Is there a way to do PBO transfers with DSA?OpenGL:有没有办法用 DSA 进行 PBO 传输?
【发布时间】:2017-08-27 20:14:44
【问题描述】:

最近我研究了改进流媒体和诸如此类的纹理提交,尽管我进行了长时间的搜索,但我没有找到任何材料展示甚至提到使用仅具有 DSA 功能的 PBO 的任何方式。

是我没有找对地方,还是真的没有办法?

【问题讨论】:

  • 我不清楚你在问什么。您是指转移还是只是 DSA 功能或两者兼而有之?比如用glMapNamedBuffer()代替glMapBuffer()
  • 对不起,我真的很累。如果您查看此presentation 的幻灯片 7,您会看到为了进行传输,您必须按特定顺序进行一些绑定。我知道它们有等效的 DSA 函数,例如 glNamed*,但我想知道是否有一种方法可以将它们显式绑定在一起,例如将缓冲区绑定到 VAO 的 DSA 等效项如何以一组函数的形式出现缓冲区名称和 VAO 名称。

标签: opengl pbo


【解决方案1】:

所有像素传输函数都可以采用缓冲区对象+偏移量或客户端 CPU 指针(例如,与现在只能使用缓冲区的 VAO 函数不同)。因此,允许您直接传递缓冲区对象+偏移量将需要为进行像素传输的两种方式中的每一种都设置一个单独的入口点。所以他们需要glNamedReadPixelsToBufferglNamedReadPixelsToClient

因此,它们不是进一步增加函数的数量(也不是禁止使用客户端内存),而是让缓冲区部分像往常一样工作:通过绑定点。所以是的,您仍然需要将该缓冲区绑定到 PACK/UNPACK 绑定。

由于像素传输并不是一个常见的操作(相对于其他类型的状态更改和渲染命令的数量),并且由于这些特定的绑定不直接与 GPU 相关联,因此它不会对您的代码产生太大影响.另外,已经有一个lot of context state tied to pixel transfer operations;多一个有什么关系?

【讨论】:

  • 我对此有点困惑:我认为这种情况下的像素传递函数是 glReadPixels 但它既不需要缓冲区对象也不需要 CPU 指针(glMapBufferRange,这不是像素传递函数)。您能否澄清“所有像素传输函数都可以采用缓冲区对象+偏移量或客户端 CPU 指针”的意思?
  • @Startec: "它不需要缓冲区对象或 CPU 指针" Yes, it does.
猜你喜欢
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2020-04-13
  • 2019-05-09
  • 1970-01-01
相关资源
最近更新 更多