BradLarson / GPUImage

An open source iOS framework for GPU-based image and video processing
http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework
BSD 3-Clause "New" or "Revised" License
20.2k stars 4.61k forks source link

For `GPUImageFilterGroup`, why do we need to do all the `addFilter`, `setInitialFilters`, `setTerminalFilter` steps? #2611

Open allenlinli opened 5 years ago

allenlinli commented 5 years ago

Hi, I have a question that why do we need to do all the addFilter, setInitialFilters, setTerminalFilter steps? And we even need to addTarget for the filters in the group? What's the difference between filters and initialFilters within GPUImageFilterGroup.m?

Is it possible that the GPUImageFilterGroup just receives a filters array, and setup setInitialFilters, setTerminalFilter, and even add target one by one for the filters being added?

        case GPUIMAGE_FILTERGROUP:
        {
            self.title = @"Filter Group";
            self.filterSettingsSlider.hidden = NO;

            [self.filterSettingsSlider setValue:0.05];
            [self.filterSettingsSlider setMinimumValue:0.0];
            [self.filterSettingsSlider setMaximumValue:0.3];

            filter = [[GPUImageFilterGroup alloc] init];

            GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
            [(GPUImageFilterGroup *)filter addFilter:sepiaFilter];

            GPUImagePixellateFilter *pixellateFilter = [[GPUImagePixellateFilter alloc] init];
            [(GPUImageFilterGroup *)filter addFilter:pixellateFilter];

            [sepiaFilter addTarget:pixellateFilter];
            [(GPUImageFilterGroup *)filter setInitialFilters:[NSArray arrayWithObject:sepiaFilter]];
            [(GPUImageFilterGroup *)filter setTerminalFilter:pixellateFilter];
        }; break;