Swiftgram/LegacyComponents/PGPhotoLookupFilterPass.m
2017-07-28 16:50:06 +03:00

68 lines
2.2 KiB
Objective-C

#import "PGPhotoLookupFilterPass.h"
#import "GPUImageTwoInputFilter.h"
#import "PGPhotoEditorPicture.h"
NSString *const PGPhotoLookupFilterFragmentShaderString = PGShaderString(
uniform sampler2D inputImageTexture2;
vec4 filter(vec4 texel)
{
vec3 index = texel.rgb * 15.0;
vec3 frac = fract(index);
vec3 i1 = floor(index);
vec3 i2 = clamp(i1 + 1.0, 0.0, 15.0);
const vec2 offset = vec2(0.001953125, 0.03125); // vec2(0.5 / 256.0, 0.5 / 16.0)
vec3 color1 = i1 * 0.0625; // 1.0 * 0.0625 = 1.0 / 16.0;
color1.r = color1.r * 0.0625;
vec3 color2 = i2 * 0.0625;
color2.r = color2.r * 0.0625;
vec2 p000 = vec2(color1.r + color1.b, color1.g);
vec3 c000 = texture2D(inputImageTexture2, offset + p000).rgb;
vec2 p001 = vec2(color1.r + color2.b, color1.g);
vec3 c001 = texture2D(inputImageTexture2, offset + p001).rgb;
vec2 p010 = vec2(color1.r + color1.b, color2.g);
vec3 c010 = texture2D(inputImageTexture2, offset + p010).rgb;
vec2 p011 = vec2(color1.r + color2.b, color2.g);
vec3 c011 = texture2D(inputImageTexture2, offset + p011).rgb;
vec2 p100 = vec2(color2.r + color1.b, color1.g);
vec3 c100 = texture2D(inputImageTexture2, offset + p100).rgb;
vec2 p101 = vec2(color2.r + color2.b, color1.g);
vec3 c101 = texture2D(inputImageTexture2, offset + p101).rgb;
vec2 p110 = vec2(color2.r + color1.b, color2.g);
vec3 c110 = texture2D(inputImageTexture2, offset + p110).rgb;
vec2 p111 = vec2(color2.r + color2.b, color2.g);
vec3 c111 = texture2D(inputImageTexture2, offset + p111).rgb;
vec3 c1 = mix(c000, c100, frac.r);
vec3 c2 = mix(c010, c110, frac.r);
vec3 c3 = mix(c001, c101, frac.r);
vec3 c4 = mix(c011, c111, frac.r);
vec3 c1_c2 = mix(c1, c2, frac.g);
vec3 c3_c4 = mix(c3, c4, frac.g);
return vec4(clamp(mix(c1_c2, c3_c4, frac.b), 0.0, 1.0), texel.a);
}
);
@implementation PGPhotoLookupFilterPass
- (instancetype)initWithLookupImage:(UIImage *)lookupImage
{
return [super initWithShaderString:PGPhotoLookupFilterFragmentShaderString textureImages:@[ lookupImage ]];
}
@end