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:org.minetweak.rendering.ChunkMeshBuilder.java

License:Apache License

public static void generateChunkMesh(Chunk chunk, MeshType meshType) {
    if (DEBUG) {//from ww w.  j  av a2 s. c om
        System.out.println("Building " + meshType.name() + " Mesh for " + chunk.toString() + "...");
    }

    /* Make sure there are no list edits anymore */
    chunk.performListChanges();

    ChunkMesh mesh = chunk.getMesh();
    mesh.destroy(meshType);

    /* Compute vertex count */
    int vertexCount = chunk.getVertexCount(meshType);
    if (DEBUG) {
        System.out.println("\tVertex Count = " + vertexCount);
    }
    /*
     * If there are no faces visible yet (because of generating busy), don't
     * create a buffer
     */
    if (vertexCount == 0) {
        return;
    }
    mesh.setVertexCount(meshType, vertexCount);

    /* Create a buffer */
    int vbo = BufferManager.getInstance().createBuffer();
    mesh.setVBO(meshType, vbo);

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

    /* Allocate size for the buffer */
    int size = vertexCount * STRIDE * FLOAT_SIZE;
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, size, GL15.GL_STATIC_DRAW);

    if (DEBUG) {
        System.out.println(
                "\tCreate VBO: " + vbo + " with size = " + size + " (ERROR: " + GL11.glGetError() + ")");
    }

    /* Get the native buffer to write to */
    ByteBuffer byteBuffer = GL15.glMapBuffer(GL15.GL_ARRAY_BUFFER, GL15.GL_WRITE_ONLY, size, null);
    if (byteBuffer == null) {
        System.out.println("\tCouldn't create a native VBO!: GL Error Code = " + GL11.glGetError());

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

        mesh.destroy(meshType);
        Thread.dumpStack();
        mesh.setVBO(meshType, -1);
        mesh.setVertexCount(meshType, 0);

        return;
    }

    FloatBuffer vertexBuffer = byteBuffer.asFloatBuffer();

    /* Store all vertices in the buffer */
    USED_SIZE = 0;

    /* Local temporary variables, used to speed up */
    IntList blockList = chunk.getVisibleBlocks();
    int blockIndex = -1;
    byte blockType = 0;
    boolean special = false;
    Vec3i vec = new Vec3i();
    BlockType type;
    Block block = null;
    LightBuffer lightBuffer = chunk.getLightBuffer();
    byte faceMask = 0;

    /* Iterate over the blocks */
    for (int i = 0; i < blockList.size(); ++i) {
        blockIndex = blockList.get(i);
        blockType = chunk.getChunkData().getBlockType(blockIndex);
        if (blockType == 0) {
            continue;
        }
        special = chunk.getChunkData().isSpecial(blockIndex);
        type = _blockManager.getBlockType(blockType);

        if ((meshType == MeshType.OPAQUE && !type.isTranslucent() && type.hasNormalAABB())
                || (meshType == MeshType.TRANSLUCENT && (type.isTranslucent() || !type.hasNormalAABB()))) {

            ChunkData.indexToPosition(blockIndex, vec);

            /* Build the light buffer */

            vec.setX(vec.x() + chunk.getAbsoluteX());
            vec.setZ(vec.z() + chunk.getAbsoluteZ());

            lightBuffer.setReferencePoint(vec.x(), vec.y(), vec.z());

            if (special) {
                block = chunk.getChunkData().getSpecialBlock(blockIndex);
                if (block.isVisible()) {
                    block.storeInVBO(vertexBuffer, lightBuffer);
                }
            } else {
                if (type.isCrossed()) {
                    type.getCrossedBlockBrush().storeInVBO(vertexBuffer, vec.x() + 0.5f, vec.y() + 0.5f,
                            vec.z() + 0.5f, lightBuffer);
                } else {
                    faceMask = chunk.getChunkData().getFaceMask(blockIndex);
                    type.getDefaultBlockBrush().setFaceMask(faceMask);
                    type.getBrush().storeInVBO(vertexBuffer, vec.x() + 0.5f, vec.y() + 0.5f, vec.z() + 0.5f,
                            lightBuffer);
                }
            }
        }
    }

    /* Perform a check */
    if (USED_SIZE != STRIDE * FLOAT_SIZE * mesh.getVertexCount(meshType)) {
        System.out.println("\t[WARNING!]: Used size = " + USED_SIZE);
        System.out.println("\t[WARNING!]: Vertex count = " + USED_SIZE / STRIDE / FLOAT_SIZE);
        mesh.setVertexCount(meshType, USED_SIZE / STRIDE / FLOAT_SIZE);
    }

    byteBuffer.flip();

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

}

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

License:Open Source License

public void flush(FloatBuffer buffer) {
    if (vboId == -1)
        vboId = GL15.glGenBuffers();//from  w  w  w .  j a  va2 s  .  co m

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

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

License:Open Source License

public void bind() {
    if (vboId == -1)
        throw new IllegalStateException("Cannot bind a vertex buffer without data!");
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    GL20.glVertexAttribPointer(getLayout(), getElements(), GL11.GL_FLOAT, false, 0, 0);
}

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

License:Open Source License

public boolean flush(boolean force) {
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    SpoutRenderer.checkGLError();/*from w  ww.j  a  va  2  s .  c  o m*/

    //Re/Allocate if needed
    if (buffer.limit() > allocated) {
        allocated = buffer.limit();
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, allocated * FLOAT_SIZE, usage);
        SpoutRenderer.checkGLError();
    }

    //GL15.glBufferData(GL15.GL_ARRAY_BUFFER, 0, usage);
    //SpoutRenderer.checkGLError();
    int end;

    if (force) {
        end = buffer.capacity();
    } else {
        end = Math.min(current + STEP, buffer.capacity());
    }

    buffer.position(current);
    buffer.limit(end);

    GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, current * FLOAT_SIZE, buffer);
    SpoutRenderer.checkGLError();

    current = end;

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    SpoutRenderer.checkGLError();

    if (end == buffer.capacity()) {
        buffer = null;
        return true;
    }
    return false;
}

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

License:Open Source License

public void bind(boolean instanced) {
    if (vboId == -1) {
        throw new IllegalStateException("Cannot bind a vertex buffer without data!");
    }/*from   w  ww . j a v  a  2 s .com*/
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    SpoutRenderer.checkGLError();

    for (int i = 0; i < elements.length; i++) {
        GL20.glVertexAttribPointer(layout[i], elements[i], GL11.GL_FLOAT, false, stride, offset[i]);
        SpoutRenderer.checkGLError();

        if (instanced) {
            GL33.glVertexAttribDivisor(layout[i], 1);
            SpoutRenderer.checkGLError();
        }
    }
}

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

License:Open Source License

public void unbind() {
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    SpoutRenderer.checkGLError();
}

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

License:Open Source License

public void release() {
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);
    SpoutRenderer.checkGLError();/*from w w w . ja  v a2 s  .  co m*/

    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, 0, usage);
    SpoutRenderer.checkGLError();

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    SpoutRenderer.checkGLError();

    BUFFER_POOL.add(vboId);
    vboId = -1;
    allocated = 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();/* w  ww .  java2  s .c  o  m*/

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

}

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

License:Open Source License

public void bind() {
    if (vboId == -1)
        throw new IllegalStateException("Cannot bind a vertex buffer without data!");
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId);

}

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();/*from ww w.j ava  2s.com*/

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