Skip to content

Commit

Permalink
Fixed the Lanczos resampling filter.
Browse files Browse the repository at this point in the history
  • Loading branch information
BradLarson committed Jan 29, 2013
1 parent de6543c commit 7d1f759
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1506,7 +1506,8 @@ - (IBAction)updateFilterFromSlider:(id)sender;
case GPUIMAGE_MOSAIC: [(GPUImageMosaicFilter *)filter setDisplayTileSize:CGSizeMake([(UISlider *)sender value], [(UISlider *)sender value])]; break;
case GPUIMAGE_VIGNETTE: [(GPUImageVignetteFilter *)filter setVignetteEnd:[(UISlider *)sender value]]; break;
case GPUIMAGE_GAUSSIAN: [(GPUImageGaussianBlurFilter *)filter setBlurSize:[(UISlider*)sender value]]; break;
case GPUIMAGE_BILATERAL: [(GPUImageBilateralFilter *)filter setBlurSize:[(UISlider*)sender value]]; break;
// case GPUIMAGE_BILATERAL: [(GPUImageBilateralFilter *)filter setBlurSize:[(UISlider*)sender value]]; break;
case GPUIMAGE_BILATERAL: [(GPUImageBilateralFilter *)filter setDistanceNormalizationFactor:[(UISlider*)sender value]]; break;
case GPUIMAGE_FASTBLUR: [(GPUImageFastBlurFilter *)filter setBlurPasses:round([(UISlider*)sender value])]; break;
// case GPUIMAGE_FASTBLUR: [(GPUImageFastBlurFilter *)filter setBlurSize:[(UISlider*)sender value]]; break;
case GPUIMAGE_OPACITY: [(GPUImageOpacityFilter *)filter setOpacity:[(UISlider *)sender value]]; break;
Expand Down
33 changes: 33 additions & 0 deletions framework/Source/GPUImageLanczosResamplingFilter.m
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,37 @@ - (void)setupFilterForSize:(CGSize)filterFrameSize;
});
}

// The first pass (vertical) of the resampling needs to be shrunk in only one dimension so that the remaining shrinkage can be performed in the horizonal pass
- (void)setFilterFBO;
{
CGSize currentFBOSize = [self sizeOfFBO];
if (GPUImageRotationSwapsWidthAndHeight(inputRotation))
{
currentFBOSize.height = self.originalImageSize.height;
}
else
{
currentFBOSize.width = self.originalImageSize.width;
}

if (!filterFramebuffer)
{
if ([GPUImageOpenGLESContext supportsFastTextureUpload] && preparedToCaptureImage)
{
preparedToCaptureImage = NO;
[super createFilterFBOofSize:currentFBOSize];
preparedToCaptureImage = YES;
}
else
{
[super createFilterFBOofSize:currentFBOSize];
}
[self setupFilterForSize:currentFBOSize];
}

glBindFramebuffer(GL_FRAMEBUFFER, filterFramebuffer);

glViewport(0, 0, (int)currentFBOSize.width, (int)currentFBOSize.height);
}

@end
7 changes: 2 additions & 5 deletions framework/Source/GPUImageTwoPassFilter.m
Original file line number Diff line number Diff line change
Expand Up @@ -271,9 +271,10 @@ - (void)destroyFilterFBO;

- (void)setFilterFBO;
{
CGSize currentFBOSize = [self sizeOfFBO];

if (!filterFramebuffer)
{
CGSize currentFBOSize = [self sizeOfFBO];
if ([GPUImageOpenGLESContext supportsFastTextureUpload] && preparedToCaptureImage)
{
preparedToCaptureImage = NO;
Expand All @@ -289,7 +290,6 @@ - (void)setFilterFBO;

glBindFramebuffer(GL_FRAMEBUFFER, filterFramebuffer);

CGSize currentFBOSize = [self sizeOfFBO];
glViewport(0, 0, (int)currentFBOSize.width, (int)currentFBOSize.height);
}

Expand All @@ -305,9 +305,6 @@ - (void)setSecondFilterFBO;
glBindFramebuffer(GL_FRAMEBUFFER, secondFilterFramebuffer);
CGSize currentFBOSize = [self sizeOfFBO];
glViewport(0, 0, (int)currentFBOSize.width, (int)currentFBOSize.height);

// CGSize currentFBOSize = [self sizeOfFBO];
// glViewport(0, 0, (int)currentFBOSize.width, (int)currentFBOSize.height);
}

- (void)setOutputFBO;
Expand Down

0 comments on commit 7d1f759

Please sign in to comment.