如何在没有GPUImageFilterGroup的情况下使用GPUImageLookupFilter?

时间:2013-04-12 07:54:34

标签: ios opengl-es-2.0 gpuimage

我对理解GPUImage有疑问。 具体来说,我无法弄清楚如何使用GPUImageLookupFilter。我在GPUImageAmatorkaFilter中有几个用法示例。 但是LookupFilter在GPUImageFilterGroup中使用,我还没有理解。 我想知道我是否可以单独使用LookupFilter。

我试过这个:

GPUImageLookupFilter *lookup = [[GPUImageLookupFilter alloc] init];

UIImage *image = [UIImage imageNamed:@"amatorka.png"];
GPUImagePicture *lookupImageSource = [[GPUImagePicture alloc] initWithImage:image];    
[lookupImageSource addTarget: lookup atTextureLocation: 1];
[lookupImageSource processImage];

GPUImagePicture *inputImg = [[GPUImagePicture alloc] initWithImage:inputImage];
[inputImg addTarget:lookup atTextureLocation: 1];
[inputImg processImage];

UIImage *quickFilteredImage = [lookup imageFromCurrentlyProcessedOutput];

但它不起作用,它会像这样崩溃:

Assertion failure in -[GPUImageLookupFilter createFilterFBOofSize:], PathToSource/GPUImageFilter.m:369
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Incomplete filter FBO: 36054'

我绝对需要初始化其他内容,但是.... 那么,任何人都可以帮助我使这一小段代码工作吗? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

感谢Brad Larson回答:

  

首先,您将两个图像添加到纹理位置1,因此一个覆盖另一个。您需要将输入图像添加到纹理位置0并将模式查找到位置1,我相信。

答案 1 :(得分:0)

这就是我个人使用它的方式:

- (UIImage *)filterImage:(GPUImagePicture *)originalImageSource withLUTNamed:(NSString *)lutName
{
    GPUImagePicture *lookupImageSource = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:lutName]];
    GPUImageLookupFilter *lookupFilter = [[GPUImageLookupFilter alloc] init];

    [originalImageSource addTarget:lookupFilter];
    [lookupImageSource addTarget:lookupFilter];

    [lookupFilter useNextFrameForImageCapture];
    [originalImageSource processImage];
    [lookupImageSource processImage];

    return [lookupFilter imageFromCurrentFramebufferWithOrientation:UIImageOrientationUp];
}