Example usage for org.lwjgl.opengl GL15 glGenBuffers

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

Introduction

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

Prototype

@NativeType("void")
public static int glGenBuffers() 

Source Link

Document

Generates buffer object names.

Usage

From source file:org.spout.engine.renderer.vertexbuffer.SpoutFloatBuffer.java

License:Open Source License

public static SpoutFloatBuffer getBuffer() {
    if (BUFFER_POOL.isEmpty()) {
        return new SpoutFloatBuffer(GL15.glGenBuffers());
    } else {/*from   w  w  w  .j  a  v a  2  s  .c  o  m*/
        return new SpoutFloatBuffer(BUFFER_POOL.remove(0));
    }
}

From source file:org.spout.engine.renderer.vertexbuffer.VertexBufferImpl.java

License:Open Source License

public void flush(FloatBuffer buffer) {
    if (vboId == -1)
        vboId = GL15.glGenBuffers();

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, usage);

}

From source file:org.spout.engine.renderer.vertexbuffer.VertexBufferImplByte.java

License:Open Source License

public void flush(ByteBuffer buffer) {
    if (vboId == -1)
        vboId = GL15.glGenBuffers();

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, usage);
}

From source file:org.spout.renderer.lwjgl.gl20.GL20VertexArray.java

License:Open Source License

@Override
public void setData(VertexData vertexData) {
    checkCreated();/*from  www. j  a  v  a  2  s.com*/
    // Generate a new indices buffer if we don't have one yet
    if (indicesBufferID == 0) {
        indicesBufferID = GL15.glGenBuffers();
    }
    // Bind the indices buffer
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBufferID);
    // Get the new count of indices
    final int newIndicesCount = vertexData.getIndicesCount();
    // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory
    // In the first case because we need more space, in the other to save space
    if (newIndicesCount > indicesCount || newIndicesCount <= indicesCount * 0.5) {
        GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, vertexData.getIndicesBuffer(), GL15.GL_STATIC_DRAW);
    } else {
        // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer
        GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, vertexData.getIndicesBuffer());
    }
    // Unbind the indices buffer
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
    // Update the count to the new one
    indicesCount = newIndicesCount;
    indicesDrawCount = indicesCount;
    // Ensure that the indices offset and count fits inside the valid part of the buffer
    indicesOffset = Math.min(indicesOffset, indicesCount - 1);
    indicesDrawCount = indicesDrawCount - indicesOffset;
    // Bind the vao
    if (extension.has()) {
        extension.glBindVertexArray(id);
    }
    // Create a new array of attribute buffers ID of the correct size
    final int attributeCount = vertexData.getAttributeCount();
    final int[] newAttributeBufferIDs = new int[attributeCount];
    // Copy all the old buffer IDs that will fit in the new array so we can reuse them
    System.arraycopy(attributeBufferIDs, 0, newAttributeBufferIDs, 0,
            Math.min(attributeBufferIDs.length, newAttributeBufferIDs.length));
    // Delete any buffers that we don't need (new array is smaller than the previous one)
    for (int i = newAttributeBufferIDs.length; i < attributeBufferIDs.length; i++) {
        GL15.glDeleteBuffers(attributeBufferIDs[i]);
    }
    // Create new buffers if necessary (new array is larger than the previous one)
    for (int i = attributeBufferIDs.length; i < newAttributeBufferIDs.length; i++) {
        newAttributeBufferIDs[i] = GL15.glGenBuffers();
    }
    // Copy the old valid attribute buffer sizes
    final int[] newAttributeBufferSizes = new int[attributeCount];
    System.arraycopy(attributeBufferSizes, 0, newAttributeBufferSizes, 0,
            Math.min(attributeBufferSizes.length, newAttributeBufferSizes.length));
    // If we don't have a vao, we have to save the properties manually
    if (!extension.has()) {
        attributeSizes = new int[attributeCount];
        attributeTypes = new int[attributeCount];
        attributeNormalizing = new boolean[attributeCount];
    }
    // Upload the new vertex data
    for (int i = 0; i < attributeCount; i++) {
        final VertexAttribute attribute = vertexData.getAttribute(i);
        final ByteBuffer attributeData = attribute.getData();
        // Get the current buffer size
        final int bufferSize = newAttributeBufferSizes[i];
        // Get the new buffer size
        final int newBufferSize = attributeData.remaining();
        // Bind the target buffer
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, newAttributeBufferIDs[i]);
        // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory
        if (newBufferSize > bufferSize || newBufferSize <= bufferSize * 0.5) {
            GL15.glBufferData(GL15.GL_ARRAY_BUFFER, attributeData, GL15.GL_STATIC_DRAW);
        } else {
            // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer
            GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, attributeData);
        }
        // Update the buffer size to the new one
        newAttributeBufferSizes[i] = newBufferSize;
        // Next, we add the pointer to the data in the vao
        if (extension.has()) {
            // As a float, normalized or not
            GL20.glVertexAttribPointer(i, attribute.getSize(), attribute.getType().getGLConstant(),
                    attribute.getUploadMode().normalize(), 0, 0);
            // Enable the attribute
            GL20.glEnableVertexAttribArray(i);
        } else {
            // Else we save the properties for rendering
            attributeSizes[i] = attribute.getSize();
            attributeTypes[i] = attribute.getType().getGLConstant();
            attributeNormalizing[i] = attribute.getUploadMode().normalize();
        }
    }
    // Unbind the last vbo
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    // Unbind the vao
    if (extension.has()) {
        extension.glBindVertexArray(0);
    }
    // Update the attribute buffer IDs to the new ones
    attributeBufferIDs = newAttributeBufferIDs;
    // Update the attribute buffer sizes to the new ones
    attributeBufferSizes = newAttributeBufferSizes;
    // Check for errors
    LWJGLUtil.checkForGLError();
}

From source file:org.spout.renderer.lwjgl.gl30.GL30VertexArray.java

License:Open Source License

@Override
public void setData(VertexData vertexData) {
    checkCreated();/*from  w w  w .  j a  v  a2s  .com*/
    // Generate a new indices buffer if we don't have one yet
    if (indicesBufferID == 0) {
        indicesBufferID = GL15.glGenBuffers();
    }
    // Bind the indices buffer
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBufferID);
    // Get the new count of indices
    final int newIndicesCount = vertexData.getIndicesCount();
    // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory
    // In the first case because we need more space, in the other to save space
    if (newIndicesCount > indicesCount || newIndicesCount <= indicesCount * 0.5) {
        GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, vertexData.getIndicesBuffer(), GL15.GL_STATIC_DRAW);
    } else {
        // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer
        GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, vertexData.getIndicesBuffer());
    }
    // Unbind the indices buffer
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
    // Update the count to the new one
    indicesCount = newIndicesCount;
    indicesDrawCount = indicesCount;
    // Ensure that the indices offset and count fits inside the valid part of the buffer
    indicesOffset = Math.min(indicesOffset, indicesCount - 1);
    indicesDrawCount = indicesDrawCount - indicesOffset;
    // Bind the vao
    GL30.glBindVertexArray(id);
    // Create a new array of attribute buffers ID of the correct size
    final int attributeCount = vertexData.getAttributeCount();
    final int[] newAttributeBufferIDs = new int[attributeCount];
    // Copy all the old buffer IDs that will fit in the new array so we can reuse them
    System.arraycopy(attributeBufferIDs, 0, newAttributeBufferIDs, 0,
            Math.min(attributeBufferIDs.length, newAttributeBufferIDs.length));
    // Delete any buffers that we don't need (new array is smaller than the previous one)
    for (int i = newAttributeBufferIDs.length; i < attributeBufferIDs.length; i++) {
        GL15.glDeleteBuffers(attributeBufferIDs[i]);
    }
    // Create new buffers if necessary (new array is larger than the previous one)
    for (int i = attributeBufferIDs.length; i < newAttributeBufferIDs.length; i++) {
        newAttributeBufferIDs[i] = GL15.glGenBuffers();
    }
    // Copy the old valid attribute buffer sizes
    final int[] newAttributeBufferSizes = new int[attributeCount];
    System.arraycopy(attributeBufferSizes, 0, newAttributeBufferSizes, 0,
            Math.min(attributeBufferSizes.length, newAttributeBufferSizes.length));
    // Upload the new vertex data
    for (int i = 0; i < attributeCount; i++) {
        final VertexAttribute attribute = vertexData.getAttribute(i);
        final ByteBuffer attributeData = attribute.getData();
        // Get the current buffer size
        final int bufferSize = newAttributeBufferSizes[i];
        // Get the new buffer size
        final int newBufferSize = attributeData.remaining();
        // Bind the target buffer
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, newAttributeBufferIDs[i]);
        // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory
        if (newBufferSize > bufferSize || newBufferSize <= bufferSize * 0.5) {
            GL15.glBufferData(GL15.GL_ARRAY_BUFFER, attributeData, GL15.GL_STATIC_DRAW);
        } else {
            // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer
            GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, attributeData);
        }
        // Update the buffer size to the new one
        newAttributeBufferSizes[i] = newBufferSize;
        // Next, we add the pointer to the data in the vao
        // We have three ways to interpret integer data
        if (attribute.getType().isInteger() && attribute.getUploadMode() == UploadMode.KEEP_INT) {
            // Directly as an int
            GL30.glVertexAttribIPointer(i, attribute.getSize(), attribute.getType().getGLConstant(), 0, 0);
        } else {
            // Or as a float, normalized or not
            GL20.glVertexAttribPointer(i, attribute.getSize(), attribute.getType().getGLConstant(),
                    attribute.getUploadMode().normalize(), 0, 0);
        }
        // Finally enable the attribute
        GL20.glEnableVertexAttribArray(i);
    }
    // Unbind the last vbo
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    // Unbind the vao
    GL30.glBindVertexArray(0);
    // Update the attribute buffer IDs to the new ones
    attributeBufferIDs = newAttributeBufferIDs;
    // Update the attribute buffer sizes to the new ones
    attributeBufferSizes = newAttributeBufferSizes;
    // Check for errors
    LWJGLUtil.checkForGLError();
}

From source file:ovh.tgrhavoc.gameengine.core.Mesh.java

License:Open Source License

private void initMesh() {
    vbo = GL15.glGenBuffers();
    ibo = GL15.glGenBuffers();
    size = 0;
}

From source file:ru.axialshift.vram.gl.IndicesVBO.java

License:Apache License

@Override
protected void upload_gl() {
    glpointer = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, glpointer);
    GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, (ByteBuffer) tovram, GL15.GL_STATIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
}

From source file:ru.axialshift.vram.gl.VertexVBO.java

License:Apache License

@Override
protected void upload_gl() {
    //Allocation/*w  w w. j  av a 2  s. c om*/
    glpointer = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, glpointer);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, (FloatBuffer) tovram, GL15.GL_STATIC_DRAW);

    //Mapping
    int stride = 4 * (MeshData.VERTICES_STRIDE + MeshData.UVS_STRIDE + MeshData.NORMALS_STRIDE
            + MeshData.TANGENTS_STRIDE + MeshData.BITANGENTS_STRIDE);
    int offset = 0;
    //Vertices
    int bytesPerVertex = MeshData.VERTICES_STRIDE * 4;
    GL20.glVertexAttribPointer(id_pos, MeshData.VERTICES_STRIDE, GL11.GL_FLOAT, false, stride, offset);
    //UVs
    int bytesPerUVs = MeshData.UVS_STRIDE * 4;
    offset += bytesPerVertex;
    GL20.glVertexAttribPointer(id_uvs, MeshData.UVS_STRIDE, GL11.GL_FLOAT, false, stride, offset);
    //Normals
    int bytesPerNormals = MeshData.NORMALS_STRIDE * 4;
    offset += bytesPerUVs;
    GL20.glVertexAttribPointer(id_nor, MeshData.NORMALS_STRIDE, GL11.GL_FLOAT, false, stride, offset);
    //Tangents
    int bytesPerTangents = MeshData.TANGENTS_STRIDE * 4;
    offset += bytesPerNormals;
    GL20.glVertexAttribPointer(id_tan, MeshData.TANGENTS_STRIDE, GL11.GL_FLOAT, false, stride, offset);
    //BiTangents
    //int bytesPerBiTangents = MeshData.BITANGENTS_STRIDE*4;
    offset += bytesPerTangents;
    GL20.glVertexAttribPointer(id_btan, MeshData.BITANGENTS_STRIDE, GL11.GL_FLOAT, false, stride, offset);

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

From source file:se.angergard.engine.graphics.Mesh.java

License:Apache License

public Mesh(long vertexBufferSize, long indicesBufferSize, int usage) {
    if (aMeshCreated) {
        new Exception("You can't create multiple meshes as of right now. This is due to a bug")
                .printStackTrace();//from   w w w  .  ja va 2 s.  c om
    }

    vbo = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBufferSize, usage);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    ibo = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, ibo);
    GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBufferSize, usage);
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

    this.VERTEX_BUFFER_SIZE = vertexBufferSize;
    this.INDICES_BUFFER_SIZE = indicesBufferSize;

    this.INDICES_LENGTH = (int) indicesBufferSize / 4; // removes bytes

    aMeshCreated = true;
}

From source file:thebounzer.org.lwgldemo.Chapter5.java

License:Open Source License

private void createAndBindVertexObject(float[] data) throws IOException {
    FloatBuffer fBuffer = BufferUtils.createFloatBuffer(data.length);
    fBuffer.put(data);// w  ww .  j a  v  a 2 s  .c  om
    fBuffer.flip();
    int vboId = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, fBuffer, GL15.GL_STATIC_DRAW);
    GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}