GPUImageContext负责管理OpenGL context已经当前context处理任务用到的资源,包括GLProgram、CVOpenGLESTextureCacheRef、GPUImageFramebufferCache。
GPUImageContext的源码并不是很复杂,不过.h文件中声明的属性和方法有点乱,下面将对.h文件的属性和方法进行分类,然后对应着看.m文件中的相关实现就能很快缕清关系:
// GPUImageContext.h
// 上下文相关
@property(readonly, retain, nonatomic) EAGLContext *context; // 获取当前上下文
+ (GPUImageContext *)sharedImageProcessingContext; // 创建上下文单例
+ (void)useImageProcessingContext; // 创建上下文单例,并设置为当前上下文
- (void)useAsCurrentContext; // 设置为当前上下文
- (void)useSharegroup:(EAGLSharegroup *)sharegroup; // 使用EAGLSharegroup
@property(readonly, nonatomic) dispatch_queue_t contextQueue; // 上下文队列
+ (dispatch_queue_t)sharedContextQueue; // 同上
+ (void *)contextKey; // 上下文的key,用于获取当前队列的
// 着色器程序相关
@property(readwrite, retain, nonatomic) GLProgram *currentShaderProgram; // 当前着色器程序
+ (void)setActiveShaderProgram:(GLProgram *)shaderProgram; // 设置为当前的着色器程序
- (void)setContextShaderProgram:(GLProgram *)shaderProgram; // 设置为当前的着色器程序
- (GLProgram *)programForVertexShaderString:(NSString *)vertexShaderString fragmentShaderString:(NSString *)fragmentShaderString; // 新建或从缓存中获取着色器程序
// 缓存相关
@property(readonly) CVOpenGLESTextureCacheRef coreVideoTextureCache;
@property(readonly) GPUImageFramebufferCache *framebufferCache;
+ (GPUImageFramebufferCache *)sharedFramebufferCache;
// 获取硬件支持信息
+ (GLint)maximumTextureSizeForThisDevice;
+ (GLint)maximumTextureUnitsForThisDevice;
+ (GLint)maximumVaryingVectorsForThisDevice;
+ (BOOL)deviceSupportsOpenGLESExtension:(NSString *)extension;
+ (BOOL)deviceSupportsRedTextures;
+ (BOOL)deviceSupportsFramebufferReads;
+ (BOOL)supportsFastTextureUpload;
// 适应设备支持的最大尺寸
+ (CGSize)sizeThatFitsWithinATextureForSize:(CGSize)inputSize;
// 展示当前已渲染的buffer
- (void)presentBufferForDisplay;
网友评论