我正在尝试读取使用FBO渲染的3D纹理。此纹理太大,由于glGetTexImage
驱动程序未能为中间存储分配内存[[*(我想避免在发生错误时更改目标缓冲区),导致GL_OUT_OF_MEMORY
导致nvidia
错误) 。
glReadPixels
逐层获取此纹理的方法。但是glReadPixels
没有图层索引作为参数。实际上将其作为将I / O定向到特定层的东西的唯一地方是几何着色器中的gl_Layer
输出。那是写作阶段,而不是阅读阶段。当渲染每一层后,无论如何我只是尝试对glReadPixels
进行调用,我只得到了第0层的纹理像素。因此glReadPixels
至少不会失败
something。
但是问题是:我可以使用glReadPixels
获得3D纹理的任意层吗?如果没有,鉴于上述内存限制,我应该改用什么?我是否必须在着色器中从3D纹理采样图层以将结果渲染为2D纹理,然后读取此2D纹理
?*
这不是猜测,实际上是从nvidia驱动程序的共享库中跟踪到失败的malloc
调用(以纹理的大小作为参数)。