package com.af.experiments.FxCameraApp.shaders;
import static android.opengl.GLES20.glUniform1f;
import static android.opengl.GLES20.glUniformMatrix4fv;
public class GlColorMatrixShader extends GlShader {
private static final String FRAGMENT_SHADER =
"precision mediump float;" +
"varying highp vec2 vTextureCoord;" +
"uniform lowp sampler2D sTexture;" +
"uniform lowp mat4 colorMatrix;" +
"uniform lowp float intensity;" +
"void main() {" +
"lowp vec4 color = texture2D(sTexture, vTextureCoord);" +
"lowp vec4 outputColor = color * colorMatrix;" +
"gl_FragColor = (intensity * outputColor) + ((1.0 - intensity) * color);" +
"}";
private float[] mColorMatrix = new float[]{
1f, 0f, 0f, 0f,
0f, 1f, 0f, 0f,
0f, 0f, 1f, 0f,
0f, 0f, 0f, 1f
};
private float mIntensity = 1.0f;
public GlColorMatrixShader() {
super(DEFAULT_VERTEX_SHADER, FRAGMENT_SHADER);
}
public float[] getColorMatrix() {
return mColorMatrix;
}
public void setColorMatrix(float[] colorMatrix) {
mColorMatrix = colorMatrix;
}
public float getIntensity() {
return mIntensity;
}
public void setIntensity(float intensity) {
mIntensity = intensity;
}
@Override
public void onDraw() {
glUniformMatrix4fv(getHandle("colorMatrix"), 0, false, mColorMatrix, 0);
glUniform1f(getHandle("intensity"), mIntensity);
}
}