GPUImage 重要类的介绍(4大类)

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的操作

你可能感兴趣的:(GPUImage 重要类的介绍(4大类))