package com.af.experiments.FxCameraApp.shaders;
import static android.opengl.GLES20.glUniform1f;
public class GlShiTomasiFeatureDetectionShader extends GlShader {
private static final String FRAGMENT_SHADER =
"precision mediump float;\n" + // 演算精度を指定します。
"varying highp vec2 vTextureCoord;" +
"uniform lowp sampler2D sTexture;" +
"uniform lowp float sensitivity;" +
"void main() {" +
"mediump vec3 derivativeElements = texture2D(sTexture, vTextureCoord).rgb;" +
"mediump float derivativeDifference = derivativeElements.x - derivativeElements.y;" +
"mediump float zElement = (derivativeElements.z * 2.0) - 1.0;" +
// R = Ix^2 + Iy^2 - sqrt( (Ix^2 - Iy^2)^2 + 4 * Ixy * Ixy)
"mediump float cornerness = derivativeElements.x + derivativeElements.y - sqrt(derivativeDifference * derivativeDifference + 4.0 * zElement * zElement);" +
"gl_FragColor = vec4(vec3(cornerness * sensitivity), 1.0);" +
"}";
private float mSensitivity = 1.5f;
public GlShiTomasiFeatureDetectionShader() {
super(DEFAULT_VERTEX_SHADER, FRAGMENT_SHADER);
}
public float getSensitivity() {
return mSensitivity;
}
public void setSensitivity(final float sensitivity) {
mSensitivity = sensitivity;
}
@Override
public void onDraw() {
glUniform1f(getHandle("sensitivity"), mSensitivity);
}
}