GPUImage 重要类的介绍(4大类)
本文仅作为翻阅资料使用,有错误请开发者自行修改
1,GPUImagePicture类 图片处理类
GPUImagePicture是PGUImage的图像处理类,继承GPUImageOutput,一般作为响应链的源头。
GPUImagePicture类静态图像处理操作,它可以是需要处理的静态图像,也可以是一张作为纹理使用的图片,调用向它发送processImage消息,进行图像滤镜处理。
属性介绍:
pixelSizeOfImage 图像的像素大小。
hasProcessedImage 图像是否已处理。
imageUpdateSemaphore 图像处理的GCD信号量。
初始化方法:
- (id)initWithURL:(NSURL *)url
使用指定url的图片来初始化GPUImagePicture
- (id)initWithImage:(UIImage *)newImageSource
使用指定的UIImage对象来初始化GPUImagePicture
- (id)initWithCGImage:(CGImageRef)newImageSource
使用指定的CGImageRef对象来初始化GPUImagePicture
- (id)initWithImage:(UIImage *)newImageSource smoothlyScaleOutput:(BOOL)smoothlyScaleOutput
使用指定的UIImage对象来初始化GPUImagePicture,是否按比例调整输入图像的尺寸
操作API
- (void)processImage;
进行图像处理实际操作。
- (CGSize)outputImageSize;
输出image的大小
- (BOOL)processImageWithCompletionHandler:(void (^)(void))completion
进行图像处理实际的操作,completion为当处理结束执行的操作。
2, GPUImageFilter
滤镜的基类
1.都遵守GPUImageInput的协议
2.获得响应链上游的纹理,经过自己的处理,生成新的纹理,向响应链的下一个对象传递
具体介绍
extern NSString *const kGPUImageVertexShaderString;//顶点着色器
extern NSString *const kGPUImagePassthroughFragmentShaderString;//片段着色器
struct GPUVector4 {//4维坐标
GLfloat one;
GLfloat two;
GLfloat three;
GLfloat four;
};
typedef struct GPUVector4 GPUVector4;
struct GPUVector3 {//3维坐标系
GLfloat one;
GLfloat two;
GLfloat three;
};
typedef struct GPUVector3 GPUVector3;
struct GPUMatrix4x4 {//4x4矩阵
GPUVector4 one;
GPUVector4 two;
GPUVector4 three;
GPUVector4 four;
};
typedef struct GPUMatrix4x4 GPUMatrix4x4;
struct GPUMatrix3x3 {{//3x3矩阵
GPUVector3 one;
GPUVector3 two;
GPUVector3 three;
};
typedef struct GPUMatrix3x3 GPUMatrix3x3;
成员变量:
GPUImageFramebuffer *firstInputFramebuffer;//输入帧缓存
GLProgram *filterProgram;//openGL源程序
GLint filterPositionAttribute, filterTextureCoordinateAttribute;//顶点属性、纹理属性
GLint filterInputTextureUniform;//输入纹理常量
GLfloat backgroundColorRed, backgroundColorGreen, backgroundColorBlue, backgroundColorAlpha;//r g b a
BOOL isEndProcessing;//是否处理完成
CGSize currentFilterSize;//当前滤镜的尺寸
GPUImageRotationMode inputRotation;//旋转模式
BOOL currentlyReceivingMonochromeInput;//是否接受黑白输入
NSMutableDictionary *uniformStateRestorationBlocks;//
dispatch_semaphore_t imageCaptureSemaphore;//信号量
属性:
@property(readonly) CVPixelBufferRef renderTarget;//像素对象
@property(readwrite, nonatomic) BOOL preventRendering;//是否方式渲染
@property(readwrite, nonatomic) BOOL currentlyReceivingMonochromeInput;//是否接受黑白输入
方法:
- (id)initWithVertexShaderFromString:(NSString *)vertexShaderString fragmentShaderFromString:(NSString *)fragmentShaderString;// init
- (id)initWithFragmentShaderFromString:(NSString *)fragmentShaderString;// init
- (id)initWithFragmentShaderFromFile:(NSString *)fragmentShaderFilename;// init
- (void)initializeAttributes;// init属性
- (void)setupFilterForSize:(CGSize)filterFrameSize;//设置滤镜尺寸
- (CGSize)rotatedSize:(CGSize)sizeToRotate forIndex:(NSInteger)textureIndex;//旋转尺寸
- (CGPoint)rotatedPoint:(CGPoint)pointToRotate forRotation:(GPUImageRotationMode)rotation;//旋转顶点
- (CGSize)sizeOfFBO;//帧缓存大小
+ (const GLfloat *)textureCoordinatesForRotation:(GPUImageRotationMode)rotationMode;//纹理旋转
- (void)renderToTextureWithVertices:(const GLfloat *)vertices textureCoordinates:(const GLfloat *)textureCoordinates;//根据顶点和纹理渲染
- (void)informTargetsAboutNewFrameAtTime:(CMTime)frameTime;//通知响应链下游的对象
- (CGSize)outputFrameSize;//输出
/// 一些列set方法
- (void)setBackgroundColorRed:(GLfloat)redComponent green:(GLfloat)greenComponent blue:(GLfloat)blueComponent alpha:(GLfloat)alphaComponent;
- (void)setInteger:(GLint)newInteger forUniformName:(NSString *)uniformName;
- (void)setFloat:(GLfloat)newFloat forUniformName:(NSString *)uniformName;
- (void)setSize:(CGSize)newSize forUniformName:(NSString *)uniformName;
- (void)setPoint:(CGPoint)newPoint forUniformName:(NSString *)uniformName;
- (void)setFloatVec3:(GPUVector3)newVec3 forUniformName:(NSString *)uniformName;
- (void)setFloatVec4:(GPUVector4)newVec4 forUniform:(NSString *)uniformName;
- (void)setFloatArray:(GLfloat *)array length:(GLsizei)count forUniform:(NSString*)uniformName;
- (void)setMatrix3f:(GPUMatrix3x3)matrix forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setMatrix4f:(GPUMatrix4x4)matrix forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setFloat:(GLfloat)floatValue forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setPoint:(CGPoint)pointValue forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setSize:(CGSize)sizeValue forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setVec3:(GPUVector3)vectorValue forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setVec4:(GPUVector4)vectorValue forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setFloatArray:(GLfloat *)arrayValue length:(GLsizei)arrayLength forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setInteger:(GLint)intValue forUniform:(GLint)uniform program:(GLProgram *)shaderProgram;
- (void)setAndExecuteUniformStateCallbackAtIndex:(GLint)uniform forProgram:(GLProgram *)shaderProgram toBlock:(dispatch_block_t)uniformStateBlock;
- (void)setUniformsForProgramAtIndex:(NSUInteger)programIndex;
3, GPUImageFramebuffer
GPUmageFramebuffer类用于管理帧缓冲对象,负责帧缓冲对象的创建和销毁,读取帧缓冲内容
属性:
@property(readonly) CGSize size;//只读属性,在实现中,设置缓冲区的size
@property(readonly) GPUTextureOptions textureOptions;//纹理的选项
@property(readonly) GLuint texture;//管理纹理
@property(readonly) BOOL missingFramebuffer;//指示是否丢失帧缓冲对象
初始化:
// Initialization and teardown
创建一个size为framebufferSize大小的帧缓冲对象
参数 framebuffer的size。
返回:创建成功的帧缓冲对象。
- (id)initWithSize:(CGSize)framebufferSize;
创建一个size为framebufferSize大小的帧缓冲对象
参数:framebufferSize为framebuffer的size。fboTextureOptions是纹理的详细配置。onlyGenerateTexture说明是否只创建纹理而不创建陈帧缓冲对象。
返回:创建成功的帧缓冲对象。
- (id)initWithSize:(CGSize)framebufferSize textureOptions:(GPUTextureOptions)fboTextureOptions onlyTexture:(BOOL)onlyGenerateTexture;
创建一个size为framebufferSize大小的帧缓冲对象
参数:inputTexture为输入的纹理,用于渲染图片。
返回:创建成功的帧缓冲对象。
- (id)initWithSize:(CGSize)framebufferSize overriddenTexture:(GLuint)inputTexture;
激活
// Usage
- (void)activateFramebuffer;//激活刚创建的framebuffer对象。只有调用它后,才会起作用。
引用计数
- (void)lock;//引用计数管理 +1
- (void)unlock;//引用计数管理 -1
- (void)clearAllLocks;//引用计数管理 设置为0
- (void)disableReferenceCounting;//引用计数管理 禁用引用计数
- (void)enableReferenceCounting;//引用计数管理 启用引用计数
图片捕捉
- (CGImageRef)newCGImageFromFramebufferContents;
- (void)restoreRenderTarget;//还原渲染目标对象
原始数据字节
- (void)lockForReading;//[锁](http://www.liuhaihua.cn/archives/tag/%e9%94%81)定PixelBuffer
- (void)unlockAfterReading;//解锁PixelBuffer
- (NSUInteger)bytesPerRow;//获取pixel buffer的行字节数
- (GLubyte *)byteBuffer;//获取pixel buffer的基地址
4, GPUImageFilterGroup (组合滤镜)
GPUImageFilterGroup是多个filter的集合,terminalFilter为最终的filter,initialFilters为filter数组。GPUImageFilterGroup本身不绘制图像,对GPUImageFilterGroup添加删除Target操作的操作都会转为terminalFilter的操作