我正在片段着色器中将数据写入3D纹理,我需要异步将所述数据读回系统内存。异步启动打包操作到缓冲区对象的唯一方法似乎是使用glReadPixels()
指针调用NULL
。但是这个函数坚持要通过一个矩形来定义要回读的区域。现在我不知道在使用PBO时是否忽略了这些参数,但我不这么认为。在这种情况下,我不知道要传递给这个函数什么才能获得整个3D纹理。
即使必须回读单个切片(这将是一种愚蠢的IMO),我仍然不知道如何与OpenGL通信哪个切片来读取。我错过了什么吗?
P.S。对于次优标签很抱歉,显然没有人曾经问过3D纹理,因为我不允许创建新标签......
答案 0 :(得分:2)
谁说glReadPixels
是读取图像数据的唯一方法?也许在OpenGL ES中,但是如果你使用ES,你应该这么说。这个答案的其余部分将假设您正在谈论桌面GL。
如果您有纹理,并且想要阅读其内容,则应使用glGetTexImage
。控制它是否读入缓冲区对象的开关与控制glReadPixels
的开关相同:缓冲区是否绑定到GL_PIXEL_PACK_BUFFER
。
请注意,glGetTexImage
将检索整个纹理(对于给定的mipmap级别)。