我需要从大纹理(2048x2048)中提取一个小矩形(200x200),并将RGBA像素放入内存中.似乎有两种方法可以做到这一点:
a)使用glGetTexImage并传入接收整个纹理的缓冲区,并从中读取相应的像素
b)创建一个帧缓冲区,使用仅包含所需部分的纹理绘制到帧缓冲区中,并提取使用glReadPixels生成的像素.
我猜b)速度更快,但我相对新手,我想知道我是否朝着正确的方向前进.a)更容易编码,所以我想知道可能的速度命中是否可以忽略不计.
史蒂夫
鉴于图像数据在纹理中,有几种可能的解决方案.从最希望到最少订购:
使用glGetTextureSubImage(需要OpenGL 4.5或ARB_get_texture_sub_image)直接完成工作.
使用glCopyImageSubData(需要OpenGL 4.3或ARB_copy_image.或NV_copy_image.后者在比NVIDIA更多的硬件上实现)将所需的矩形复制到适当大小的纹理中,然后使用glGetTexImage它.
将大纹理附加到FBO,然后将小纹理附加到另一个FBO.使用glBlitFramebuffer(需要OpenGL 3.0或ARB_framebuffer_objects)将大纹理的所需部分复制到小纹理.然后使用glGetTexImage小纹理.
只有在非常旧的OpenGL实现下工作时才需要将纹理渲染到带有三角形的帧缓冲区.