lwjgl/src/java/org/lwjgl/test/opengles/QuadRenderer.java

70 lines
1.9 KiB
Java

package org.lwjgl.test.opengles;
import org.lwjgl.BufferUtils;
import org.lwjgl.test.opengles.util.Shader;
import org.lwjgl.test.opengles.util.ShaderProgram;
import org.lwjgl.util.vector.Matrix4f;
import java.nio.FloatBuffer;
import static org.lwjgl.opengles.GLES20.*;
import static org.lwjgl.test.opengles.util.GLMatrix.*;
final class QuadRenderer {
private final Shader vsh;
private final Shader fsh;
private final ShaderProgram program;
private final int uniMVP;
private final Matrix4f p = new Matrix4f();
private final Matrix4f mv = new Matrix4f();
private final Matrix4f mvp = new Matrix4f();
private final FloatBuffer m4fBuffer = BufferUtils.createFloatBuffer(4 * 4);
QuadRenderer() {
vsh = new Shader(GL_VERTEX_SHADER, "uniform highp mat4 MODEL_VIEW_PROJECTION_MATRIX;\n" +
"attribute highp vec2 vPosition;\n" +
"void main(void) {\n" +
"\tgl_Position = MODEL_VIEW_PROJECTION_MATRIX * vec4(vPosition, 0.0, 1.0);\n" +
"}");
fsh = new Shader(GL_FRAGMENT_SHADER, "void main(void) {\n" +
"\tgl_FragColor = vec4(1.0);\n" +
"}");
program = new ShaderProgram(vsh, fsh);
program.enable();
uniMVP = program.getUniformLocation("MODEL_VIEW_PROJECTION_MATRIX");
final int vPosition = program.getAttributeLocation("vPosition");
glVertexAttribPointer(vPosition, 2, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(vPosition);
}
void setMVPUniform() {
// Get Projection and Modelview matrices
glMatrixMode(GL_PROJECTION);
glGetMatrix(p);
glMatrixMode(GL_MODELVIEW);
glGetMatrix(mv);
// Set MVP uniform
Matrix4f.mul(p, mv, mvp);
mvp.store(m4fBuffer);
m4fBuffer.flip();
glUniformMatrix4(uniMVP, false, m4fBuffer);
}
void cleanup() {
program.destroy();
fsh.destroy();
vsh.destroy();
}
}