parent
							
								
									605e60e744
								
							
						
					
					
						commit
						9d0cb83334
					
				| @ -0,0 +1,36 @@ | ||||
| package com.frank.camerafilter.filter.advance; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.opengl.GLES30; | ||||
| 
 | ||||
| import com.frank.camerafilter.R; | ||||
| import com.frank.camerafilter.filter.BaseFilter; | ||||
| import com.frank.camerafilter.util.OpenGLUtil; | ||||
| 
 | ||||
| public class BeautyWhiteBalanceFilter extends BaseFilter { | ||||
| 
 | ||||
|     private int tint; | ||||
|     private int temperature; | ||||
| 
 | ||||
|     public BeautyWhiteBalanceFilter(Context context) { | ||||
|         super(NORMAL_VERTEX_SHADER, OpenGLUtil.readShaderFromSource(context, R.raw.whitebalance)); | ||||
|     } | ||||
| 
 | ||||
|     protected void onInit() { | ||||
|         super.onInit(); | ||||
|         tint = GLES30.glGetUniformLocation(getProgramId(), "tint"); | ||||
|         temperature = GLES30.glGetUniformLocation(getProgramId(), "temperature"); | ||||
|     } | ||||
| 
 | ||||
|     protected void onInitialized() { | ||||
|         super.onInitialized(); | ||||
|         setFloat(tint, 0.5f); | ||||
|         setFloat(temperature, 0.3f); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onInputSizeChanged(int width, int height) { | ||||
|         super.onInputSizeChanged(width, height); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,26 @@ | ||||
| uniform sampler2D inputImageTexture; | ||||
| varying highp vec2 textureCoordinate; | ||||
| 
 | ||||
| uniform lowp float temperature; | ||||
| uniform lowp float tint; | ||||
| 
 | ||||
| const lowp vec3 warmFilter = vec3(0.93, 0.54, 0.0); | ||||
| 
 | ||||
| const mediump mat3 RGBtoYIQ = mat3(0.299, 0.587, 0.114, 0.596, -0.274, -0.322, 0.212, -0.523, 0.311); | ||||
| const mediump mat3 YIQtoRGB = mat3(1.0, 0.956, 0.621, 1.0, -0.272, -0.647, 1.0, -1.105, 1.702); | ||||
| 
 | ||||
| void main() | ||||
| { | ||||
| 	lowp vec4 source = texture2D(inputImageTexture, textureCoordinate); | ||||
| 
 | ||||
| 	mediump vec3 yiq = RGBtoYIQ * source.rgb; //adjusting tint | ||||
| 	yiq.b = clamp(yiq.b + tint*0.5226*0.1, -0.5226, 0.5226); | ||||
| 	lowp vec3 rgb = YIQtoRGB * yiq; | ||||
| 
 | ||||
| 	lowp vec3 processed = vec3( | ||||
| 	(rgb.r < 0.5 ? (2.0 * rgb.r * warmFilter.r) : (1.0 - 2.0 * (1.0 - rgb.r) * (1.0 - warmFilter.r))), //adjusting temperature | ||||
| 	(rgb.g < 0.5 ? (2.0 * rgb.g * warmFilter.g) : (1.0 - 2.0 * (1.0 - rgb.g) * (1.0 - warmFilter.g))), | ||||
| 	(rgb.b < 0.5 ? (2.0 * rgb.b * warmFilter.b) : (1.0 - 2.0 * (1.0 - rgb.b) * (1.0 - warmFilter.b)))); | ||||
| 
 | ||||
| 	gl_FragColor = vec4(mix(rgb, processed, temperature), source.a); | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue