package org.osm2world.core.target.jogl; import java.nio.FloatBuffer; import javax.media.opengl.GL3; import com.jogamp.opengl.math.FloatUtil; import com.jogamp.opengl.util.PMVMatrix; /** * Shader for {@link NonAreaPrimitive}. */ public class NonAreaShader extends AbstractShader { private int modelViewProjectionMatrixID; private int vertexPositionID; private int vertexColorID; public NonAreaShader(GL3 gl) { super(gl, "/shaders/nonarea"); // get indices of named attributes vertexPositionID = gl.glGetAttribLocation(shaderProgram, "VertexPosition"); vertexColorID = gl.glGetAttribLocation(shaderProgram, "VertexColor"); // get indices of uniform variables modelViewProjectionMatrixID = gl.glGetUniformLocation(shaderProgram, "ModelViewProjectionMatrix"); this.validateShader(); } /** * Send uniform matrices "ProjectionMatrix, ModelViewMatrix and ModelViewProjectionMatrix" to vertex shader * @param pmvMatrix the PMVMatrix containing all matrices */ public void setPMVMatrix(PMVMatrix pmvMatrix) { FloatBuffer pmvMat = FloatBuffer.allocate(16); FloatUtil.multMatrixf(pmvMatrix.glGetPMatrixf(), pmvMatrix.glGetMvMatrixf(), pmvMat); gl.glUniformMatrix4fv(this.getModelViewProjectionMatrixID(), 1, false, pmvMat); } /** * Returns the id to use to bind the vertex position attribute. */ public int getVertexPositionID() { return vertexPositionID; } /** * Returns the id to use to bind the vertex color attribute. */ public int getVertexColorID() { return vertexColorID; } public int getModelViewProjectionMatrixID() { return modelViewProjectionMatrixID; } }