OpenGL:有没有办法用 DSA 进行 PBO 传输?
OpenGL: Is there a way to do PBO transfers with DSA?
最近我研究了改进流式传输的纹理提交以及诸如此类的东西,尽管我进行了长时间的搜索,但我没有发现任何 material 展示或什至提到使用仅具有 DSA 功能的 PBO 的任何方式。
我是不是找对了地方,还是真的没有办法?
所有像素传输函数都可以采用缓冲区对象+偏移量或客户端 CPU 指针(例如,不像 VAO 函数,它现在只能使用缓冲区)。因此,允许您直接传递缓冲区对象+偏移量需要为两种进行像素传输的方式中的每一种提供单独的入口点。所以他们需要 glNamedReadPixelsToBuffer
和 glNamedReadPixelsToClient
.
因此,他们没有进一步增加函数的数量(也没有禁止使用客户端内存),而是让缓冲区部分像往常一样工作:通过绑定点。所以是的,您仍然必须将该缓冲区绑定到 PACK/UNPACK 绑定。
由于像素传输并不是一个常见的操作(相对于其他类型的状态更改和渲染命令的数量),并且由于这些特定的绑定不直接绑定到 GPU,因此它应该不会影响您的代码那么多。另外,已经有 lot of context state tied to pixel transfer operations;多一个有什么关系?
最近我研究了改进流式传输的纹理提交以及诸如此类的东西,尽管我进行了长时间的搜索,但我没有发现任何 material 展示或什至提到使用仅具有 DSA 功能的 PBO 的任何方式。
我是不是找对了地方,还是真的没有办法?
所有像素传输函数都可以采用缓冲区对象+偏移量或客户端 CPU 指针(例如,不像 VAO 函数,它现在只能使用缓冲区)。因此,允许您直接传递缓冲区对象+偏移量需要为两种进行像素传输的方式中的每一种提供单独的入口点。所以他们需要 glNamedReadPixelsToBuffer
和 glNamedReadPixelsToClient
.
因此,他们没有进一步增加函数的数量(也没有禁止使用客户端内存),而是让缓冲区部分像往常一样工作:通过绑定点。所以是的,您仍然必须将该缓冲区绑定到 PACK/UNPACK 绑定。
由于像素传输并不是一个常见的操作(相对于其他类型的状态更改和渲染命令的数量),并且由于这些特定的绑定不直接绑定到 GPU,因此它应该不会影响您的代码那么多。另外,已经有 lot of context state tied to pixel transfer operations;多一个有什么关系?