【问题标题】:OpenGL - Can I use texture after querying its data into PBO?OpenGL - 在将纹理数据查询到 PBO 后,我可以使用纹理吗?
【发布时间】:2019-02-07 03:28:24
【问题描述】:

我通过 FBO 渲染成纹理。我想将纹理数据复制到 PBO 中,所以我使用 glGetTexImage。我将在此 PBO 上使用glMapBuffer,但仅在下一帧(或更高版本)中使用,因此它不会导致停顿。

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

【问题讨论】:

    标签: opengl textures pbo


    【解决方案1】:

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

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

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

    是的。

    我可以通过 FBO 再次渲染它吗?

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

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

    【讨论】:

    • 感谢您的详细解答!我虽然关于孤立,除了将其发送到 PBO 之外,我不需要纹理中的数据。虽然,我想将它用作所有渲染效果的绘制缓冲区,但它是全屏 4 字节纹理,所以为什么要浪费内存。我想我肯定不会参与其中。
    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2015-07-06
    • 2018-03-31
    • 2015-07-30
    相关资源
    最近更新 更多