我需要从一个大的纹理(2048x2048)中提取一个小矩形(200x200),并将RGBA像素放在内存中。似乎有两种方法可以做到这一点:
( a)使用glGetTexImage并传入接收整个纹理的缓冲区,并从该缓冲区读取适当的像素。
b)创建一个框架缓冲区,使用只需要部分的纹理将其绘制进去,并提取glReadPixels生成的像素。
我猜( b)是更快的,但我是相对新手,我想知道我是否朝正确的方向前进。)更容易编写代码,所以我想知道可能的速度命中是否可以忽略不计。
史蒂夫
发布于 2016-07-01 14:56:58
考虑到图像数据在纹理中,有几种可能的解决方案。从最想要的到最少的:
glGetTextureSubImage (需要OpenGL 4.5或ARB_get_texture_sub_image)直接完成这项工作。glCopyImageSubData (需要OpenGL 4.3或ARB_copy_image。或NV_copy_image.后者是在更多硬件上实现,而不仅仅是NVIDIAs),将复制所需的矩形转换成合适大小的纹理,然后在此基础上使用glGetTexImage。glBlitFramebuffer (需要OpenGL 3.0或ARB_framebuffer_objects) 将所需的大纹理部分复制到小纹理。然后在小纹理上使用glGetTexImage。只有在非常老的OpenGL实现下才需要将纹理呈现到具有三角形的框架缓冲区。
https://stackoverflow.com/questions/38140527
复制相似问题