GPUImage(四):GPUImageFramebuffer

GPUImage概览
GPUImage(一):视频采集GPUImageVideoCamera
GPUImage(二):视频滤镜GPUImageFilter基础篇
GPUImage(三):视频滤镜GPUImageFilter高阶篇
在前文中提到GPUImageFilter的最后一个职责是绘制图元到特定的帧缓存。什么是帧缓存?

GPUImageFramebuffer

GPUImageFramebuffer的功能是在帧缓存取出绘制的图像。是管理纹理缓存格式、帧缓存的buffer。
GPUImageFilter的成员变量firstInputFramebuffer和
GPUImageOutput的成员变量GPUImageFramebuffer都是GPUImageFramebuffer的实例。

GPUImage(四):GPUImageFramebuffer_第1张图片
GPUImageFramebuffer.png

init方法

- (id)initWithSize:(CGSize)framebufferSize;//调用2
- (id)initWithSize:(CGSize)framebufferSize textureOptions:(GPUTextureOptions)fboTextureOptions onlyTexture:(BOOL)onlyGenerateTexture;
- (id)initWithSize:(CGSize)framebufferSize overriddenTexture:(GLuint)inputTexture;

第一个方法创建了默认的纹理格式结构体defaultTextureOptions,并调用2
第二个方法继而创建纹理缓存帧缓存

缓存创建和销毁

- (void)generateTexture;//创建纹理缓存
- (void)generateFramebuffer;//创建帧缓存
- (void)destroyFramebuffer;//销毁帧缓存

这里边都是一堆OpenGL语句,只说一个:
glFramebufferTexture2D :应用FBO渲染到纹理(glGenTextures),直接绘制到纹理中。glCopyTexImage2D是渲染到FrameBuffer->复制FrameBuffer中的像素产生纹理。glFramebufferTexture2D直接渲染生成纹理,做全屏渲染(比如全屏模糊)时比glCopyTexImage2D高效
。这指定渲染目标为图像

activateFramebuffer
这个方法先绑定了自己的帧缓存,然后调整了视窗的大小。在GPUImageFilter的outputFramebuffer创建后即调用。

引用计数管理
GPUImageFramebuffer使用引用计数来管理缓存,当引用计数小于0的时候会回收缓存。

- (void)lock;
- (void)unlock;
- (void)clearAllLocks;
- (void)disableReferenceCounting;
- (void)enableReferenceCounting;

图像捕捉
剩下的几个方法中,只有一个核心方法,其他方法都是被这个核心方法调用的。

- (CGImageRef)newCGImageFromFramebufferContents;

从帧缓存中获取图片CGImageRef。

你可能感兴趣的:(GPUImage(四):GPUImageFramebuffer)