我正在使用openGL ES 2.0和GLSL着色器,并使用Renderbuffer(即屏幕外渲染)处理FBO。
它在 30 fps 下工作正常
但是当我使用glReadPixels或glcopyteximage2d时,它会降至 8 fps 。
我做了类似的事情:
glBindFramebuffer(GL_FRAMEBUFFER, frameBuf);
//DRAW something
glReadPixels(...); //HERE
glBindFramebuffer(GL_FRAMEBUFFER, 0);
无论如何我可以提高速度吗?我的意思是当我不使用FBO并使用具有相同参数的glReadPixels时,它工作 15 fps 我认为使用FBO可以提高速度吗?
答案 0 :(得分:5)
获取OpenGL数据(使用任何glGet***
函数)的方法很糟糕(非常糟糕)。要将纹理或某些部分复制到屏幕/其他纹理,您可以使用四边形绘制它。如果您需要某些逻辑处理的像素数据,最好使帧缓冲尽可能小,并在必要时读取它。