package se.embargo.onebit.shader;

import se.embargo.core.graphics.ShaderProgram;
import se.embargo.onebit.R;
import android.hardware.Camera;
import android.opengl.GLES20;
import android.util.Log;

public class AtkinsonShader implements IRenderStage {
    public static final int SHADER_SOURCE_ID = R.raw.image_atkinson_shader;
	
	private static final String TAG = "AtkinsonShader";
    private static final int TARGET_WIDTH = 480;
    
    private ShaderProgram _program;
    private int _targetSizeLocation;
    private int[] _targetSize;

	public AtkinsonShader(ShaderProgram program, Camera.Size previewSize) {
		_program = program;
		
        // Find handles to shader parameters
	    _targetSizeLocation = _program.getUniformLocation("uTargetSize");
	    
        // Scale the preview frames to match TARGET_WIDTH
        _targetSize = new int[] {TARGET_WIDTH, (int)((float)TARGET_WIDTH * ((float)previewSize.height / previewSize.width))};
	}
	
	@Override
	public void draw() {
        // Transfer the output image size
        GLES20.glUniform2f(_targetSizeLocation, _targetSize[0], _targetSize[1]);
        checkGlError("glUniform2f sTargetSize");
	}

	private void checkGlError(String op) {
        int error;
        while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
            Log.e(TAG, op + ": glError " + error);
            throw new RuntimeException(op + ": glError " + error);
        }
    }
}