美文网首页
FBO 帧缓存对象

FBO 帧缓存对象

作者: Damon_He | 来源:发表于2019-12-11 17:10 被阅读0次

Frame Buffer Object

帧缓冲对象:FBO。默认情况下,我们在GLSurfaceView中绘制的结果是显示到屏幕上,然而实际中有很多情况并不需要渲染到屏幕上,这个时候使用FBO就可以很方便的实现这类需求。FBO可以让我们的渲染不渲染到屏幕上,而是渲染到离屏Buffer中。

前面我们创建了一个ScreenFilter类用来封装将摄像头数据显示当屏幕上,然而我们需要在显示之前增加各种"效果",如果我们只存在一个ScreenFilter,那么所有的"效果"都会积压在这个类中,同时也需要大量的if else来判断是否开启效果。

结构1.png

我们可以将每种效果写到单独的一个Filter中去,并且在ScreenFilter之前的所有Filter都不需要显示到屏幕中,所以在ScreenFilter之前都将其使用FBO进行缓存。

需要注意的是: 摄像头画面经过FBO的缓存时候,我们再从FBO绘制到屏幕,这时候就不需要再使用samplerExternalOES与变换矩阵了。这意味着ScreenFilter,使用的采样器就是正常的sampler2D,也不需要#extension GL_OES_EGL_image_external : require

然而在最原始的状态下是没有开启任何效果的,所以ScreenFilter就比较尴尬。

1、开启效果: 使用sampler2D

2、未开启效果: 使用samplerExternalOES

那么就需要在ScreenFilter中使用if else来进行判断,但这个判断稍显麻烦,所以这里我选择使用:

结构2.png

从摄像头使用的纹理首先绘制到CameraFilterFBO中,这样无论是否开启效果ScreenFilter都是以sampler2D来进行采样。

相关文章

网友评论

      本文标题:FBO 帧缓存对象

      本文链接:https://www.haomeiwen.com/subject/xjcagctx.html