0

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

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

PS 对次优标签感到抱歉,显然之前没有人问过 3d 纹理,因为我不允许创建新标签......

4

1 回答 1

2

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

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

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

于 2011-12-05T09:43:51.900 回答