0%

glReadPixels 性能分析

前言

glReadPixels 用于从帧缓冲区读取像素块,通常在一帧渲染完毕后用于读取渲染的结果像素。
那 glReadPixels 的性能究竟如何呢?

测试

使用 iPhone Xs max 手机分别用 glReadPixels 读取 BGRA 和 RGBA 像素,测试结果如下:

接口名 颜色通道类型 分辨率 平均耗时(ms)
glReadPixels GL_BGRA 2688*1242 1~2
glReadPixels GL_RGBA 2688*1242 5~6
memcpy GL_BGRA/GL_RGBA 2688*1242 1~2

分析

1、GPU 的颜色通道顺序应该是BGRA形式的,所以读取 GL_BGRA 耗时与 memcpy 一致,这种情况应该是只用拷贝下就可以得到输出结果了;
2、读取 GL_RGBA 的耗时很长,所以这个转换过程应该是在 cpu 上完成的,占用的是 cpu 的时间片;

总结

glReadPixels 读取像素 BGRA 比 RGBA 要快很多,所以使用 glReadPixels 读取像素,最好是读取 BGRA ,这样对渲染线程的影响是最小的;如果需要得到其它通道顺序的 像素,可以读取到 BGRA 之后切换线程再做转换;

用户的需求就是我的追求!