package de.fau.cs.mad.fly.graphics.shaders;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g3d.Renderable;
import com.badlogic.gdx.graphics.g3d.Shader;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
/**
* Created by tschaei on 21.08.14.
*/
public class FlyNormalShader extends FlyBaseShader {
private String VERTEX_SHADER = "shaders/vertex.glsl";
private String FRAGMENT_SHADER = "shaders/normalmap.fragment.glsl";
private int u_diffuseColor, normalMap;
@Override
public void init() {
createShaderProgram(VERTEX_SHADER, FRAGMENT_SHADER);
super.init();
u_diffuseColor = program.getUniformLocation("u_diffuseColor");
normalMap = program.getUniformLocation("normalMap");
}
@Override
public int compareTo(Shader other) {
return 0;
}
@Override
public void render(Renderable renderable) {
super.setUpBaseUniforms(renderable);
program.setUniformf(u_diffuseColor, ((ColorAttribute) renderable.material.get(ColorAttribute.Diffuse)).color);
// Bind texture
((TextureAttribute) renderable.material.get(TextureAttribute.Normal)).textureDescription.texture.bind(1);
program.setUniformi(normalMap, 1);
renderable.mesh.render(program, renderable.primitiveType, renderable.meshPartOffset, renderable.meshPartSize);
}
@Override
public boolean canRender(Renderable renderable) {
return (renderable.environment.equals(environment) && !renderable.material.has(TextureAttribute.Diffuse) && renderable.material.has(TextureAttribute.Normal));
}
}