Package org.lwjgl.test.opengles

Source Code of org.lwjgl.test.opengles.QuadRenderer

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();
  }

}
TOP

Related Classes of org.lwjgl.test.opengles.QuadRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.