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.opengrave.og.base.RenderableLiquid.java

License:Open Source License

@Override
public void dealWithChange() {
    if (vaoID == 0) {
        vaoID = GL30.glGenVertexArrays();
    }/*w w  w.ja  v a  2 s  .  c om*/
    GL30.glBindVertexArray(vaoID);
    if (vbopID == 0) {
        vbopID = GL15.glGenBuffers();
    }
    if (vbooID == 0) {
        vbooID = GL15.glGenBuffers();
    }
    if (vbonID == 0) {
        vbonID = GL15.glGenBuffers();
    }
    if (changed) {
        vertexList.clear();
        posBuffer.clear();
        offsetBuffer.clear();
        normBuffer.clear();
        recreate();
        changed = false;
        int verts = vertexList.size();
        if (vertexList.size() == 0) {
            return;
        }
        if (posBuffer.capacity() != verts * 4) {
            posBuffer = BufferUtils.createFloatBuffer(verts * 4);
        }
        if (offsetBuffer.capacity() != verts * 4) {
            offsetBuffer = BufferUtils.createFloatBuffer(verts * 4);
        }
        if (normBuffer.capacity() != verts * 3) {
            normBuffer = BufferUtils.createFloatBuffer(verts * 3);
        }
        for (int i = 0; i < vertexList.size(); i += 3) {
            VertexLiquid vm0, vm1, vm2;
            vm0 = vertexList.get(i);
            vm1 = vertexList.get(i + 1);
            vm2 = vertexList.get(i + 2);
            posBuffer.put(vm0.x).put(vm0.y).put(vm0.z).put(vm0.tex);
            posBuffer.put(vm1.x).put(vm1.y).put(vm1.z).put(vm0.tex);
            posBuffer.put(vm2.x).put(vm2.y).put(vm2.z).put(vm0.tex);
            offsetBuffer.put(0).put(0).put(0).put(0);
            offsetBuffer.put(vm1.x - vm0.x).put(vm1.y - vm0.y).put(0).put(0);
            offsetBuffer.put(vm2.x - vm0.x).put(vm2.y - vm0.y).put(0).put(0);
            normBuffer.put(vm0.nx).put(vm0.ny).put(vm0.nz);
            normBuffer.put(vm1.nx).put(vm1.ny).put(vm1.nz);
            normBuffer.put(vm2.nx).put(vm2.ny).put(vm2.nz);
        }
        posBuffer.flip();

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbopID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, posBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(0, 4, GL11.GL_FLOAT, false, 0, 0);

        offsetBuffer.flip();

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbooID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, offsetBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 0, 0);

        normBuffer.flip();

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbonID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, normBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(2, 3, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    }

}

From source file:com.opengrave.og.base.RenderableMultitex.java

License:Open Source License

@Override
public void renderShadows(Matrix4f matrix, Shadow shadow) {
    dealWithChange();//  www.  j  a  va  2  s. c  o  m
    if (vertexList.size() == 0) {
        return;
    }
    int pID = Resources.loadShader("terrainshadow.vs", "castshadow.fs").getProgram();
    GL20.glUseProgram(pID);
    GL30.glBindVertexArray(vaoID);

    GL20.glEnableVertexAttribArray(0);
    getContext().setShadowMatrices(pID, matrix, shadow);
    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, vertexList.size());
    // System.out.println(getClass().getName()+" : "+vertexList.size()+" rendered");
    GL20.glDisableVertexAttribArray(0);
    GL30.glBindVertexArray(0);
    GL20.glUseProgram(0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);
}

From source file:com.opengrave.og.base.RenderableMultitex.java

License:Open Source License

@Override
public void render(Matrix4f matrix, RenderStyle style) {
    dealWithChange();//from w w  w. ja v  a 2 s  .  c o  m
    if (vertexList.size() == 0) {
        return;
    }
    // GL11.glBindTexture(GL11.GL_TEXTURE_2D,
    // Resources.loadTexture("tex/blank.png").id);
    int pID = Resources.loadShader("terrain.vs", "terrain.fs").getProgram();
    GL20.glUseProgram(pID);
    int atlas = GL20.glGetUniformLocation(pID, "arraytexture");
    int colours = GL20.glGetUniformLocation(pID, "colours");
    int shadow = GL20.glGetUniformLocation(pID, "shadowMap");
    int normals = GL20.glGetUniformLocation(pID, "arraytexturedata");
    GL20.glUniform1i(atlas, 0);
    GL20.glUniform1i(colours, 1);
    GL20.glUniform1i(normals, 2);
    GL20.glUniform1i(shadow, 3);
    GL30.glBindVertexArray(vaoID);

    GL20.glEnableVertexAttribArray(0);
    GL20.glEnableVertexAttribArray(1);
    GL20.glEnableVertexAttribArray(2);
    GL20.glEnableVertexAttribArray(3);
    GL20.glBindAttribLocation(pID, 0, "in_Position");
    GL20.glBindAttribLocation(pID, 1, "in_TextureCoord");
    GL20.glBindAttribLocation(pID, 2, "in_TexIndex");
    GL20.glBindAttribLocation(pID, 3, "in_Normal");

    getContext().setMatrices(pID, matrix);
    GL20.glUniform1i(GL20.glGetUniformLocation(pID, "hidden"), hidden);
    textureAtlas.bind(GL13.GL_TEXTURE0);
    getColourTexture().bind(GL13.GL_TEXTURE1);
    normalAtlas.bind(GL13.GL_TEXTURE2);
    getContext().bindShadowData(GL13.GL_TEXTURE3);
    getContext().bindLights(pID, GL13.GL_TEXTURE4);
    Util.setRenderStyle(pID, style);
    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, vertexList.size());
    getContext().unbindLights();
    getContext().unbindShadowData();

    textureAtlas.unbind();
    // HGMainThread.shadowMap.unbind();

    getColourTexture().unbind();
    // System.out.println(getClass().getName()+" : "+vertexList.size()+" rendered");
    GL20.glDisableVertexAttribArray(0);
    GL20.glDisableVertexAttribArray(1);
    GL20.glDisableVertexAttribArray(2);
    GL20.glDisableVertexAttribArray(3);
    GL30.glBindVertexArray(0);
    GL20.glUseProgram(0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);
}

From source file:com.opengrave.og.base.RenderableMultitex.java

License:Open Source License

@Override
public void renderForPicking(Matrix4f matrix, Pickable object) {
    dealWithChange();/*from   w w  w.j  av a  2  s .  c  om*/
    if (vertexList.size() == 0) {
        return;
    }
    int pID = Resources.loadShader("terrainshadow.vs", "pickingmodel.fs").getProgram();
    GL20.glUseProgram(pID);
    GL30.glBindVertexArray(vaoID);
    GL20.glEnableVertexAttribArray(0);
    getContext().setMatrices(pID, matrix);
    Picking.registerObject(pID, getContext(), object);
    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, vertexList.size());
    GL20.glDisableVertexAttribArray(0);
    GL30.glBindVertexArray(0);
    GL20.glUseProgram(0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);
}

From source file:com.opengrave.og.base.RenderableMultitex.java

License:Open Source License

@Override
public void dealWithChange() {
    if (vaoID == 0) {
        vaoID = GL30.glGenVertexArrays();
    }/*from w w w  . j  a  v  a  2 s  . c  o m*/
    GL30.glBindVertexArray(vaoID);
    if (vbopID == 0) {
        vbopID = GL15.glGenBuffers();
    }
    if (vbotID == 0) {
        vbotID = GL15.glGenBuffers();
    }
    if (vbotDID == 0) {
        vbotDID = GL15.glGenBuffers();
    }
    if (vboNID == 0) {
        vboNID = GL15.glGenBuffers();
    }
    if (changed) {
        changed = false;
        vertexList.clear();
        posBuffer.clear();
        texBuffer.clear();
        texDBuffer.clear();
        normBuffer.clear();
        recreate();
        int verts = vertexList.size();
        if (vertexList.size() == 0) {
            return;
        }
        if (posBuffer.capacity() != verts * 3) {
            posBuffer = BufferUtils.createFloatBuffer(verts * 3);
        }
        if (texBuffer.capacity() != verts * 3) {
            texBuffer = BufferUtils.createFloatBuffer(verts * 3);
        }
        if (texDBuffer.capacity() != verts * 3) {
            texDBuffer = BufferUtils.createFloatBuffer(verts * 3);
        }
        if (normBuffer.capacity() != verts * 3) {
            normBuffer = BufferUtils.createFloatBuffer(verts * 3);
        }
        for (int i = 0; i < vertexList.size(); i += 3) {
            VertexMultiTex vm0, vm1, vm2;
            vm0 = vertexList.get(i);
            vm1 = vertexList.get(i + 1);
            vm2 = vertexList.get(i + 2);
            posBuffer.put(vm0.x).put(vm0.y).put(vm0.z);
            posBuffer.put(vm1.x).put(vm1.y).put(vm1.z);
            posBuffer.put(vm2.x).put(vm2.y).put(vm2.z);
            texBuffer.put(vm0.tx).put(vm0.ty).put((float) vm0.tex);
            texBuffer.put(vm1.tx).put(vm1.ty).put((float) vm1.tex);
            texBuffer.put(vm2.tx).put(vm2.ty).put((float) vm2.tex);
            texDBuffer.put((float) vm0.tex).put((float) vm1.tex).put((float) vm2.tex);
            texDBuffer.put((float) vm0.tex).put((float) vm1.tex).put((float) vm2.tex);
            texDBuffer.put((float) vm0.tex).put((float) vm1.tex).put((float) vm2.tex);
            normBuffer.put(vm0.nx).put(vm0.ny).put(vm0.nz);
            normBuffer.put(vm1.nx).put(vm1.ny).put(vm1.nz);
            normBuffer.put(vm2.nx).put(vm2.ny).put(vm2.nz);
        }
        posBuffer.flip();
        texBuffer.flip();
        texDBuffer.flip();
        normBuffer.flip();
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbopID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, posBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbotID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(1, 3, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbotDID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texDBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(2, 3, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboNID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, normBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(3, 3, GL11.GL_FLOAT, true, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    }

}

From source file:com.opengrave.og.base.RenderableParticles.java

License:Open Source License

@Override
public void render(Matrix4f matrix, RenderStyle style) {
    dealWithChange();//from   w  w w. java 2  s  . c  o  m
    if (matList == null || !matList.valid()) {
        return;
    }
    GL30.glBindVertexArray(idVao);
    int pID = Resources.loadShader("particle.vs", "particle.fs").getProgram();
    GL20.glUseProgram(pID);
    GL20.glEnableVertexAttribArray(0);
    GL20.glEnableVertexAttribArray(1);
    GL20.glEnableVertexAttribArray(2);
    GL20.glBindAttribLocation(pID, 0, "in_Position");
    GL20.glBindAttribLocation(pID, 1, "in_Colour");
    GL20.glBindAttribLocation(pID, 2, "in_Scale");
    Util.checkErr();
    int texture = GL20.glGetUniformLocation(pID, "tex");
    GL20.glUniform1i(texture, 0);
    int wSS = GL20.glGetUniformLocation(pID, "windowSizeScale");

    GL20.glUniform1f(wSS, getContext().width / 1024f);
    getContext().setMatrices(pID, matrix);
    if (matList != null && matList.valid()) {
        matList.bind(pID, GL13.GL_TEXTURE0);
    }
    GL11.glEnable(GL20.GL_POINT_SPRITE);
    GL11.glEnable(GL20.GL_VERTEX_PROGRAM_POINT_SIZE);
    GL11.glDepthMask(false);
    GL11.glDrawArrays(GL11.GL_POINTS, 0, size);
    GL11.glDepthMask(true);
    GL11.glDisable(GL20.GL_POINT_SPRITE);
    GL11.glDisable(GL20.GL_VERTEX_PROGRAM_POINT_SIZE);

    if (matList != null && matList.valid()) {
        matList.unbind();
    }
    Util.checkErr();

    GL20.glDisableVertexAttribArray(0);
    GL20.glDisableVertexAttribArray(1);
    GL20.glDisableVertexAttribArray(2);

    Util.checkErr();

    GL20.glUseProgram(0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);
    Util.checkErr();
}

From source file:com.opengrave.og.base.RenderableParticles.java

License:Open Source License

@Override
public void renderForPicking(Matrix4f matrix, Pickable object) {
    dealWithChange();//from  w  w w  . ja  v  a  2 s .  c o m
    GL30.glBindVertexArray(idVao);
    int pID = Resources.loadShader("particle.vs", "pickingmodel.fs").getProgram();
    GL20.glUseProgram(pID);
    GL20.glEnableVertexAttribArray(0);
    GL20.glEnableVertexAttribArray(2);
    GL20.glBindAttribLocation(pID, 0, "in_Position");
    GL20.glBindAttribLocation(pID, 2, "in_Scale");
    Util.checkErr();

    int wSS = GL20.glGetUniformLocation(pID, "windowSizeScale");

    GL20.glUniform1f(wSS, MainThread.lastW / 1024f);
    getContext().setMatrices(pID, matrix);
    GL11.glEnable(GL20.GL_POINT_SPRITE);
    GL11.glEnable(GL20.GL_VERTEX_PROGRAM_POINT_SIZE);
    Picking.registerObject(pID, getContext(), object);
    GL11.glDrawArrays(GL11.GL_POINTS, 0, size);
    GL11.glDisable(GL20.GL_POINT_SPRITE);
    GL11.glDisable(GL20.GL_VERTEX_PROGRAM_POINT_SIZE);

    Util.checkErr();

    GL20.glDisableVertexAttribArray(0);
    GL20.glDisableVertexAttribArray(2);

    Util.checkErr();

    GL20.glUseProgram(0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);
    Util.checkErr();
}

From source file:com.opengrave.og.base.RenderableParticles.java

License:Open Source License

@Override
public void dealWithChange() {
    // Safely assume every frame is a new frame in terms of particle
    // positions.
    if (idVao == 0) {
        idVao = GL30.glGenVertexArrays();
    }//from  w  w w.ja v  a 2s.co m
    GL30.glBindVertexArray(idVao);
    if (idVboColours == 0) {
        idVboColours = GL15.glGenBuffers();
    }
    if (idVboPositions == 0) {
        idVboPositions = GL15.glGenBuffers();
    }
    if (idVboScale == 0) {
        idVboScale = GL15.glGenBuffers();
    }

    size = particleList.size() * 4;
    if (positions == null || positions.capacity() != size) {
        positions = BufferUtils.createFloatBuffer(size);
    }
    if (colours == null || colours.capacity() != size) {
        colours = BufferUtils.createFloatBuffer(size);
    }
    if (scales == null || scales.capacity() != size) {
        scales = BufferUtils.createFloatBuffer(size);
    }
    positions.rewind();
    colours.rewind();
    scales.rewind();
    for (ParticlePart particle : particleList) {
        Vector3f pos = particle.getPosition().toVector3(), sca = particle.getScaleData();
        Vector4f col = particle.getColour();

        positions.put(pos.x).put(pos.y).put(pos.z).put(1f);
        colours.put(col.x).put(col.y).put(col.z).put(col.w);
        scales.put(sca.x).put(sca.y).put(sca.z).put(1f);

    }
    positions.flip();
    colours.flip();
    scales.flip();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, idVboPositions);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, positions, GL15.GL_STREAM_DRAW);
    GL20.glVertexAttribPointer(0, 4, GL11.GL_FLOAT, false, 0, 0);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, idVboColours);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, colours, GL15.GL_STREAM_DRAW);
    GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 0, 0);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, idVboScale);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, scales, GL15.GL_STREAM_DRAW);
    GL20.glVertexAttribPointer(2, 4, GL11.GL_FLOAT, false, 0, 0);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);

}

From source file:com.opengrave.og.base.RenderablePoints.java

License:Open Source License

@Override
public void render(Matrix4f matrix, RenderStyle style) {
    Util.checkErr();//from  ww w.j  a va2  s .co m

    dealWithChange();
    if (!visible) {
        return;
    }
    if (vertCount == 0) {
        return;
    }
    Util.checkErr();
    GL11.glDisable(GL11.GL_DEPTH_TEST);
    Util.checkErr();
    GL11.glPointSize(3f);
    Util.checkErr();
    int pID = Resources.loadShader("particle.vs", "particle.fs").getProgram();
    Util.checkErr();
    GL20.glUseProgram(pID);
    Util.checkErr();
    if (pID == 0) {
        return;
    }
    Util.checkErr();
    GL30.glBindVertexArray(vaoID);
    Util.checkErr();
    GL20.glEnableVertexAttribArray(0);
    GL20.glEnableVertexAttribArray(1);
    GL20.glEnableVertexAttribArray(2);

    Util.checkErr();
    int wSS = GL20.glGetUniformLocation(pID, "windowSizeScale");

    GL20.glUniform1f(wSS, MainThread.lastW / 1024f);

    getContext().setMatrices(pID, matrix);
    Util.checkErr();

    if (tex != null) {
        tex.bind(GL13.GL_TEXTURE0);
    }
    GL11.glEnable(GL20.GL_POINT_SPRITE);
    GL11.glEnable(GL20.GL_VERTEX_PROGRAM_POINT_SIZE);
    GL11.glDrawArrays(GL11.GL_POINTS, 0, vertCount);

    GL11.glDisable(GL20.GL_POINT_SPRITE);
    GL11.glDisable(GL20.GL_VERTEX_PROGRAM_POINT_SIZE);
    if (tex != null) {
        tex.unbind();
    }
    Util.checkErr();

    GL20.glDisableVertexAttribArray(0);
    GL20.glDisableVertexAttribArray(1);
    GL20.glDisableVertexAttribArray(2);
    Util.checkErr();

    GL30.glBindVertexArray(0);
    GL20.glUseProgram(0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL30.glBindVertexArray(0);
    Util.checkErr();
    GL11.glEnable(GL11.GL_DEPTH_TEST);
}

From source file:com.opengrave.og.base.RenderablePoints.java

License:Open Source License

@Override
public void dealWithChange() {
    if (vaoID == 0) {
        vaoID = GL30.glGenVertexArrays();
    }/*  w  w  w.  j  av a 2s. c om*/
    GL30.glBindVertexArray(vaoID);
    if (vboID == 0) {
        vboID = GL15.glGenBuffers();
    }
    if (vboCID == 0) {
        vboCID = GL15.glGenBuffers();
    }
    if (vbosID == 0) {
        vbosID = GL15.glGenBuffers();
    }

    if (changed) {
        changed = false;
        // vertexList.clear();
        recreate();
        synchronized (vertexList) {
            vertCount = vertexList.size();
            if (vertCount == 0) {
                return;
            }
            if (posBuffer == null || posBuffer.capacity() != vertCount * 3) {
                posBuffer = BufferUtils.createFloatBuffer(vertCount * 3);
            }
            if (colBuffer == null || colBuffer.capacity() != vertCount * 4) {
                colBuffer = BufferUtils.createFloatBuffer(vertCount * 4);
            }
            if (scaleBuffer == null || scaleBuffer.capacity() != vertCount * 4) {
                scaleBuffer = BufferUtils.createFloatBuffer(vertCount * 4);
            }
            posBuffer.position(0);
            colBuffer.position(0);
            scaleBuffer.position(0);
            for (VertexPoint va : vertexList) {
                posBuffer.put(va.x).put(va.y).put(va.z);
                colBuffer.put(va.r).put(va.g).put(va.b).put(va.a);
                scaleBuffer.put(va.size).put(va.texture).put(0f).put(0f);
            }
        }
        posBuffer.flip();
        colBuffer.flip();
        scaleBuffer.flip();

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, posBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboCID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, colBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbosID);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, scaleBuffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(2, 4, GL11.GL_FLOAT, false, 0, 0);

        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    }
    GL30.glBindVertexArray(0);
}