opengl-es - FBO 的 glReadPixels 太慢

标签 opengl-es framebuffer glreadpixels

我正在使用 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 可以提高速度?

最佳答案

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

关于opengl-es - FBO 的 glReadPixels 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655111/

相关文章:

c++ - 为什么添加颜色附件会导致速度降低 3 倍?

opengl-es - 将 WebGL 2 中的像素读取为 Float 值

ios - 使用 glReadPixels 读取 Tap Point 的值? OpenGL 2.0 iOS

opengl-es - opengl es gldrawelements函数导致内存访问冲突

iphone - 是否有关于如何在 OpenGL ES 1.1 中使用顶点缓冲区对象 (VBO) 的最小化示例?

windows - 在 Windows 中修改帧缓冲区

c++ - GL_INVALID_OPERATION 尝试采样立方体贴图纹理时

c++ - glReadPixels() 真的很慢,从鼠标位置获取 OpenGL 坐标的更好解决方案?

c++ - OpenCV-3.0 支持 OpenGL

ios - glclear() 在 ios8 opengl 中修改 glscissor() 边界之外的图像