Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 带FBO的glReadPixels太慢_Opengl Es_Framebuffer_Glreadpixels - Fatal编程技术网

Opengl es 带FBO的glReadPixels太慢

Opengl es 带FBO的glReadPixels太慢,opengl-es,framebuffer,glreadpixels,Opengl Es,Framebuffer,Glreadpixels,我正在使用openGL ES 2.0和GLSL着色器,并使用Renderbuffer(也称为屏幕外渲染)处理FBO 它以每秒30帧的速度运行良好。 但当我使用glReadPixels或glcopyteximage2d时,它会下降到8 fps。 我做了这样的事情: glBindFramebuffer(GL_FRAMEBUFFER, frameBuf); //DRAW something glReadPixels(...); //HERE glBindFramebuffer(GL_FRAMEBUFF

我正在使用openGL ES 2.0和GLSL着色器,并使用Renderbuffer(也称为屏幕外渲染)处理FBO
它以每秒30帧的速度运行良好。
但当我使用glReadPixels或glcopyteximage2d时,它会下降到8 fps。
我做了这样的事情:

glBindFramebuffer(GL_FRAMEBUFFER, frameBuf);
//DRAW something
glReadPixels(...); //HERE
glBindFramebuffer(GL_FRAMEBUFFER, 0);

还有什么我可以提高速度的吗?我的意思是,当我不使用FBO和使用参数相同的glReadPixels时,它的工作速度为15 fps,我认为使用FBO可以提高速度?

获取OpenGL数据的方法很糟糕(非常糟糕)(使用任何
glGet***
函数)。若要将纹理或其部分复制到屏幕/其他纹理,可以使用四边形绘制。如果需要像素数据进行某些逻辑处理,最好使帧缓冲区尽可能小,并仅在必要时读取。

是否使用
glReadPixels()
等将屏幕外渲染复制到屏幕上?如果要渲染到曲面,为什么不直接渲染(或者尽可能接近-我从来没有使用OpenGL ES)。是的,所以我使用glsl着色器,无论片段着色器输出什么,我都必须访问/读取帧缓冲区,以便我可以计算一些内容。我的空闲目标是读取帧缓冲区,离开屏幕,做一些事情,然后在屏幕上绘制最终结果,制作2个纹理,将一个绑定到FBO,另一个作为输入纹理。然后将FBO与第二个绑定并使用第一个作为纹理切换。不要抄袭。(如果ES支持这一点——我不知道它是否支持——你也可以将它们都绑定到FBO和as纹理,并通过统一的纹理决定读取哪个纹理,并在另一个MRT中禁用颜色写入。为了正确性,尽管如果你放“其他东西”,它通常“仍然有效”在乒乓球和乒乓球之间,您需要进行同步,以便在再次读入数据之前写入缓存,例如使用NV_纹理_屏障)。可能的重复