package eu.tankernn.gameEngine.renderEngine.water;

import eu.tankernn.gameEngine.renderEngine.shaders.ShaderProgram;
import eu.tankernn.gameEngine.renderEngine.shaders.UniformFloat;
import eu.tankernn.gameEngine.renderEngine.shaders.UniformMatrix;
import eu.tankernn.gameEngine.renderEngine.shaders.UniformSampler;
import eu.tankernn.gameEngine.renderEngine.shaders.UniformVec3;
import eu.tankernn.gameEngine.renderEngine.shaders.UniformViewMatrix;

public class WaterShader extends ShaderProgram {

	private final static String VERTEX_FILE = "/eu/tankernn/gameEngine/renderEngine/water/waterVertex.glsl";
	private final static String FRAGMENT_FILE = "/eu/tankernn/gameEngine/renderEngine/water/waterFragment.glsl";

	protected UniformMatrix modelMatrix = new UniformMatrix("modelMatrix");
	protected UniformViewMatrix viewMatrix = new UniformViewMatrix("viewMatrix");
	protected UniformMatrix projectionMatrix = new UniformMatrix("projectionMatrix");
	protected UniformSampler reflectionTexture = new UniformSampler("reflectionTexture");
	protected UniformSampler refractionTexture = new UniformSampler("refractionTexture");
	protected UniformSampler dudvMap = new UniformSampler("dudvMap");
	protected UniformFloat moveFactor = new UniformFloat("moveFactor");
	protected UniformVec3 cameraPosition = new UniformVec3("cameraPosition");
	protected UniformSampler normalMap = new UniformSampler("normalMap");
	protected UniformSampler depthMap = new UniformSampler("depthMap");

	public WaterShader() {
		super(VERTEX_FILE, FRAGMENT_FILE, "position");
		super.getLightUniformLocations();
		super.storeAllUniformLocations(modelMatrix, viewMatrix, projectionMatrix, reflectionTexture, refractionTexture,
				dudvMap, moveFactor, cameraPosition, normalMap, depthMap);
	}

	public void connectTextureUnits() {
		reflectionTexture.loadTexUnit(0);
		refractionTexture.loadTexUnit(1);
		dudvMap.loadTexUnit(2);
		normalMap.loadTexUnit(3);
		depthMap.loadTexUnit(4);
	}

}