123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #import "GPUImageHistogramGenerator.h"
- NSString *const kGPUImageHistogramGeneratorVertexShaderString = SHADER_STRING
- (
- attribute vec4 position;
- attribute vec4 inputTextureCoordinate;
-
- varying vec2 textureCoordinate;
- varying float height;
-
- void main()
- {
- gl_Position = position;
- textureCoordinate = vec2(inputTextureCoordinate.x, 0.5);
- height = 1.0 - inputTextureCoordinate.y;
- }
- );
- #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
- NSString *const kGPUImageHistogramGeneratorFragmentShaderString = SHADER_STRING
- (
- varying highp vec2 textureCoordinate;
- varying highp float height;
-
- uniform sampler2D inputImageTexture;
- uniform lowp vec4 backgroundColor;
-
- void main()
- {
- lowp vec3 colorChannels = texture2D(inputImageTexture, textureCoordinate).rgb;
- lowp vec4 heightTest = vec4(step(height, colorChannels), 1.0);
- gl_FragColor = mix(backgroundColor, heightTest, heightTest.r + heightTest.g + heightTest.b);
- }
- );
- #else
- NSString *const kGPUImageHistogramGeneratorFragmentShaderString = SHADER_STRING
- (
- varying vec2 textureCoordinate;
- varying float height;
-
- uniform sampler2D inputImageTexture;
- uniform vec4 backgroundColor;
-
- void main()
- {
- vec3 colorChannels = texture2D(inputImageTexture, textureCoordinate).rgb;
- vec4 heightTest = vec4(step(height, colorChannels), 1.0);
- gl_FragColor = mix(backgroundColor, heightTest, heightTest.r + heightTest.g + heightTest.b);
- }
- );
- #endif
- @implementation GPUImageHistogramGenerator
- #pragma mark -
- #pragma mark Initialization and teardown
- - (id)init;
- {
- if (!(self = [super initWithVertexShaderFromString:kGPUImageHistogramGeneratorVertexShaderString fragmentShaderFromString:kGPUImageHistogramGeneratorFragmentShaderString]))
- {
- return nil;
- }
-
- backgroundColorUniform = [filterProgram uniformIndex:@"backgroundColor"];
- [self setBackgroundColorRed:0.0 green:0.0 blue:0.0 alpha:0.0];
-
- return self;
- }
- #pragma mark -
- #pragma mark Accessors
- - (void)setBackgroundColorRed:(GLfloat)redComponent green:(GLfloat)greenComponent blue:(GLfloat)blueComponent alpha:(GLfloat)alphaComponent;
- {
- // GLfloat backgroundColor[4];
- // backgroundColor[0] = redComponent;
- // backgroundColor[1] = greenComponent;
- // backgroundColor[2] = blueComponent;
- // backgroundColor[3] = alphaComponent;
- GPUVector4 backgroundColor = {redComponent, greenComponent, blueComponent, alphaComponent};
-
- [self setVec4:backgroundColor forUniform:backgroundColorUniform program:filterProgram];
- }
- @end
|