70 lines
1.9 KiB
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();
|
|
}
|
|
|
|
} |