美文网首页
GPUImage(四):GPUImageFramebuffer

GPUImage(四):GPUImageFramebuffer

作者: sellse | 来源:发表于2017-11-02 17:32 被阅读30次

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

GPUImageFramebuffer

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

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

    GPUImage概览GPUImage(一):视频采集GPUImageVideoCameraGPUImage(二):...

  • GPUImage详细解析(二)

    解析 GPUImage详细解析(一)上一篇介绍的是GPUImageFramebuffer和GPUImageFilt...

  • GPUImage源码解析 -- GPUImageOutput/I

    在上一篇文章中介绍了GPUImage框架中的核心载体GPUImageFrameBuffer,在接下来的文章中,我们...

  • GPUImage源码解读之GPUImageFramebuffer

    简介 由于GPUImage添加滤镜可以形成一个FilterChain,因此,在渲染的过程中,可能会需要很多个Fra...

  • GPUImageFramebuffer

    总述 从总体上来讲它是容纳一个纹理的容器。这个类写得太别的散,让人一眼看不出什么主旨要义来,可能是因为作者像让这个...

  • GPUImage2 的导入

    首先,GPUImage有3个版本分别是:GPUImage,GPUImage2,GPUImage3 GPUImage...

  • GPUImage概览

    读GPUImage源码,深入了解GPUImage原理及OpenGL ES。 关于GPUImage GPUImage...

  • GPUImage 解析

    GPUImage解析(一) —— 基本概览(一)GPUImage解析(二) —— 基本概览(二)GPUImage解...

  • GPUImage架构-思维导图

    GPUImage架构 参考文章: GPUImage架构

  • 视频滤镜

    GPUImage原生美颜 GPUImage原生美颜 步骤一:使用Cocoapods导入GPUImage步骤二:创建...

网友评论

      本文标题:GPUImage(四):GPUImageFramebuffer

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