Example usage for org.lwjgl.opengl GL15 glBufferData

List of usage examples for org.lwjgl.opengl GL15 glBufferData

Introduction

In this page you can find the example usage for org.lwjgl.opengl GL15 glBufferData.

Prototype

public static void glBufferData(@NativeType("GLenum") int target, @NativeType("void const *") double[] data,
        @NativeType("GLenum") int usage) 

Source Link

Document

Array version of: #glBufferData BufferData

Usage

From source file:uk.co.ifs_studios.engine.geometry.BasicDrawElement.java

License:Open Source License

/**
 * Set colors to DrawElement./*from   w ww .j  a  va  2  s  . co  m*/
 * 
 * @param colors
 *            - Colors.
 */
public void setColors(Color[] colors) {
    float[] colorValues = new float[colors.length * 4];

    int colorIndex = 0;
    for (int i = 0; i < colorValues.length; i += 4) {
        colorValues[i + 0] = colors[colorIndex].getRed();
        colorValues[i + 1] = colors[colorIndex].getGreen();
        colorValues[i + 2] = colors[colorIndex].getBlue();
        colorValues[i + 3] = colors[colorIndex].getAlpha();

        colorIndex++;
    }

    FloatBuffer colorsBuffer = BufferUtils.createFloatBuffer(colorValues.length);
    colorsBuffer.put(colorValues);
    colorsBuffer.flip();

    GL30.glBindVertexArray(this.vao);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, this.cbo);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, colorsBuffer, GL15.GL_STREAM_DRAW);
    GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 0, 0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    GL30.glBindVertexArray(0);
}

From source file:uk.co.ifs_studios.engine.geometry.BasicDrawElement.java

License:Open Source License

/**
 * Set indices to DrawElement./* ww w.  j a v  a 2 s . c o m*/
 * 
 * @param indices
 *            - Indices.
 */
public void setIndices(byte[] indices) {
    this.indiceCount = indices.length;

    ByteBuffer indiciesBuffer = BufferUtils.createByteBuffer(this.indiceCount);
    indiciesBuffer.put(indices);
    indiciesBuffer.flip();

    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, this.ibo);

    GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indiciesBuffer, GL15.GL_STATIC_DRAW);

    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
}

From source file:vertigo.graphics.lwjgl.LWJGL_Renderer.java

License:Open Source License

/**
  * Process the BO.//from  w  w w .  j av  a 2 s  .com
  * @param obj shape
  */
private void initVBO(Shape obj) {
    int nbBO = obj.getGeometry().getNumberBO(); //return 2 for the cube (1 vbo + 1 ibo)
    ib = BufferTools.newIntBuffer(nbBO);
    GL15.glGenBuffers(ib);
    int i = 0;
    for (BO bo : obj.getGeometry().getAllBO()) {
        int boHandle = ib.get(i);
        bo.setHandle(boHandle);
        if (bo instanceof IBO) {
            isIndexed = true;
            ibo = (IBO) bo;
            GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, boHandle);
            GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, ibo.getIntBuffer(), GL15.GL_STATIC_DRAW);
            GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
        } else {
            VBO vbo = (VBO) bo;
            //if (!vbo.getBuffer().isLoaded() ) {
            GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, boHandle);
            GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vbo.getFloatBuffer(), GL15.GL_STATIC_DRAW);
            GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
            //}
        }
        i++;
    }
    GL15.glDeleteBuffers(ib);
}

From source file:view.renderer.GridRenderer.java

public void draw() {

    GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vID);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vB, GL15.GL_STATIC_DRAW);
    GL11.glVertexPointer(2, GL11.GL_INT, 2 * 4, 0L);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, cID);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, cB, GL15.GL_STATIC_DRAW);
    GL11.glColorPointer(3, GL11.GL_FLOAT, 3 * 4, 0L);

    GL11.glDrawArrays(GL11.GL_QUADS, 0, (linesX + linesY) * 4);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    GL11.glDisableClientState(GL11.GL_COLOR_ARRAY);
    GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
}

From source file:voxels.Mesh.java

License:Open Source License

private void createMesh() {
    // We'll define our quad using 4 vertices of the custom 'TexturedVertex' class
    VertexData v0 = new VertexData();
    v0.setXYZ(-0.5f, 0.5f, 0.5f);/*  w  w  w  .j a  v a 2s  . c  o m*/
    v0.setRGB(1, 0, 0);
    v0.setST(0, 0);
    VertexData v1 = new VertexData();
    v1.setXYZ(-0.5f, -0.5f, 0.5f);
    v1.setRGB(0, 1, 0);
    v1.setST(0, 1);
    VertexData v2 = new VertexData();
    v2.setXYZ(0.5f, -0.5f, 0.5f);
    v2.setRGB(0, 0, 1);
    v2.setST(1, 1);
    VertexData v3 = new VertexData();
    v3.setXYZ(0.5f, 0.5f, 0.5f);
    v3.setRGB(1, 1, 1);
    v3.setST(1, 0);

    VertexData v4 = new VertexData();
    v4.setXYZ(-0.5f, 0.5f, -0.5f);
    v4.setRGB(1, 0, 0);
    v4.setST(0, 0);
    VertexData v5 = new VertexData();
    v5.setXYZ(-0.5f, -0.5f, -0.5f);
    v5.setRGB(0, 1, 0);
    v5.setST(0, 1);
    VertexData v6 = new VertexData();
    v6.setXYZ(-0.5f, -0.5f, 0.5f);
    v6.setRGB(0, 0, 1);
    v6.setST(1, 1);
    VertexData v7 = new VertexData();
    v7.setXYZ(-0.5f, 0.5f, 0.5f);
    v7.setRGB(1, 1, 1);
    v7.setST(1, 0);

    VertexData v8 = new VertexData();
    v8.setXYZ(-0.5f, 0.5f, -0.5f);
    v8.setRGB(1, 0, 0);
    v8.setST(0, 0);
    VertexData v9 = new VertexData();
    v9.setXYZ(-0.5f, 0.5f, 0.5f);
    v9.setRGB(0, 1, 0);
    v9.setST(0, 1);
    VertexData v10 = new VertexData();
    v10.setXYZ(0.5f, 0.5f, 0.5f);
    v10.setRGB(0, 0, 1);
    v10.setST(1, 1);
    VertexData v11 = new VertexData();
    v11.setXYZ(0.5f, 0.5f, -0.5f);
    v11.setRGB(1, 1, 1);
    v11.setST(1, 0);

    VertexData v12 = new VertexData();
    v12.setXYZ(0.5f, -0.5f, 0.5f);
    v12.setRGB(1, 0, 0);
    v12.setST(0, 0);
    VertexData v13 = new VertexData();
    v13.setXYZ(-0.5f, -0.5f, 0.5f);
    v13.setRGB(0, 1, 0);
    v13.setST(0, 1);
    VertexData v14 = new VertexData();
    v14.setXYZ(-0.5f, -0.5f, -0.5f);
    v14.setRGB(0, 0, 1);
    v14.setST(1, 1);
    VertexData v15 = new VertexData();
    v15.setXYZ(0.5f, -0.5f, -0.5f);
    v15.setRGB(1, 1, 1);
    v15.setST(1, 0);

    VertexData v16 = new VertexData();
    v16.setXYZ(0.5f, -0.5f, -0.5f);
    v16.setRGB(1, 0, 0);
    v16.setST(0, 0);
    VertexData v17 = new VertexData();
    v17.setXYZ(-0.5f, -0.5f, -0.5f);
    v17.setRGB(0, 1, 0);
    v17.setST(0, 1);
    VertexData v18 = new VertexData();
    v18.setXYZ(-0.5f, 0.5f, -0.5f);
    v18.setRGB(0, 0, 1);
    v18.setST(1, 1);
    VertexData v19 = new VertexData();
    v19.setXYZ(0.5f, 0.5f, -0.5f);
    v19.setRGB(1, 1, 1);
    v19.setST(1, 0);

    VertexData v20 = new VertexData();
    v20.setXYZ(0.5f, -0.5f, 0.5f);
    v20.setRGB(1, 0, 0);
    v20.setST(0, 0);
    VertexData v21 = new VertexData();
    v21.setXYZ(0.5f, -0.5f, -0.5f);
    v21.setRGB(0, 1, 0);
    v21.setST(0, 1);
    VertexData v22 = new VertexData();
    v22.setXYZ(0.5f, 0.5f, -0.5f);
    v22.setRGB(0, 0, 1);
    v22.setST(1, 1);
    VertexData v23 = new VertexData();
    v23.setXYZ(0.5f, 0.5f, 0.5f);
    v23.setRGB(1, 1, 1);
    v23.setST(1, 0);

    vertices = new VertexData[] { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16,
            v17, v18, v19, v20, v21, v22, v23 };

    // Put each 'Vertex' in one FloatBuffer
    verticesByteBuffer = BufferUtils.createByteBuffer(vertices.length * VertexData.stride);
    FloatBuffer verticesFloatBuffer = verticesByteBuffer.asFloatBuffer();
    for (VertexData vertice : vertices) {
        // Add position, color and texture floats to the buffer
        verticesFloatBuffer.put(vertice.getElements());
    }
    verticesFloatBuffer.flip();

    // OpenGL expects to draw vertices in counter clockwise order by default
    short[] indices = new short[6 * vertices.length / 4];
    for (short i = 0; i < indices.length / 6; i++) {
        // 0, 1, 2, 2, 3, 0,4, 5 , 0, 5, 1, 0,  1, 5, 2, 5, 6, 2,  3, 0, 7, 0, 2, 7,  8, 6, 4, 6, 5, 4,  2, 3, 8, 3, 6, 8
        indices[i * 6 + 0] = (short) (0 + 4 * i);
        indices[i * 6 + 1] = (short) (1 + 4 * i);
        indices[i * 6 + 2] = (short) (2 + 4 * i);
        indices[i * 6 + 3] = (short) (2 + 4 * i);
        indices[i * 6 + 4] = (short) (3 + 4 * i);
        indices[i * 6 + 5] = (short) (0 + 4 * i);
    }

    //indices = new byte[]{0, 1, 2, 2, 3, 0,4, 5 , 0, 5, 1, 0,  1, 5, 2, 5, 6, 2,  3, 0, 7, 0, 2, 7,  8, 6, 4, 6, 5, 4,  2, 3, 8, 3, 6, 8};
    vertices = null;

    indicesCount = indices.length;
    ShortBuffer indicesBuffer = BufferUtils.createShortBuffer(indicesCount);
    indicesBuffer.put(indices);
    indicesBuffer.flip();

    // Create a new Vertex Array Object in memory and select it (bind)
    vaoId = GL30.glGenVertexArrays();
    GL30.glBindVertexArray(vaoId);

    // Create a new Vertex Buffer Object in memory and select it (bind)
    vboId = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, verticesFloatBuffer, GL15.GL_STREAM_DRAW);

    // Put the position coordinates in attribute list 0
    GL20.glVertexAttribPointer(0, VertexData.positionElementCount, GL11.GL_FLOAT, false, VertexData.stride,
            VertexData.positionByteOffset);
    // Put the color components in attribute list 1
    GL20.glVertexAttribPointer(1, VertexData.colorElementCount, GL11.GL_FLOAT, false, VertexData.stride,
            VertexData.colorByteOffset);
    // Put the texture coordinates in attribute list 2
    GL20.glVertexAttribPointer(2, VertexData.textureElementCount, GL11.GL_FLOAT, false, VertexData.stride,
            VertexData.textureByteOffset);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    // Deselect (bind to 0) the VAO
    GL30.glBindVertexArray(0);

    // Create a new VBO for the indices and select it (bind) - INDICES
    vboiId = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboiId);
    GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL15.GL_STATIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

}

From source file:voxicity.ChunkNode.java

License:Open Source License

public void clean() {
    last_update = Time.get_time_ms();

    vert_buf = GL15.glGenBuffers();//from  w  w w.  ja  va2 s  .  co m
    tex_buf = GL15.glGenBuffers();

    if (shader_prog == 0)
        create_shader_prog();

    int offset = 0;

    verts.clear();
    tex_coords.clear();
    batches.clear();

    Map<Integer, IntBuffer> id_ind = new HashMap<Integer, IntBuffer>();

    BlockChunkLoc loc = new BlockChunkLoc(0, 0, 0, chunk);

    // Iterate through all blocks in the chunk
    for (int i = 0; i < Constants.Chunk.side_length; i++)
        for (int j = 0; j < Constants.Chunk.side_length; j++)
            for (int k = 0; k < Constants.Chunk.side_length; k++) {
                // Get block id
                int id = chunk.get_block(i, j, k);

                // If air, do nothing, next block
                if (id != Constants.Blocks.air) {
                    loc.x = i;
                    loc.y = j;
                    loc.z = k;

                    Block b = Blocks.get(id);

                    // If culled, do nothing, next block
                    if (!cull(loc) && !chunk_edge_cull(loc)) {
                        // Get the vertices for this block and put them in the verts buffer
                        verts.put(Coord.offset_coords(b.vertices(),
                                new Vector3f(pos.x + loc.x, pos.y + loc.y, pos.z + loc.z)));

                        // Get the texture coords for this block and put them in the tex_coords buffer
                        tex_coords.put(b.texture_coords());

                        // Look up the texture for these vertices
                        int tex_id = TextureManager.get_texture(b.texture_string());

                        // Look up the index buffer for this texture and create it if needed
                        if (!id_ind.containsKey(tex_id))
                            id_ind.put(tex_id, BufferUtils.createIntBuffer(24 * Constants.Chunk.block_number));

                        // Get the index buffer for this texture
                        IntBuffer ind_buf = id_ind.get(tex_id);

                        // Get the indices for this block's vertices and put them in the ind_buf buffer after offsetting them
                        IntBuffer block_indices = b.indices();
                        while (block_indices.hasRemaining())
                            ind_buf.put(block_indices.get() + offset);

                        // Increase the offset by the number of indices
                        offset += block_indices.position();
                    }
                }
            }

    if (verts.position() == 0) {
        empty = true;
        dirty = false;
        return;
    }

    verts.limit(verts.position()).rewind();
    tex_coords.limit(tex_coords.position()).rewind();
    System.out.println(verts.limit() + " " + tex_coords.limit());

    AABB box = new AABB(Constants.Chunk.side_length, Constants.Chunk.side_length, Constants.Chunk.side_length);
    box.center_on(pos.x + box.dimensions().x, pos.y + box.dimensions().y, pos.z + box.dimensions().z);

    // Pass the buffer to a VBO
    System.out.println("Binding vertex buffer");
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vert_buf);
    Util.checkGLError();
    System.out.println("Setting buffer data");
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, verts, GL15.GL_STATIC_DRAW);
    Util.checkGLError();
    System.out.println("Vertex buffer data set");

    System.out.println("Size of vertex buffer is: "
            + GL15.glGetBufferParameter(GL15.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE));

    // Pass the buffer to a VBO
    System.out.println("Binding tex coord buffer");
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, tex_buf);
    Util.checkGLError();
    System.out.println("Setting buffer data");
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, tex_coords, GL15.GL_STATIC_DRAW);
    Util.checkGLError();

    System.out.println("Size of tex coord buffer is: "
            + GL15.glGetBufferParameter(GL15.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE));

    for (Map.Entry<Integer, IntBuffer> entry : id_ind.entrySet()) {
        entry.getValue().limit(entry.getValue().position()).rewind();

        IntBuffer ibo = BufferUtils.createIntBuffer(1);
        GL15.glGenBuffers(ibo);

        if (ibo.get(0) == 0)
            System.out.println("Could not generate buffer object!");

        GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, ibo.get(0));
        Util.checkGLError();
        GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, entry.getValue(), GL15.GL_STATIC_DRAW);
        Util.checkGLError();
        System.out.println("Size of index buffer is: "
                + GL15.glGetBufferParameter(GL15.GL_ELEMENT_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE) + " with "
                + entry.getValue().limit() + " indices");

        System.out.println(
                "Creating batch: " + entry.getKey() + " " + ibo.get(0) + " " + entry.getValue().limit());
        batches.add(new Batch(entry.getKey(), ibo.get(0), entry.getValue().limit(), shader_prog, tex_buf,
                vert_buf, box));

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
        GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

    }

    empty = false;
    dirty = false;
}

From source file:wrapper.vbo.Vbo.java

License:Open Source License

public void create(Vertex2d[] coordinates) {
    vertex = BufferUtils.createFloatBuffer(coordinates.length * 2);
    texture = BufferUtils.createFloatBuffer(coordinates.length * 2);
    vertcount = coordinates.length;/*from  ww w. j av  a  2s . c o m*/
    maxlength = vertcount;
    for (int i = 0; i < coordinates.length; i++) {
        vertex.put(coordinates[i].x);
        vertex.put(coordinates[i].y);
        texture.put(coordinates[i].u);
        texture.put(coordinates[i].v);
    }
    vertid = GL15.glGenBuffers();
    texcoordid = GL15.glGenBuffers();
    vertex.rewind();
    texture.rewind();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

}

From source file:wrapper.vbo.Vbo.java

License:Open Source License

public void create(Vertex3d[] coordinates) {
    vertex = BufferUtils.createFloatBuffer(coordinates.length * 3);
    texture = BufferUtils.createFloatBuffer(coordinates.length * 2);
    vertcount = coordinates.length;//w  w w .  j a  v a2s  .  c o  m
    maxlength = vertcount;
    for (int i = 0; i < coordinates.length; i++) {
        vertex.put(coordinates[i].x);
        vertex.put(coordinates[i].y);
        vertex.put(coordinates[i].z);
        texture.put(coordinates[i].u);
        texture.put(coordinates[i].v);
    }
    vertid = GL15.glGenBuffers();
    texcoordid = GL15.glGenBuffers();
    vertex.rewind();
    texture.rewind();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

}

From source file:wrapper.vbo.Vbo.java

License:Open Source License

public void create(ProgressiveBuffer[] b) {// coordinates are NOT bound by
    // this//from www .  j av  a 2s . c o  m

    vertex = b[0].get_data();
    texture = b[1].get_data();
    vertcount = b[0].get_data().limit();
    maxlength = vertcount;
    vertex.rewind();
    texture.rewind();
    vertid = GL15.glGenBuffers();
    texcoordid = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

}

From source file:wrapper.vbo.Vbo.java

License:Open Source License

public void create(int size) {
    maxlength = size;/*w  w w.j  a  v  a  2s  .  c  o m*/
    vertex = BufferUtils.createFloatBuffer(size);
    texture = BufferUtils.createFloatBuffer(size);
    vertcount = 0;
    vertex.rewind();
    texture.rewind();
    vertid = GL15.glGenBuffers();
    texcoordid = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}