Example usage for org.lwjgl.opengl GL15 GL_ARRAY_BUFFER

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

Introduction

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

Prototype

int GL_ARRAY_BUFFER

To view the source code for org.lwjgl.opengl GL15 GL_ARRAY_BUFFER.

Click Source Link

Document

Accepted by the target parameters of BindBuffer, BufferData, BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData, GetBufferParameteriv, and GetBufferPointerv.

Usage

From source file:com.auroraengine.opengl.model.VertexBuffer.java

License:Open Source License

@Override
public void update() throws GLException {
    // Need to update the buffer if it is able to
    if (index != 0 && permissions != GL15.GL_STATIC_DRAW) {
        // Edit according to the modifications of the buffer.
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, index);
        GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, bb.position(), bb);
    }/*  www  . j  a va 2  s .  c o m*/
}

From source file:com.colonycraft.rendering.world.ChunkMeshRenderer.java

License:Apache License

public static void renderChunkMesh(World world, Chunk chunk, int meshType) {
    /* Bind the correct texture */
    GL11.glEnable(GL11.GL_TEXTURE_2D);/*from   w  ww .  j  a  v a 2 s . c om*/
    TextureStorage.getTexture("terrain").bind();

    if (meshType == ChunkMesh.MESH_OPAQUE) {
        GL11.glDisable(GL11.GL_BLEND);
    } else if (meshType == ChunkMesh.MESH_TRANSLUCENT || meshType == ChunkMesh.MESH_GRASS) {
        GL11.glDisable(GL11.GL_CULL_FACE);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.0f);
    }

    ChunkMesh cmesh = chunk.getMesh();
    Mesh mesh = cmesh.getMesh(meshType);
    if (mesh == null)
        return;

    /* Bind the buffer */
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, mesh.getVertexBufferHandle());

    /* Enable the different kinds of data in the buffer */
    GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

    if (meshType == ChunkMesh.MESH_GRASS) {
        GL20.glEnableVertexAttribArray(GRASS_ATTRIBUTE_LIGHT);
    } else {
        GL20.glEnableVertexAttribArray(CHUNK_ATTRIBUTE_LIGHT);
    }

    /* Define the starting positions */
    GL11.glVertexPointer(POSITION_SIZE, GL11.GL_FLOAT, STRIDE * FLOAT_SIZE, POSITION_OFFSET * FLOAT_SIZE);
    GL11.glTexCoordPointer(TEX_COORD_SIZE, GL11.GL_FLOAT, STRIDE * FLOAT_SIZE, TEX_COORD_OFFSET * FLOAT_SIZE);
    GL20.glVertexAttribPointer(CHUNK_ATTRIBUTE_LIGHT, 2, GL11.GL_FLOAT, false, STRIDE * FLOAT_SIZE,
            LIGHT_OFFSET * FLOAT_SIZE);

    /* Draw the buffer */
    GL11.glDrawArrays(GL11.GL_QUADS, 0, mesh.vertices());

    /* Unbind the buffer */
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    /* Disable the different kinds of data */
    GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
    GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

    if (meshType == ChunkMesh.MESH_GRASS) {
        GL20.glDisableVertexAttribArray(GRASS_ATTRIBUTE_LIGHT);
    } else {
        GL20.glDisableVertexAttribArray(CHUNK_ATTRIBUTE_LIGHT);
    }

    if (meshType == ChunkMesh.MESH_TRANSLUCENT || meshType == ChunkMesh.MESH_GRASS) {
        GL11.glEnable(GL11.GL_CULL_FACE);
        GL11.glDisable(GL11.GL_ALPHA_TEST);
    }
}

From source file:com.dinasgames.engine.graphics.GL.java

public static void vertexBufferData(int id, FloatBuffer buffer) {

    if (version < 15) {
        return;//from w  w w .  j a  v a2s  . c  om
    }

    bindBuffer(GL15.GL_ARRAY_BUFFER, id);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);

}

From source file:com.dinasgames.engine.graphics.GL.java

public static void colorBufferData(int id, FloatBuffer buffer) {

    if (version < 15) {
        return;//from  w ww. j a  va  2  s.co m
    }

    bindBuffer(GL15.GL_ARRAY_BUFFER, id);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);

}

From source file:com.dinasgames.engine.graphics.GL.java

public static void indexBufferData(int id, FloatBuffer buffer) {

    if (version < 15) {
        return;/*from   w w  w  .  ja  va2 s  .  co  m*/
    }

    bindBuffer(GL15.GL_ARRAY_BUFFER, id);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);

}

From source file:com.dinasgames.engine.graphics.GL.java

public static void render(Vertex[] verts) {

    init();/*from   ww  w  .  ja  va2 s  . com*/

    int numberIndices = verts.length / 3;
    vertexBuffer = BufferUtils.createFloatBuffer(verts.length * 2);
    colorBuffer = BufferUtils.createFloatBuffer(verts.length);
    indexBuffer = BufferUtils.createFloatBuffer(verts.length);

    vertexBuffer.clear();
    colorBuffer.clear();
    indexBuffer.clear();

    for (Vertex vert : verts) {

        vertexBuffer.put(vert.x);
        vertexBuffer.put(vert.y);

        GLColor c = vert.color.toGLColor();

        colorBuffer.put(c.getRed());
        colorBuffer.put(c.getGreen());
        colorBuffer.put(c.getBlue());
        colorBuffer.put(c.getAlpha());

    }

    vertexBufferData(vertexBufferID, vertexBuffer);
    colorBufferData(colorBufferID, colorBuffer);

    // Push verticies to OpenGL
    GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexBufferID);
    GL11.glVertexPointer(2, GL11.GL_FLOAT, 0, 0);

    // Push color values to OpenGL
    GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, colorBufferID);
    GL11.glColorPointer(4, GL11.GL_FLOAT, 0, 0);

    // Draw the shape
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
    GL11.glDrawElements(GL11.GL_TRIANGLES, numberIndices, GL11.GL_UNSIGNED_INT, 0);

    // Disalble client state for vertex and color
    GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
    GL11.glDisableClientState(GL11.GL_COLOR_ARRAY);

}

From source file:com.flowpowered.caustic.lwjgl.gl20.GL20VertexArray.java

License:MIT License

@Override
public void setData(VertexData vertexData) {
    checkCreated();/*from w ww. ja  va  2s.c o m*/
    // 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 total indices count
    indicesCount = newIndicesCount;
    // Ensure the count fits under the total one
    indicesDrawCount = indicesDrawCount <= 0 ? indicesCount : Math.min(indicesDrawCount, indicesCount);
    // Ensure that the indices offset and count fits inside the valid part of the buffer
    indicesOffset = Math.min(indicesOffset, indicesDrawCount - 1);
    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:com.flowpowered.caustic.lwjgl.gl20.GL20VertexArray.java

License:MIT License

@Override
public void draw() {
    checkCreated();/* w w w . j  a  v a  2 s.co m*/
    if (extension.has()) {
        // Bind the vao
        extension.glBindVertexArray(id);
    } else {
        // Enable the vertex attributes
        for (int i = 0; i < attributeBufferIDs.length; i++) {
            // Bind the buffer
            GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, attributeBufferIDs[i]);
            // Define the attribute
            GL20.glVertexAttribPointer(i, attributeSizes[i], attributeTypes[i], attributeNormalizing[i], 0, 0);
            // Enable it
            GL20.glEnableVertexAttribArray(i);
        }
        // Unbind the last buffer
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    }
    // Bind the index buffer
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBufferID);
    // Set the polygon mode
    GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, polygonMode.getGLConstant());
    // Draw all indices with the provided mode
    GL11.glDrawElements(drawingMode.getGLConstant(), indicesDrawCount, GL11.GL_UNSIGNED_INT,
            indicesOffset * DataType.INT.getByteSize());
    // Unbind the indices buffer
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
    // Check for errors
    LWJGLUtil.checkForGLError();
}

From source file:com.flowpowered.caustic.lwjgl.gl30.GL30VertexArray.java

License:MIT License

@Override
public void setData(VertexData vertexData) {
    checkCreated();// w w w  .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 total indices count
    indicesCount = newIndicesCount;
    // Ensure the count fits under the total one
    indicesDrawCount = indicesDrawCount <= 0 ? indicesCount : Math.min(indicesDrawCount, indicesCount);
    // Ensure that the indices offset and count fits inside the valid part of the buffer
    indicesOffset = Math.min(indicesOffset, indicesDrawCount - 1);
    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:com.geekyaubergine.geekyjgameutil.model.ModelLoader.java

License:Open Source License

/**
 * Stores data in attribute list/*from w  w w.  ja  v  a 2s  .  c  om*/
 * @param attributeNumber Index in the attribute list to store data
 * @param data Data to store in attribute
 * @param dataSize Size of the data being stored
 */
private static void storeDataInAttributeList(int attributeNumber, float[] data, int dataSize) {
    Validate.isTrue(attributeNumber >= 0, "Attribute index must be a positive number");
    Validate.isTrue(dataSize >= 0, "Data size must be a positive number");
    int vboID = GL15.glGenBuffers();
    vbos.add(vboID);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
    FloatBuffer buffer = storeDataInFloatBuffer(data);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
    GL20.glVertexAttribPointer(attributeNumber, dataSize, GL11.GL_FLOAT, false, 0, 0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}