こんな感じ。これで、一本つなげるだけなら楽ちん。もっと良いコード書きたいけど。
- (GPUImageFilterGroup *)createFilterGroup:(NSArray *)filters{
GPUImageFilterGroup *filterGroup = [[GPUImageFilterGroup alloc] init];
GPUImageFilter *beforeFilter = nil;
for (GPUImageFilter *filter in filters) {
[filterGroup addTarget:filter];
if (!beforeFilter){ // beforeフィルターが設定されてない時は一番最初
beforeFilter = filter;
continue;
}
[beforeFilter addTarget:filter];
beforeFilter = filter;
}
GPUImageFilter *firstFilter = [filters objectAtIndex:0];
[filterGroup setInitialFilters:@[firstFilter]];
GPUImageFilter *endFilter = [filters lastObject];
[filterGroup setTerminalFilter:endFilter];
return filterGroup;
}
使うときは
GPUImageFilter *filter1 = [[GPUImageFilter alloc] init];
GPUImageFilter *filter1 = [[GPUImageFilter alloc] init];
GPUImageFilterGroup filterGroup = [self createFilterGroup:@[filter1,filter2]];
ほら楽ちん。
けど、多分もっと良いコードあるんだろうなぁ。あと、Blendとかいろいろなつなぎ方にも対応したい。できるだけ、Arrayで書けば勝手に繋がってくれるのが理想だもんな。