想到的第一种替代方案:正交投影模式下直接drawTextureQuad,走OpenGL标准流水线:纹理对象创建、数据传输,顶点传输、几何变换流程,光栅化、纹理坐标寻址取纹理单元,最终通过缓冲区各种测试将结果写到颜色缓冲区中。
优化后的方案:纹理对象作为FBO的颜色缓冲区,可以通过glTexSubImage2D函数直接将图像数据更新到颜色缓冲区中,全部或者局部,功能跟glDrawPixels完全一致,避免走OpenGL流水线。
2)在手机上效率优先,建议不要直接使用glReadPixels函数,可以参考ogl_fbo_pbo_readback示例。