GPUImage
Philm_iOS
这个作者很懒,什么都没留下…
展开
-
GPUImage源码解读(四)
GPUImageFramebuffer类用于管理帧缓冲对象,负责帧缓冲对象的创建和销毁,读取帧缓冲内容,其中纹理附件涉及到了相关的纹理选项。因此,它提供的属性也是和帧缓存、纹理附件、纹理选项等相关。###### 属性// 帧缓存大小@property(readonly) CGSize size;// 纹理选项@property(readonly) GPUTextureOpti...转载 2018-08-06 10:33:39 · 399 阅读 · 0 评论 -
GPUImage源码解读(十九)
GPUImageFilterGroup继承自GPUImageOutput ,实现了GPUImageInput协议。因此,可以自身可以作为独立的滤镜参与响应链中。相比GPUImageFilterPipeline,GPUImageFilterGroup功能更强大。 - 属性//滤镜链最后一个效果@property(readwrite, nonatomic, strong) GPUImage...转载 2018-08-08 10:29:20 · 174 阅读 · 0 评论 -
GPUImage源码解读(十八)
GPUImageFilterPipeline 继承自NSObject,它的主要作用是管理滤镜链,自身不能参与响应链中。可以用来构建简单的滤镜组合。如果滤镜比较复杂或是涉及到多个纹理的处理,GPUImageFilterGroup则是更好的选择。属性// filter数组@property (strong) NSMutableArray *filters;// 输入对象@prop...转载 2018-08-08 10:30:08 · 204 阅读 · 0 评论 -
GPUImage源码解读(二十)
GPUImageTwoInputFilter 可以接收两个帧缓存对象的输入。它的作用可以将两个帧缓存对象的输入合并成一个帧缓存对象的输出。它继承自GPUImageFilter,因此,可以方便在滤镜链中使用。 - 实例变量。GPUImageTwoInputFilter最主要的特点就是增加了secondInputFramebuffer这个接收第二个帧缓存对象的实例变量,同时,也增加了关于第二个帧缓存...转载 2018-08-08 10:30:42 · 505 阅读 · 0 评论 -
GPUImage源码解读(二十一)
GPUImageThreeInputFilter 可以接收三个帧缓存对象的输入。它的作用可以将三个帧缓存对象的输入合并成一个帧缓存对象的输出。它继承自GPUImageTwoInputFilter,与GPUImageTwoInputFilter类似,主要增加了第三个帧缓存对象处理的相关操作。实例变量。主要增加了与第三个帧缓存对象相关的实例变量“`@interface GPUImageT...转载 2018-08-08 10:31:12 · 274 阅读 · 0 评论 -
GPUImage源码解读(二十二)
GPUImageFourInputFilter 可以接收四个帧缓存对象的输入。它的作用可以将四个帧缓存对象的输入合并成一个帧缓存对象的输出。它继承自GPUImageThreeInputFilter,与GPUImageTwoInputFilter、GPUImageThreeInputFilter类似,主要增加了第四个帧缓存对象处理的相关操作。 philm gpuimage 版本没有这个类GPUI...转载 2018-08-08 10:31:33 · 290 阅读 · 0 评论 -
GPUImage源码解读(二十三)
GPUImageFilterGPUImageFilter 是GPUImage中很重要、很基础的类,它可以处理帧缓存对象的输入输出,但是对纹理并不添加任何特效,也就是说只是简单的让纹理通过。它更多的是作为其它滤镜的基类,一些具体的滤镜由它的子类去完成。同时它也只能处理单个帧缓存对象的输入,处理多个帧缓存对象的输入也是由它的子类去完成向量定义//在 GPUImage 中主要用到了3...转载 2018-08-08 10:32:01 · 371 阅读 · 0 评论 -
GPUImage源码解读(二十四)
GPUImageLookupFilterGPUImageLookupFilter 是GPUImage中的颜色查找滤镜,在一般的相机应用中使用得最广泛,它的作用是通过颜色变换从而产生出新风格的图片,在philm项目中也有大量使用LUT (Lookup Tables)即查找表 。LUT是个非常简单的数值转换表,不同的色彩输入数值“映射”到一套输出数值,用来改变图像的色彩。例如:红色在LUT中可...转载 2018-08-08 10:32:25 · 551 阅读 · 0 评论 -
GPUImage源码解读(二十五)
#GPUImageView 结构说明.├── GPUImage.xcodeproj│   ├── project.pbxproj│   ├── project.xcworkspace├── GPUImageMac.xcodeproj│   ├── project.pbxproj│  转载 2018-08-08 10:32:46 · 333 阅读 · 0 评论 -
GPUImage的图像形变设计(简单形变部分)
GPUImage是iOS平台主流的GPU图像处理框架,能够非常方便地使用GPU对图像进行处理,包括:滤镜、分布统计等。我们知道,如果需要对一个图像进行滤镜处理,一般而言只需要设计FragmentShader即可以达到目的。比如:需要对图像进行亮度调节,仅需要FragmentShader中对像素点的颜色值进行修改即可,并不需要自定义VertexShader。那么,能否基于GPUImage进行...转载 2018-08-01 10:35:20 · 1400 阅读 · 1 评论 -
GPUImage的图像形变设计(复杂形变部分)
在上一部分,我们介绍了两种简单形变的GPUImage实现方式,包括自定义FragmentShader,和自定义顶点数组。这一部分,我们将介绍更为复杂的一些图像形变的实现。Part3:基于自定义vertices的局部图像形变设计区别于Part2中的自定义vertices和fragment数组的简单图像形变,这里的自定义vertices数组不仅仅局限于图像4个顶点,而是可以任意指定的,从而...转载 2018-08-02 10:36:00 · 1866 阅读 · 5 评论 -
GPUImage源码解读(一)
导读:系列文章会从结构到使用,细化到每一个变量, 使用方法全有对应 DEMO.也会有相对应的技术点扩展如(AVFoundation,OpenGL shader,CAEAGLLayer)等,目前是 Objective-C 版本的,后面会有Swift版本. GPUImage-Objective-C 官方源码GPUImage-Swift 官方源码GPUImage-Objective-C 添...转载 2018-08-02 10:37:54 · 606 阅读 · 0 评论 -
GPUImage源码解读(三)
GPUImageContext类,提供OpenGL ES基本上下文,GPUImage相关处理线程,GLProgram缓存、帧缓存。由于是上下文对象,因此该模块提供的更多是存取、设置相关的方法。源码GPUImageContext属性列表// GPUImage处理OpenGL绘制的相关队列,串行队列@property(readonly, nonatomic) dispatch_q...转载 2018-08-03 10:27:28 · 511 阅读 · 0 评论 -
GPUImage源码解读(二)
这篇文章主要是阅读GPUImage框架中的 GLProgram、GPUImageContext 两个重要类的源码。这两个类是 GPUImage 框架的基础,里面涉及的知识也有 OpenGL ES 基础 和 多线程 基础。以下是源码内容:GLProgram一 GLProgramGLProgram专门处理OpenGL ES程序的创建等相关工作。初始化方法,可以根据需要传入顶点着色...转载 2018-08-03 10:25:57 · 452 阅读 · 0 评论 -
GPUImage源码解读(十七)
GPUImageTextureOutput继承自NSObject实现了GPUImageInput协议。它可以获取到输入的帧缓存中的纹理对象 这个类代码不是很多属性。这里最重要的属性是texture,我们可以拿到texture并使用。//实现了GPUImageTextureOutputDelegate协议的回调对象;@property(readwrite, unsafe_unre...转载 2018-08-07 10:35:00 · 203 阅读 · 0 评论 -
GPUImage源码解读(五)
GPUImageFramebufferCacheGPUImageFramebufferCache类核心的职责是管理GPUImageFramebuffer对象。方法列表 主要涉及到在缓存中查找 GPUImageFramebuffer,将 GPUImageFramebuffer 加入缓存,清空缓存等相关方法。/** 从cache中获取一个GPUImageFramebuffer对象...转载 2018-08-06 10:34:07 · 285 阅读 · 0 评论 -
GPUImage源码解读(六)
介绍GPUImage框架中的GPUImageInput协议以及GPUImageOutput类GPUImageInputGPUImageInput 在GPUImageContext.h中定义, 协议提供了方法列表,细节由实现的对象实现。GPUImage中实现GPUImageInput的协议的类比较多,常见的有 GPUImageFilter、GPUImageView、GPUImageRa...转载 2018-08-06 10:34:26 · 442 阅读 · 0 评论 -
GPUImage源码解读(八)
GPUImageView从名称就可以知道GPUImageView是GPUImage框架中显示图片相关的类。GPUImageView实现了GPUImageInput协议,从而可以知道它能够接受GPUImageFramebuffer的输入。因此,常常作为响应链的终端节点,用于显示处理后的帧缓存。- 重写静态方法 返回 CAEAGLLayerGPUImageView 是UIView的子类...转载 2018-08-06 10:35:14 · 363 阅读 · 0 评论 -
GPUImage源码解读(九)
GPUImageUIElement与GPUImagePicture类似可以作为响应链源。与GPUImagePicture不同的是,它的数据不是来自图片,而是来自于UIView或CALayer的渲染结果,类似于对UIView或CALayer截图。GPUImageUIElement继承自GPUImageOutput,从而可以知道它能够作为输出,由于它没有实现GPUImageInput协议,不能处理...转载 2018-08-06 10:36:18 · 282 阅读 · 0 评论 -
GPUImage源码解读(十)
GPUImageVideoCamera继承自GPUImageOutput,实现了 AVCaptureVideoDataOutputSampleBufferDelegate 和 AVCaptureAudioDataOutputSampleBufferDelegate 协议。GPUImageVideoCamera可以调用相机进行视频拍摄,拍摄之后会生成帧缓存对象,我们可以使用GPUImageView显...转载 2018-08-06 10:36:38 · 532 阅读 · 0 评论 -
GPUImage源码解读(十一)
GPUImageStillCamera主要用来进行拍照。它继承自 GPUImageVideoCamera,因此,除了具备GPUImageVideoCamera的功能,它还提供了一套丰富的拍照API,方便我们进行拍照的相关操作。属性列表。GPUImageStillCamera属性比较少,属性也主要是与图片相关// jpeg图片的压缩率,默认是0.8@property CGFloat...转载 2018-08-07 10:32:17 · 472 阅读 · 0 评论 -
GPUImage源码解读(十二)
GPUImageMovie 主要的作用是读取与解码音视频文件。它继承自GPUImageOutput,可以输出帧缓存对象,由于没有实现GPUImageInput协议,因此只能作为响应源。 -初始化。可以通过NSURL、AVPlayerItem、AVAsset初始化。- (id)initWithAsset:(AVAsset *)asset;- (id)initWithPlayerItem:...转载 2018-08-07 10:33:06 · 243 阅读 · 0 评论 -
GPUImage源码解读(十三)
GPUImageMovieWriter 方法不是很多,但是方法都比较长,内部处理也相对比较复杂。这里只给出了常见的方法。如果需要录制视频,可以仔细阅读//// 初始话音频参数,如编码格式、声道数、采样率、码率- (void)setHasAudioTrack:(BOOL)newValue audioSettings:(NSDictionary *)audioOutputSettings;...转载 2018-08-07 10:33:30 · 608 阅读 · 0 评论 -
GPUImage源码解读(十四)
GPUImageRawDataInput继承自GPUImageOutput,它可以接受RawData输入(包括:RGB、RGBA、BGRA、LUMINANCE数据)并生成帧缓存对象。 - 构造方法。构造的时候主要是根据RawData数据指针,数据大小,以及数据格式进行构造。// Initialization and teardown- (id)initWithBytes:(GLubyt...转载 2018-08-07 10:33:55 · 283 阅读 · 0 评论 -
GPUImage源码解读(十五)
GPUImageRawDataOutputGPUImageRawDataOutput实现了GPUImageInput协议,它可以将输入的帧缓存转换为原始数据。构造方法。构造方法最主要的任务是构造GL程序。- (id)initWithImageSize:(CGSize)newImageSize resultsInBGRAFormat:(BOOL)resultsInBGRAForm...转载 2018-08-07 10:34:15 · 424 阅读 · 0 评论 -
GPUImage源码解读(十六)
GPUImageTextureInput继承自GPUImageOutput,可以用传入的纹理生成帧缓存对象。因此,可以作为响应链源使用。构造方法。构造方法只有一个,接收的参数是纹理对象和纹理大小- (id)initWithTexture:(GLuint)newInputTexture size:(CGSize)newTextureSize;构造的时候,主要是用传入的纹理生成帧...转载 2018-08-07 10:34:41 · 270 阅读 · 0 评论 -
GPUImage源码解读(七)
GPUImagePicture从名称就可以知道GPUImagePicture是GPUImage框架中处理与图片相关的类,它的主要作用是将UIImage或CGImage转化为纹理对象。GPUImagePicture继承自GPUImageOutput,从而可以知道它能够作为输出,由于它没有实现GPUImageInput协议,不能处理输入。因此,常常作为响应链源。初始化方法 ,所有初始化方法...转载 2018-08-06 10:34:45 · 347 阅读 · 0 评论