Java tutorial
/* * This file is part of Spout. * * Copyright (c) 2011-2012, SpoutDev <http://www.spout.org/> * Spout is licensed under the SpoutDev License Version 1. * * Spout is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * In addition, 180 days after any changes are published, you can use the * software, incorporating those changes, under the terms of the MIT license, * as described in the SpoutDev License Version 1. * * Spout is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License, * the MIT license and the SpoutDev License Version 1 along with this program. * If not, see <http://www.gnu.org/licenses/> for the GNU Lesser General Public * License and see <http://www.spout.org/SpoutDevLicenseV1.txt> for the full license, * including the MIT license. */ package org.spout.engine.renderer.vertexbuffer; import java.nio.Buffer; import java.nio.ByteBuffer; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; public class VertexBufferImplByte implements VertexBuffer { int usage = GL15.GL_STATIC_DRAW; String elementName; int type; int vboId = -1; int size; int elements; int layout; public VertexBufferImplByte(String name, int elements, int layout) { elementName = name; this.elements = elements; this.layout = layout; } @Override public void flush(Buffer buffer) { flush((ByteBuffer) buffer); } 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); } 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_BYTE, false, 0, 0); } public String getName() { return elementName; } public int getElements() { return elements; } public int getLayout() { return layout; } public void dispose() { if (vboId != -1) GL15.glDeleteBuffers(vboId); } public void finalize() { dispose(); } }