你的位置:首页 > 软件开发 > 操作系统 > GPUImage API文档之GPUImageFramebufferCache类

GPUImage API文档之GPUImageFramebufferCache类

发布时间:2015-11-14 18:00:09
GPUImageFramebufferCache类负责管理GPUImageFramebuffer对象,是一个GPUImageFramebuffer对象的缓存。  方法  - (GPUImageFramebuffer *)fetchFramebufferForSize:(CGSiz ...

  GPUImageFramebufferCache类负责管理GPUImageFramebuffer对象,是一个GPUImageFramebuffer对象的缓存。

  方法

  - (GPUImageFramebuffer *)fetchFramebufferForSize:(CGSize)framebufferSize textureOptions:(GPUTextureOptions)textureOptions onlyTexture:(BOOL)onlyTexture

  说明:从cache中获取一个GPUImageFramebuffer对象,如果获取失败,那么创建一个新的GPUImageFramebuffer对象。

  参数:framebufferSize是对象的大小,textureOptions是纹理的配置信息,onlyTexture指示是否只为纹理,是否包含framebuffer对象。

  返回:一个GPUImageFramebuffer对象

  实现

 

- (GPUImageFramebuffer *)fetchFramebufferForSize:(CGSize)framebufferSize textureOptions:(GPUTextureOptions)textureOptions onlyTexture:(BOOL)onlyTexture;{  __block GPUImageFramebuffer *framebufferFromCache = nil;//  dispatch_sync(framebufferCacheQueue, ^{  runSynchronouslyOnVideoProcessingQueue(^{    NSString *lookupHash = [self hashForSize:framebufferSize textureOptions:textureOptions onlyTexture:onlyTexture];    NSNumber *numberOfMatchingTexturesInCache = [framebufferTypeCounts objectForKey:lookupHash];    NSInteger numberOfMatchingTextures = [numberOfMatchingTexturesInCache integerValue];        if ([numberOfMatchingTexturesInCache integerValue] < 1)    {      // Nothing in the cache, create a new framebuffer to use      framebufferFromCache = [[GPUImageFramebuffer alloc] initWithSize:framebufferSize textureOptions:textureOptions onlyTexture:onlyTexture];    }    else    {      // Something found, pull the old framebuffer and decrement the count      NSInteger currentTextureID = (numberOfMatchingTextures - 1);      while ((framebufferFromCache == nil) && (currentTextureID >= 0))      {        NSString *textureHash = [NSString stringWithFormat:@"%@-%ld", lookupHash, (long)currentTextureID];        framebufferFromCache = [framebufferCache objectForKey:textureHash];        // Test the values in the cache first, to see if they got invalidated behind our back        if (framebufferFromCache != nil)        {          // Withdraw this from the cache while it's in use          [framebufferCache removeObjectForKey:textureHash];        }        currentTextureID--;      }            currentTextureID++;            [framebufferTypeCounts setObject:[NSNumber numberWithInteger:currentTextureID] forKey:lookupHash];            if (framebufferFromCache == nil)      {        framebufferFromCache = [[GPUImageFramebuffer alloc] initWithSize:framebufferSize textureOptions:textureOptions onlyTexture:onlyTexture];      }    }  });  [framebufferFromCache lock];  return framebufferFromCache;}

原标题:GPUImage API文档之GPUImageFramebufferCache类

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录