OpenGL-将纹理数据查询到PBO后,我可以使用纹理吗?

时间:2018-09-01 09:03:45

标签: opengl textures pbo

我通过FBO渲染为纹理。我想将纹理数据复制到PBO中,所以我使用glGetTexImage。我将在此PBO上使用glMapBuffer,但只能在下一帧(或之后的帧)中使用它,因此不会造成停顿。

但是,我可以在glGetTexImage调用之后立即使用纹理而不会导致停顿吗?我可以将其绑定到纹理单元并从中渲染吗?我可以通过FBO重新渲染吗?

1 个答案:

答案 0 :(得分:2)

  

但是,我可以在glGetTexImage调用之后立即使用纹理而不会导致停顿吗?

这是依赖于实现的行为。它可能会导致停顿,也可能不会导致停顿,这取决于实现如何进行实际的数据传输。

  

我可以将其绑定到纹理单元并从中渲染吗?

是的

  

我可以通过FBO重新渲染吗?

是的。但是,这可能会或可能不会造成停顿,这取决于实现在内部如何处理数据一致性要求。即在修改数据之前,必须将纹理数据完全传输到PBO中,或者如果实现可以检测到整个事物将被更改(例如,通过发出与纹理附件匹配的glClear调用),则可能只是孤立内部数据结构,并从一个新的内存区域开始,避免该死机。

这是几乎无法预测的极端情况之一。您必须分析性能并亲自查看。避免停顿的绝对方法是使用新的纹理对象。