【问题标题】:OpenGL texture upload using PBOs?使用 PBO 上传 OpenGL 纹理?
【发布时间】:2014-09-29 20:01:52
【问题描述】:

我正在使用 OpenGL2.1 开发一个 OpenGL 应用程序,并希望通过线程上传纹理。

到目前为止我做了什么:

  1. 创建第二个上下文并在两者之间共享
  2. 在线程中上传纹理数据

一切正常,除了纹理上传发生时我注意到一个小的“滞后”!我知道这是因为驱动程序必须同步两个上下文。问题是我希望它流式传输纹理。我不想稍后更新纹理。我只想在后台加载纹理,同时显示“几乎平滑”的加载动画,而不会停止整个应用程序。

这就是我搜索的点,发现PBO可以用于像素数据的DMA数据传输。是否可以使用 PBO 进行纹理上传?如果有,怎么做?

【问题讨论】:

    标签: c++ multithreading opengl pbo


    【解决方案1】:

    您不需要第二个上下文来异步上传纹理数据。只需确保在触发上传后不要立即使用缓冲区,否则它将停止等待复制完成。

    这里是这个过程的一个例子:http://www.songho.ca/opengl/gl_pbo.html#unpack

    这里有更多关于什么是 PBO 以及应该如何使用它们的信息:http://www.opengl.org/wiki/Pixel_Buffer_Object

    【讨论】:

    • 感谢您的回答!我已经阅读了很多关于 PBO 的文章,但我无法让它发挥作用,我的意思是我需要执行哪些步骤来归档我的目标?
    • 查看我发布的第一个链接,它有你可以查看的源代码。
    • 是的,我已经检查了你的第一个链接,所以当我正确理解它时,我必须执行以下操作: - 创建纹理(句柄)并绑定它 - 创建 pbo (句柄)并绑定它 - 初始化具有图像大小但没有任何数据的 pbo - 映射 pbo 并上传纹理数据 - 对 glTexImage2D 进行“虚拟”调用以让 pbo 将其数据传输到纹理对象这是对的还是我错过了什么/做错了什么?
    • 好的,我明天也会检查我的方法,如果可行,我会在这里发布
    • 好的,现在一切都解决了! -关闭-
    猜你喜欢
    • 2013-01-03
    • 2017-08-15
    • 2019-02-07
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多