GPUImageView在响应链的终点,是一个UIView,不用继承自GPUImageOutput,但实现GPUImageInput协议。
GPUImageView的接口非常简单,几乎只需设置一个GPUImageFillModeType填充模式,填充模式有三种:
在GPUImageView的frame位全屏幕,GPUImageVideoCamera比例为AVCaptureSessionPreset640x480时的效果
kGPUImageFillModePreserveAspectRatio(默认):
保持源图像的宽高比,空白部分添加设置的背景色。
Maintains the aspect ratio of the source image, adding bars of the specified background color
** kGPUImageFillModeStretch**:
拉伸使图片填满视图,可能会破坏图片的比例
Stretch to fill the full view, which may distort the image outside of its normal aspect ratio
**
kGPUImageFillModePreserveAspectRatioAndFill**:
保持源图片比例,在中心基础上缩放,图片铺满整个屏幕
Maintains the aspect ratio of the source image, zooming in on its center to fill the view
init方法
+ (Class)layerClass
- (id)initWithFrame:(CGRect)frame
-(id)initWithCoder:(NSCoder *)coder
- (void)commonInit;
- (void)layoutSubviews;
这的初始化方法与GPUImageFilter实现类似,主要的就是调用显示帧缓存的方法。
管理显示fbos
- (void)createDisplayFramebuffer;
- (void)destroyDisplayFramebuffer;
- (void)setDisplayFramebuffer;
- (void)presentFramebuffer;
各种对帧缓存和渲染缓存的创建和销毁
处理填充模式
- (void)recalculateViewGeometry;
- (void)setBackgroundColorRed:(GLfloat)redComponent green:(GLfloat)greenComponent blue:(GLfloat)blueComponent alpha:(GLfloat)alphaComponent;
- 根据填充模式重新计算图像顶点位置数据
- 设置背景色
- 计算不同旋转模式下的纹理坐标
实现GPUImageInput代理方法
这个参照GPUImageFilter的解释