package org.goko.tools.viewer.jogl.utils.render.internal; import javax.media.opengl.GL3; import javax.vecmath.Color3f; import org.goko.core.common.exception.GkException; import org.goko.tools.viewer.jogl.shaders.EnumGokoShaderProgram; import org.goko.tools.viewer.jogl.shaders.ShaderLoader; import org.goko.tools.viewer.jogl.utils.material.Material; public abstract class AbstractShadedRenderer extends AbstractVboJoglRenderer{ private Material material; protected AbstractShadedRenderer(int renderPrimitive, int usedBuffers) { super(renderPrimitive, usedBuffers); } @Override protected int loadShaderProgram(GL3 gl) throws GkException { return ShaderLoader.loadShader(gl, EnumGokoShaderProgram.SHADED_SHADER); } /** (inheritDoc) * @see org.goko.tools.viewer.jogl.utils.render.internal.AbstractVboJoglRenderer#updateShaderData(javax.media.opengl.GL3) */ @Override protected void updateShaderData(GL3 gl) throws GkException { super.updateShaderData(gl); int shaderProgram = getShaderProgram(); int ambient = gl.glGetUniformLocation(shaderProgram, "material.ambient"); if(ambient >= 0){ Color3f ambientColor = material.getAmbientColor(); gl.glUniform3fv(ambient, 1, new float[]{ambientColor.x, ambientColor.y, ambientColor.z},0); } int diffuse = gl.glGetUniformLocation(shaderProgram, "material.diffuse"); if(diffuse >= 0){ Color3f diffuseColor = material.getAmbientColor(); gl.glUniform3fv(diffuse, 1, new float[]{diffuseColor.x, diffuseColor.y, diffuseColor.z},0); } int specular = gl.glGetUniformLocation(shaderProgram, "material.specular"); if(specular >= 0){ Color3f specularColor = material.getAmbientColor(); gl.glUniform3fv(specular, 1, new float[]{specularColor.x, specularColor.y, specularColor.z},0); } } /** * @return the material */ public Material getMaterial() { return material; } /** * @param material the material to set */ public void setMaterial(Material material) { this.material = material; } }