Advertisement
Guest User

VBO

a guest
Nov 24th, 2013
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.49 KB | None | 0 0
  1. public class VBO {
  2.  
  3.     public VBO(Vertex[] vertices, int[] indices, float[] colors, int usage, BasicShader shader){
  4.     //3 = x, y and z, don't know if you can only use x and y
  5.     FloatBuffer verticesBuffer = BufferUtils.createFloatBuffer(vertices.length * 4);
  6.     for(int i = 0; i < vertices.length; i++){
  7.         verticesBuffer.put(new float[]{
  8.             vertices[i].getPos().getX(),
  9.             vertices[i].getPos().getY(),
  10.             0f, 1f, //z, w
  11.         });
  12.     }
  13.     verticesBuffer.flip();
  14.  
  15.     vboPointer = GL15.glGenBuffers();
  16.     GL30.glBindVertexArray(vboPointer);
  17.     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboPointer);
  18.     GL15.glBufferData(GL15.GL_ARRAY_BUFFER, verticesBuffer, usage);
  19.     GL20.glVertexAttribPointer(0, 4, GL11.GL_FLOAT, false, 0, 0);
  20.     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
  21.  
  22.     //TODO: REMOVE THIS
  23.     FloatBuffer colorBuffer = BufferUtils.createFloatBuffer(colors.length);
  24.     colorBuffer.put(colors);
  25.     colorBuffer.flip();
  26.  
  27.     colorPointer = GL15.glGenBuffers();
  28.     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, colorPointer);
  29.     GL15.glBufferData(GL15.GL_ARRAY_BUFFER, colorBuffer, usage);
  30.     GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 0, 0);
  31.     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
  32.  
  33.     this.shader = shader;
  34.     GL30.glBindVertexArray(0);
  35.  
  36.  
  37.     indicesCount = indices.length;
  38.     IntBuffer indicesBuffer = BufferUtils.createIntBuffer(indicesCount);
  39.     indicesBuffer.put(indices);
  40.     indicesBuffer.flip();
  41.  
  42.     iboPointer = GL15.glGenBuffers();
  43.     GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, iboPointer);
  44.     GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, usage);
  45.     GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
  46.  
  47.  
  48.     }
  49.  
  50.     private int vboPointer;
  51.     private int iboPointer;
  52.     private int colorPointer;
  53.     private int indicesCount = 0;
  54.     private BasicShader shader;
  55.  
  56.     public void render(Renderer renderer){
  57.     shader.useProgram();
  58.  
  59.     GL30.glBindVertexArray(vboPointer);
  60.     GL20.glEnableVertexAttribArray(0);
  61.     GL20.glEnableVertexAttribArray(1);
  62.  
  63.     GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, iboPointer);
  64.  
  65.     GL11.glDrawElements(GL11.GL_TRIANGLES, indicesCount, GL11.GL_UNSIGNED_INT, 0);
  66.  
  67.     GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
  68.     GL20.glDisableVertexAttribArray(0);
  69.     GL20.glDisableVertexAttribArray(1);
  70.     GL30.glBindVertexArray(0);
  71.     shader.delselectProgram();
  72.     }
  73.  
  74.     public int getVerticesPointer(){
  75.     return vboPointer;
  76.     }
  77.  
  78.     public int getIndicesPointer(){
  79.     return iboPointer;
  80.     }
  81.  
  82.     public int getColorPointer(){
  83.     return colorPointer;
  84.     }
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement