OpenGL学习

帧缓冲区是一块内存,这个块内存可以是共享内存(CPU和GPU能同时访问),或者是显存,GPU可以直接访问

客户端先通过opengl es 绘制到 Graphicbuffer上(以共享内存作为帧缓存区),然后经过 sfufaceFlinger 合成,最终再有open gl es 绘制到显卡上(此时以显卡作为帧缓冲区,即frambuffer)

Surface 可以代表一个抽象窗口即共享内存是一个窗口(可以存放数据),此时Surface (虚拟窗口)利用共享内存实现双缓冲,显示器也代表一种窗口即显卡是一个窗口(frambuffer可以存放数据),
此时显示器(真实窗口)利用显存也可以实现双缓冲

所以opengl es 是一种双缓冲规范,给他提供内存,再根据定义好的接口实现双缓冲机制,就成了open gl 库

在open gl 中 只有0号帧缓冲区才可以上屏,所以你虽然创建了很多帧缓冲区,但是你用完这些帧缓冲区后,最后你得拷贝到0号帧缓冲区才能有机会上屏,因为eglswpebuffer 会把0号帧缓冲区切为前台。

Eglswpe 其实是把 后台”缓冲区“(你刚刚经过draw,然后又把fbo拷贝到0号帧缓冲区,刚刚渲染完的一帧)(可能是0号帧缓冲区吧),切换为前台”缓冲区“。

那么离屏渲染还需要进行eglswpebuffer吗?不需要,理解为渲染到一个后台窗口,只不过这个窗口是单缓存的,在窗口中绘制到Pbuffer内存区域(使用渲染缓冲区依附在FBO上)。

Pbuffer Surface 是单缓冲的 我们不需要调用 eglSwapBuffers 每次渲染操作直接写入 Pbuffer Surface,并可以在渲染完成后直接读取其内容用于其他处理。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值