2011-12-05 57 views
0

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

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

P.S.对不起,次优标签,显然没有人问过有关3D纹理之前,因为我不允许创建新的标签...

回答

2

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

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

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

+0

嗯,这是我对研究PBO规格和各种例子的印象。我没有使用ES,因此'glGetTexImage'将为我完成这项工作。我知道我错过了一些东西......谢谢! – Awaki

相关问题