【问题标题】:How to read a 3D texture from GPU memory with Pixel Buffer Objects如何使用像素缓冲区对象从 GPU 内存中读取 3D 纹理
【发布时间】:2012-01-13 01:42:58
【问题描述】:

我正在从片段着色器中将数据写入 3D 纹理,并且我需要将所述数据异步读回系统内存。异步启动打包操作到缓冲区对象的唯一方法似乎是使用NULL 指针调用glReadPixels()。但是这个函数坚持要传递一个定义要读回的区域的矩形。现在我不知道在使用 PBO 时是否会忽略这些参数,但我认为不会。在这种情况下,我不知道传递什么给这个函数以获得整个 3D 纹理。 即使必须读回单个切片(这将是一种愚蠢的 IMO),我仍然不知道如何与 OpenGL 通信以读取哪个切片。我错过了什么吗?

顺便说一句,我可以为每个切片使用单独的 2D 纹理,但如果我没记错的话,那会搞砸 (3D-)mipmapping。我想使用 3D mipmap 来有效地在生成的 3D 纹理中找到感兴趣的区域。

附:很抱歉标签不够理想,显然之前没有人问过 3d 纹理,因为我不允许创建新标签...

【问题讨论】:

    标签: opengl render-to-texture pbo


    【解决方案1】:

    谁说glReadPixels 是读取图像数据的唯一方法?也许在 OpenGL ES 中是这样,但如果你使用的是 ES,你应该这么说。此答案的其余部分将假设您在谈论桌面 GL。

    如果你有一个纹理,并且你想读取它的内容,你应该使用glGetTexImage。控制是否读入缓冲区对象的开关与控制glReadPixels 的开关相同:缓冲区是否绑定到GL_PIXEL_PACK_BUFFER

    请注意,glGetTexImage 将检索 整个 纹理(对于给定的 mipmap 级别)。

    【讨论】:

    • 嗯,这是我在研究 PBO 规范和各种示例时得到的印象。我没有使用 ES,所以glGetTexImage 将为我完成这项工作。我知道我错过了什么......谢谢!
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多