OpenGL - 我可以在将其数据查询到 PBO 后使用纹理吗?
OpenGL - Can I use texture after querying its data into PBO?
我通过 FBO 渲染到纹理中。我想将纹理数据复制到 PBO 中,所以我使用 glGetTexImage
。我将在此 PBO 上使用 glMapBuffer
,但仅在下一帧(或更高版本)中使用,因此它不应导致停顿。
但是,我可以在 glGetTexImage
调用后立即使用纹理而不会导致停顿吗?我可以将它绑定到纹理单元并从中渲染吗?我可以通过 FBO 再次渲染它吗?
However, can I use the texture immediately after the glGetTexImage call without causing a stall?
这是依赖于实现的行为。它可能会也可能不会导致停顿,具体取决于实现如何进行实际数据传输。
Can I bind it to a texture unit and render from it?
是的。
Can I render to it again via FBO?
是的。然而,这可能会或可能不会导致停顿,具体取决于实现在内部如何处理数据一致性要求。 IE。在修改数据之前,纹理数据要么必须完全传输到 PBO,要么如果实现可以检测到整个事物将被改变(例如,通过发出与纹理附件匹配的 glClear 调用),它可能只是孤立内部数据结构并从一个新的内存区域开始,避免停顿。
这是几乎无法预测的极端情况之一。您必须分析性能并亲自查看。避免停顿的可靠方法是使用新的纹理对象。
我通过 FBO 渲染到纹理中。我想将纹理数据复制到 PBO 中,所以我使用 glGetTexImage
。我将在此 PBO 上使用 glMapBuffer
,但仅在下一帧(或更高版本)中使用,因此它不应导致停顿。
但是,我可以在 glGetTexImage
调用后立即使用纹理而不会导致停顿吗?我可以将它绑定到纹理单元并从中渲染吗?我可以通过 FBO 再次渲染它吗?
However, can I use the texture immediately after the glGetTexImage call without causing a stall?
这是依赖于实现的行为。它可能会也可能不会导致停顿,具体取决于实现如何进行实际数据传输。
Can I bind it to a texture unit and render from it?
是的。
Can I render to it again via FBO?
是的。然而,这可能会或可能不会导致停顿,具体取决于实现在内部如何处理数据一致性要求。 IE。在修改数据之前,纹理数据要么必须完全传输到 PBO,要么如果实现可以检测到整个事物将被改变(例如,通过发出与纹理附件匹配的 glClear 调用),它可能只是孤立内部数据结构并从一个新的内存区域开始,避免停顿。
这是几乎无法预测的极端情况之一。您必须分析性能并亲自查看。避免停顿的可靠方法是使用新的纹理对象。