mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-18 03:20:09 +00:00
68 lines
2.2 KiB
Objective-C
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
|