變量聲明 (GLES 語法)
precision mediump float;
varying highp vec2 textureCoordinate;
uniform sampler2D inputTexture;
//亮度
uniform lowp float brightness;
//對(duì)比度
uniform lowp float contrast;
//飽和度
uniform lowp float saturation;
// Values from \\\"Graphics Shaders: Theory and Practice\\\" by Bailey and Cunningham
const mediump vec3 luminanceWeighting = vec3(0.2125, 0.7154, 0.0721);
1.亮度調(diào)整
lowp vec4 textureColor = texture2D(inputTexture, textureCoordinate);
gl_FragColor = vec4((textureColor.rgb + vec3(brightness)), textureColor.w);
獲取handle
mBrightnessHandle = GLES20.glGetUniformLocation(mProgramId, "brightness");
賦值 (-1.0 to 1.0, 默認(rèn)為0.0f)
GLES20.glUniform1f(mBrightnessHandle, 0.0f);
2.對(duì)比度
lowp vec4 textureColor = texture2D(inputTexture, textureCoordinate);
gl_FragColor = vec4((textureColor.rgb - vec3(0.5)) * contrast + vec3(0.5), textureColor.w);
獲取handle
mContrastHandle = GLES20.glGetUniformLocation(mProgramId, "contrast");
賦值 ( 0.0 ~ 4.0, 默認(rèn)1.0f)
GLES20.glUniform1f(mContrastHandle, 1.0f);
3.飽和度
lowp vec4 textureColor = texture2D(inputTexture, textureCoordinate);
lowp vec3 greyScaleColor = vec3(dot(contrastColor.rgb, luminanceWeighting));
gl_FragColor = vec4(mix(greyScaleColor, contrastColor.rgb, saturation), textureColor.w);
獲取handle
mSaturationHandle = GLES30.glGetUniformLocation(mProgramId, "saturation");
賦值(0.0 ~ 2.0之間 默認(rèn)1.0f)
GLES20.glUniform1f(mSaturationHandle, mSaturationValue);
如果想一起合并使用同一個(gè)fragment_shader,可以這樣弄
void main()
{
//亮度
lowp vec3 brightnessColor = textureColor.rgb + vec3(brightness);
//對(duì)比度
lowp vec3 contrastColor = (brightnessColor.rgb - vec3(0.5)) * contrast + vec3(0.5);
//飽和度
lowp vec3 greyScaleColor = vec3(dot(contrastColor.rgb, luminanceWeighting));
gl_FragColor = vec4(mix(greyScaleColor, contrastColor.rgb, saturation), textureColor.w);
}