Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.06 KB | None | 0 0
  1. package com.example.niclas.rouge_like;
  2.  
  3. import android.opengl.GLES31;
  4.  
  5. import java.nio.ByteBuffer;
  6. import java.nio.ByteOrder;
  7. import java.nio.FloatBuffer;
  8. import java.nio.ShortBuffer;
  9.  
  10. import static android.opengl.GLES20.GL_TRIANGLES;
  11. import static android.opengl.GLES32.GL_QUADS;
  12.  
  13. public class Square {
  14.  
  15.     private FloatBuffer vertexBuffer;
  16.     private ShortBuffer drawListBuffer;
  17.  
  18.     private final int mProgram;
  19.     private int mPositionHandle;
  20.     private int mColorHandle;
  21.  
  22.     private final String vertexShaderCode =
  23.             "attribute vec4 vPosition;" +
  24.                     "void main() {" +
  25.                     "  gl_Position = vPosition;" +
  26.                     "}";
  27.  
  28.     private final String fragmentShaderCode =
  29.             "precision mediump float;" +
  30.                     "uniform vec4 vColor;" +
  31.                     "void main() {" +
  32.                     "  gl_FragColor = vColor;" +
  33.                     "}";
  34.  
  35.  
  36.     static final int COORDS_PER_VERTEX = 3;
  37.     static float squareCoords[] = {
  38.             -0.5f,  0.5f, 0.0f,   // top left
  39.             -0.5f, -0.5f, 0.0f,   // bottom left
  40.             0.5f, -0.5f, 0.0f,   // bottom right
  41.             0.5f,  0.5f, 0.0f }; // top right
  42.  
  43.     private short drawOrder[] ={ 0, 1, 2, 0, 2, 3};
  44.  
  45.     //  private final int vertexCount = squareCoords.length / COORDS_PER_VERTEX;
  46.     private final int vertexStride = COORDS_PER_VERTEX * 4; // 4 bytes per vertex
  47.     float color[] = {100f,0.0f,0.0f,1.0f};
  48.  
  49.     public Square() {
  50.  
  51.         ByteBuffer bb = ByteBuffer.allocateDirect(squareCoords.length*4);
  52.         bb.order(ByteOrder.nativeOrder());
  53.         vertexBuffer = bb.asFloatBuffer();
  54.         vertexBuffer.put(squareCoords);
  55.         vertexBuffer.position(0);
  56.  
  57.         ByteBuffer dlb = ByteBuffer.allocateDirect(drawOrder.length*2);
  58.         dlb.order(ByteOrder.nativeOrder());
  59.         drawListBuffer = dlb.asShortBuffer();
  60.         drawListBuffer.put(drawOrder);
  61.         drawListBuffer.position(0);
  62.  
  63.         int vertexShader = MyGLRenderer.loadShader(GLES31.GL_VERTEX_SHADER, vertexShaderCode);
  64.         int fragmentShader = MyGLRenderer.loadShader(GLES31.GL_FRAGMENT_SHADER, fragmentShaderCode);
  65.  
  66.         mProgram = GLES31.glCreateProgram();
  67.         GLES31.glAttachShader(mProgram, vertexShader);
  68.         GLES31.glAttachShader(mProgram, fragmentShader);
  69.         GLES31.glLinkProgram(mProgram);
  70.  
  71.     }
  72.  
  73.  
  74.  
  75.     public void draw(){
  76.  
  77.         GLES31.glUseProgram(mProgram);
  78.         mPositionHandle = GLES31.glGetAttribLocation(mProgram, "vPosition");
  79.         GLES31.glEnableVertexAttribArray(mPositionHandle);
  80.         GLES31.glVertexAttribPointer(mPositionHandle,COORDS_PER_VERTEX,GLES31.GL_FLOAT,false,vertexStride,vertexBuffer);
  81.         GLES31.glDrawElements(GLES31.GL_TRIANGLES,drawOrder.length,GLES31.GL_UNSIGNED_SHORT,drawListBuffer);
  82.         //  GLES31.glDrawArrays(GL_TRIANGLES,0,6);
  83.  
  84.         mColorHandle = GLES31.glGetUniformLocation(mProgram, "vColor");
  85.         GLES31.glUniform4fv(mColorHandle,1,color, 0);
  86.  
  87.  
  88.  
  89.  
  90.  
  91.         GLES31.glDisableVertexAttribArray(mPositionHandle);
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement